
    Kcm                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
  ed           dZdZdZd	Z G d
 d          ZdS )    N)
debugprint)DBusGMainLoop)reduceT)set_as_defaultz#org.opensuse.CupsPkHelper.Mechanism/z1org.opensuse.CupsPkHelper.Mechanism.NotPrivilegedc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d%S )&
Connectionc                 (   d | _         	 t          j                    | _        t          j                    | _        n(# t          j        j        $ r d x| _        | _        Y nw xY wt          j	        |||          | _
        |                                  d S )N)hostport
encryption)_parentdbus
SessionBus_session_bus	SystemBus_system_bus
exceptionsDBusExceptioncupsr	   _connection_hack_subclass)selfr   r   r   s       */usr/share/system-config-printer/cupspk.py__init__zConnection.__init__5   s    	8 $ 1 1D#~//D, 	8 	8 	8377D 0 0 0	8  ?046@B B B 	s   0: "AAc                    t          | j        j                  }t          | j                  D ]^}|d         dk    rt	          | j        |          }t          |          |k    r8t          | |          st          | ||j                   _d S )Nr   _)typer   getPrintersdirgetattrhasattrsetattr__call__)r   
methodtypefnamefns       r   r   zConnection._hack_subclassF   s     $*677
)** 	2 	2EQx3)511BBxx:%%4'' 2eR[111	2 	2    c                     || _         d S N)r   )r   parents     r   
set_parentzConnection.set_parentT   s    r(   c                     	 | j                             t          t                    }t	          j        |t                    S # t          j        j        $ r Y d S t          $ r Y d S w xY wr*   )
r   
get_objectCUPS_PK_NAMECUPS_PK_PATHr   	InterfaceCUPS_PK_IFACEr   r   AttributeError)r   objects     r   _get_cups_pkzConnection._get_cups_pkX   sq    	%00|LLF>&-888, 	 	 	44 	 	 	44	s   >A A%	A%$A%c                    d }|                     dd           }|sG|                                 }	|	r1	 |	                    |          }n# t          j        j        $ r Y nw xY w|s|s ||i |S d}
	 	  ||d|i}
t          |
          t          k    r3|
dd          }|
d         dk    rt          |          dk    r|d         S |S n# t          j        j        $ rj}|	                                t          k    rCt          d|                                z             t          j        t          j        d          Y d }~nd }~ww xY w|
dk    r*t          d	|d
t!          |
                      ||i |S d S )N	signaturezPolicyKit communication issueT   r    zDBus exception: %spkcancelzPolicyKit call to z did not work: )popr5   get_dbus_methodr   r   r   r   tuplelenget_dbus_nameCUPS_PK_NEED_AUTHr   get_dbus_messager   IPPErrorIPP_NOT_AUTHORIZEDrepr)r   use_fallbackpk_function_namepk_argsfallback_functionargskwdspk_functiondbus_args_signaturecups_pk	pk_retvalretvales                r   _call_with_pk_and_fallbackz%Connection._call_with_pk_and_fallbackd   s   "hh{D99 	''))G ")"9"9:J"K"KKK4   D  	4{ 	4$$d3d3333		'KR>QRR	 	??e++&qrr]F !|r)) v;;!++#)!9,#)M?0   ??$$(999 4q7I7I7L7L LMMM-(?LLL ??J)))4+;+;+;= > > >$$d3d333 ?s1   A AA2AC C EA D??Ec                    dg}t          |          t          |          k    r)d|d<   |                    |           t          |          S d}t          t          |                    D ]}t	          ||                   ||         k    r||         t
          k    rGt	          ||                   t          k    r)|                    t          ||                              {||         t
          k    rGt	          ||                   t          k    r)|                    t          ||                              ||         t
          k    rHt	          ||                   t          k    r*|                    t          ||                              ,||         t
          k    r||         |                    d           \||         t          k    rHt	          ||                   t          k    r*|                    t          ||                              ||         t          k    r||         |                    g            d}|                    ||                    ||d<   t          |          S )NFTr   r9   )r>   extendr=   ranger   strintappendfloatboollist)r   typesrI   rO   	exceptionis         r   _args_to_tuplezConnection._args_to_tuple   s   u::T""F1IMM%   <<	s5zz"" 	# 	#ADG}}a((8s??tDG}}';';MM#d1g,,///1X__d1g%)?)?MM#d1g,,///1X__d1g$)>)>MM#d1g,,///1X__aMM"%%%1X%%$tAw--5*@*@MM$tAw--0001X%%$q'/MM"%%% $IMM$q'""""q	V}}r(   c                     g }|D ]7}||v r|                     ||                    "|                     d           8t          |          S )Nr9   )rW   r=   )r   namesrJ   retnames        r   _kwds_to_varszConnection._kwds_to_vars   sU     	 	Dt||

4:&&&&

2Szzr(   c                    d}d}g }g }d}t          |          dk    r- | j        t          t          t          t          gg|R  \  }}}}}n0d|v r|d         }d|v r|d         }d|v r|d         }d|v r|d         }||||f}	  | j        |d|| j        j        g|R i |}	n# t          $ r t          d	           d|v rd
}t          |          dk    rt          d |          }nd}t          |          dk    rt          d |          }nd}|||f} | j        |d|| j        j        g|R i |}	Y nw xY wt          |	
                                          dk    rEt          |	t          |	
                                          d                            t          k    r|	S i }
|	e|	
                                D ]P}t          |          t          j        k    r&t          |	|                   |
t          |          <   E|	|         |
|<   Qi }d}dt          |          z   fd|

                                D             }t          |          dk    rd }i }|D ]C}|d t          |          t                    z
           }|dk    r|
|         ||<   ;|
|         }D||||<   |dz  }dt          |          z   fd|

                                D             }t          |          dk    |S )NFr      timeoutlimitinclude_schemesexclude_schemes
DevicesGetz-DevicesGet API exception; using old signatureTc                     | dz   |z   S N, xys     r   <lambda>z'Connection.getDevices.<locals>.<lambda>       q3w{ r(   r9   c                     | dz   |z   S rl   rn   ro   s     r   rr   z'Connection.getDevices.<locals>.<lambda>  rs   r(   :c                 >    g | ]}|                               |S rn   endswith.0rp   postfixs     r   
<listcomp>z)Connection.getDevices.<locals>.<listcomp>"  s*    KKKQqzz'7J7JKqKKKr(   z
device-urir8   c                 >    g | ]}|                               |S rn   rw   ry   s     r   r|   z)Connection.getDevices.<locals>.<listcomp>3  s*    OOO1::g;N;NO1OOOr(   )r>   r^   rV   rU   rQ   r   
getDevices	TypeErrorr   r   keysr   rZ   dictr   String)r   rI   rJ   
use_pycupsrg   rh   ri   rf   rG   result
result_strr]   devicesndevice_keys
device_uridevice_dictkeyr{   s                     @r   r~   zConnection.getDevices   s   
t99>>M`TM`begjloqtauM}x|M}M}M}JZ''D  y/$W D(("&'8"9 D(("&'8"9E?OD	D4T4Z5A7595E5PD 7;D D D ?CD DFF  	D 	D 	DGHHHD  !
 O$$q(("(*B*B*9#; #; #%O$$q(("(*B*B*9#; #; #%o?G4T4Z5A7595E5PD 7;D D D ?CD DFFF'	D2 ""tVD4G4G4J-K'L'LPT'T'T]
[[]] . .77dk))),VAYJs1vv&&$*1IJqMM
 Q-KKKK*//"3"3KKK;!##JK  / /.Q#g,,../,&&'1!}K$$!+AJJ%&1
#FACGGmGOOOOjoo&7&7OOOK! ;!##$ s   B" "BD54D5c                 v     | j         t          gg|R  \  }}|f} | j        |d|| j        j        g|R i | d S )N	JobCancel)r^   rV   rQ   r   	cancelJobr   rI   rJ   r   jobidrG   s         r   r   zConnection.cancelJob;  sy    1d13%?$???U)''
(3W(,(8(B	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NJobSetHoldUntil)r^   rV   rU   rQ   r   setJobHoldUntil)r   rI   rJ   r   r   job_hold_untilrG   s          r   r   zConnection.setJobHoldUntilG  s    .Ad.A3*.Tt.T.T.T+UN.+''
(97(,(8(H	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                 v     | j         t          gg|R  \  }}|f} | j        |d|| j        j        g|R i | d S )N
JobRestart)r^   rV   rQ   r   
restartJobr   s         r   r   zConnection.restartJobP  sy    1d13%?$???U)''
(4g(,(8(C	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                    d}d}t          |          dk    r | j        t          t          gg|R  \  }}}nP | j        t          gg|R  \  }}d|v r	|d         }n,d|v r	|d         }nd|v r	|d         }n|st                      d}|s||t	          j        d          \  }}	t          j        |           ||	f}
 | j        |d|
| j	        j
        g|R i | t          j        |	t          j                  }t          j        |d	          }|                    d
           |}t          j        |d
t          j                   |                                }|dk    rBt          j        ||                    d                     |                                }|dk    Bnq|                    d
           |                                }|dk    rB|                    |                    d                     |                                }|dk    B|                                 t          j        |	           dS ||f}
 | j        |d|
| j	        j
        g|R i | dS )af   Keeping this as an alternative for the code.
            We don't use it because it's not possible to know if the call was a
            PK-one (and so we push the content of a temporary filename to fd or
            file) or a non-PK-one (in which case nothing should be done).

                filename = None
                fd = None
                file = None
                if use_pycups:
                    if len(kwds) != 1:
                        use_pycups = True
                    elif kwds.has_key('filename'):
                        filename = kwds['filename']
                    elif kwds.has_key('fd'):
                        fd = kwds['fd']
                    elif kwds.has_key('file'):
                        file = kwds['file']
                    else:
                        use_pycups = True

                    if fd or file:
        N   filenamefdfilez/tmp)r    FileGetrtr   r9   zUTF-8)r>   r^   rU   r   tempfilemkstemposcloserQ   r   getFileopenO_RDONLYfdopenseeklseekSEEK_SETreadlinewriteencoderemove)r   rI   rJ   file_objectr   r   resourcer   tmpfdtmpfnamerG   tmpfilelines                r   r   zConnection.getFileY  s   0 t99>>/Bt/BC:/UPT/U/U/U,Z88%8T%8#%F%F%F%F"ZT!!
+$Z4"6l! $#++%#H %	;;3J !) 0V < < <UHHe*G+D+J,5w,0,<,D; .2; ; ; 6:; ; ;
 GXr{33Ei--GLL!~"a---''))bjjHb$++g"6"6777"++--D bjj   !$$$''))bjj%%t{{7';';<<<"++--D bjj MMIx     *G+D+J,5w,0,<,D; .2; ; ; 6:; ; ; ; ;r(   c                    t          |          dk    r | j        t          t          gg|R  \  }}}nP | j        t          gg|R  \  }}d|v r	|d         }n,d|v r	|d         }nd|v r	|d         }n|st                      d }|s_||Zt	          j                    \  }}	t          j        |dt          j                   |xt          j        |dt          j                   t          j	        |d          }
|
dk    r<|
dk    r6t          j
        ||
           t          j	        |d          }
|
dk    r|
dk    6n^|                    d           |                                }|dk    r/t          j
        ||           |                                }|dk    /t          j        |           ||	f} | j        |d	|| j        j        g|R i | t          j        |	           d S ||f} | j        |d	|| j        j        g|R i | d S )
Nr   r   r   r   r   i   r9   r(   FilePut)r>   r^   rU   r   r   r   r   r   r   readr   r   r   r   rQ   r   putFiler   )r   rI   rJ   r   r   r   r   r   r   r   bufr   rG   s                r   r   zConnection.putFile  s   t99>>/Bt/BC:/UPT/U/U/U,Z88%8T%8#%F%F%F%F"ZT!!
+$Z4"6l! $#++%#H "	;;3J ( 0 2 2UHHeQ,,,~"a---gr3''RiiC3JJHeS)))'2s++C RiiC3JJ   !$$$"++..bjjHeT***&//22D bjj He*G+D+J,5w,0,<,D; .2; ; ; 6:; ; ;
 Ix       *G+D+J,5w,0,<,D; .2; ; ; 6:; ; ; ; ;r(   c                     | j         t          gg|R  \  }} | j        g dfi |\  }}}}}	}
d}|sG|sE|
rCt          j        d          \  }}|
                    |           t          j        |           d}|rA|s?||	|||f} | j        |d|| j	        j
        g|R i | |rt          j        |           d S d S ||	|||f} | j        |d|| j	        j
        g|R i | d S )N)r   ppdnameinfolocationdeviceppdFT)textPrinterAddWithPpdFile
PrinterAdd)r^   rU   rc   r   r   writeFdr   r   rQ   r   
addPrinterunlink)r   rI   rJ   r   rb   r   r   r   r   r   r   need_unlinkr   rG   s                 r   r   zConnection.addPrinter  s   0T0#>>>>T;M4;M  OK  OK  OK  <T  <T  OS  <T  <T87D(FC 	x 	C 	%-D999NRKKOOOHRLLLK 	;G 	;VXtX>G+D+J,CW,0,<,G; .2; ; ; 6:; ; ;  $	(#####$ $ VWdH=G+D+J,8',0,<,G; .2; ; ; 6:; ; ; ; ;r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetDevice)r^   rU   rQ   r   setPrinterDevice)r   rI   rJ   r   rb   r   rG   s          r   r   zConnection.setPrinterDevice  s    %8T%8#s%Kd%K%K%K"T6.''
(:G(,(8(I	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetInfo)r^   rU   rQ   r   setPrinterInfo)r   rI   rJ   r   rb   r   rG   s          r   r   zConnection.setPrinterInfo  s    #64#6Sz#ID#I#I#I T4,''
(8'(,(8(G	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetLocation)r^   rU   rQ   r   setPrinterLocation)r   rI   rJ   r   rb   r   rG   s          r   r   zConnection.setPrinterLocation  s    ':t':C:'M'M'M'M$T8"''
(<g(,(8(K	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetShared)r^   rU   rY   rQ   r   setPrinterShared)r   rI   rJ   r   rb   sharedrG   s          r   r   zConnection.setPrinterShared  s    %8T%8#t%Lt%L%L%L"T6.''
(:G(,(8(I	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          t          gg|R  \  }}}}|||f} | j        |d|| j        j        g|R i | d S )NPrinterSetJobSheets)r^   rU   rQ   r   setPrinterJobSheets)r   rI   rJ   r   rb   startendrG   s           r   r   zConnection.setPrinterJobSheets$  s    )<)<c3_)Tt)T)T)T&T5#$''
(=w(,(8(L	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetErrorPolicy)r^   rU   rQ   r   setPrinterErrorPolicyr   rI   rJ   r   rb   policyrG   s          r   r   z Connection.setPrinterErrorPolicy.  s    %8T%8#s%Kd%K%K%K"T6.''
(?(,(8(N	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetOpPolicy)r^   rU   rQ   r   setPrinterOpPolicyr   s          r   r   zConnection.setPrinterOpPolicy8  s    %8T%8#s%Kd%K%K%K"T6.''
(<g(,(8(K	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetUsersAllowed)r^   rU   rZ   rQ   r   setPrinterUsersAllowedr   rI   rJ   r   rb   usersrG   s          r   r   z!Connection.setPrinterUsersAllowedB  s    $7D$7d$Kd$K$K$K!T5-''
(@'(,(8(O	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterSetUsersDenied)r^   rU   rZ   rQ   r   setPrinterUsersDeniedr   s          r   r   z Connection.setPrinterUsersDeniedL  s    $7D$7d$Kd$K$K$K!T5-''
(?(,(8(N	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          t          gg|R  \  }}}}|s|f}n% | j         t          t          t          gg|R  \  }}}}|||f} | j        |d|| j        j        g|R i | d S )NPrinterAddOptionDefault)r^   rU   rZ   rQ   r   addPrinterOptionDefault)	r   rI   rJ   r   rb   optionvaluevaluesrG   s	            r   r   z"Connection.addPrinterOptionDefaultU  s     -@D,?c3,WRV,W,W,W)T65 	^XFF 2E1Dc3PTEU1]X\1]1]1].Zvv(''
(A7(,(8(P	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NPrinterDeleteOptionDefault)r^   rU   rQ   r   deletePrinterOptionDefault)r   rI   rJ   r   rb   r   rG   s          r   r   z%Connection.deletePrinterOptionDefaultg  s    %8T%8#s%Kd%K%K%K"T6.''
(Dg(,(8(S	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                 v     | j         t          gg|R  \  }}|f} | j        |d|| j        j        g|R i | d S )NPrinterDelete)r^   rU   rQ   r   deletePrinterr   rI   rJ   r   rb   rG   s         r   r   zConnection.deletePrinterq  sy    0T0#>>>>T'''
(7(,(8(F	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NClassAddPrinter)r^   rU   rQ   r   addPrinterToClassr   rI   rJ   r   printerrb   rG   s          r   r   zConnection.addPrinterToClass|  s    &9d&93*&Lt&L&L&L#Wd/''
(97(,(8(J	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          t          gg|R  \  }}}||f} | j        |d|| j        j        g|R i | d S )NClassDeletePrinter)r^   rU   rQ   r   deletePrinterFromClassr   s          r   r   z!Connection.deletePrinterFromClass  s    &9d&93*&Lt&L&L&L#Wd/''
(<g(,(8(O	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                 v     | j         t          gg|R  \  }}|f} | j        |d|| j        j        g|R i | d S )NClassDelete)r^   rU   rQ   r   deleteClassr   s         r   r   zConnection.deleteClass  sy    0T0#>>>>T'''
(5w(,(8(D	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                 v     | j         t          gg|R  \  }}|f} | j        |d|| j        j        g|R i | d S )NPrinterSetDefault)r^   rU   rQ   r   
setDefaultr   s         r   r  zConnection.setDefault  sy    0T0#>>>>T'''
(;W(,(8(C	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                 x     | j         t          gg|R  \  }}|df} | j        |d|| j        j        g|R i | d S )NTPrinterSetEnabled)r^   rU   rQ   r   enablePrinterr   s         r   r  zConnection.enablePrinter  s{    0T0#>>>>T,''
(;W(,(8(F	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                 x     | j         t          gg|R  \  }}|df} | j        |d|| j        j        g|R i | d S )NFr  )r^   rU   rQ   r   disablePrinterr   s         r   r  zConnection.disablePrinter  s{    0T0#>>>>T-''
(;W(,(8(G	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                 z     | j         t          gg|R  \  }}|ddf} | j        |d|| j        j        g|R i | d S )NTr9   PrinterSetAcceptJobs)r^   rU   rQ   r   
acceptJobsr   s         r   r
  zConnection.acceptJobs  s~    0T0#>>>>Tr"''
(>(,(8(C	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                      | j         t          gg|R  \  }} | j        dgfi |\  }|d|f} | j        |d|| j        j        g|R i | d S )NreasonFr	  )r^   rU   rc   rQ   r   
rejectJobs)r   rI   rJ   r   rb   r  rG   s          r   r  zConnection.rejectJobs  s    0T0#>>>>T&D&z::T::	'''
(>(,(8(C	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   c                    d}d} | j         |d|| j        j        g|R i |}i }|e|                                D ]P}t	          |          t
          j        k    r&t          ||                   |t          |          <   E||         ||<   Q|S )NFrn   ServerGetSettings)rQ   r   adminGetServerSettingsr   r   r   r   rU   )r   rI   rJ   r   rG   r   settingsr]   s           r   r  z!Connection.adminGetServerSettings  s    
00/BG/3/?/V> 15> > > 9=> > [[]] , ,77dk))'*6!9~~HSVV$$"()HQKKr(   c                 v     | j         t          gg|R  \  }}|f} | j        |d|| j        j        g|R i | d S )NServerSetSettings)r^   r   rQ   r   adminSetServerSettings)r   rI   rJ   r   r  rG   s         r   r  z!Connection.adminSetServerSettings  sy    !4!4dV!Cd!C!C!CX+''
(;W(,(8(O	7 *.	7 	7 	7 26	7 	7 	7 	7 	7r(   N)'__name__
__module____qualname__r   r   r,   r5   rQ   r^   rc   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  rn   r(   r   r	   r	   4   s;         "2 2 2  	 	 	14 14 14h+ + +\	 	 	([ [ [B7 7 77 7 77 7 7O; O; O;d3; 3; 3;l; ; ;67 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 7$7 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 7  &7 7 7 7 7r(   r	   )r   sysr   r   r   debugr   dbus.mainloop.glibr   	functoolsr   r/   r0   r2   r@   r	   rn   r(   r   <module>r     s   : 
			 



          , , , , , ,       T " " " "55G w
7 w
7 w
7 w
7 w
7 w
7 w
7 w
7 w
7 w
7r(   