+
    QDbmv                         ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^RIHt ^RIH	t	 ^ RI
Ht  ! R R4      tR tR t ! R	 R
4      t ! R R]4      tR tR tR tR tR tR tR t]R8X  d
   ]! 4        R# R# )    N)_debugprint)config)reducec                      a  ] tR t^t o RR.tR tR tR tR tR t	R t
R	 tR
 tR tR tRR ltRR ltR tR tR tR tR tRR ltRR ltRR ltR tRtV tR# )Printeroptionslocalc                    Wn         W n        . V n        \        V4      ^ 8  pRpV'       d*   V P                  ! R/ VB  V P
                  '       d   RpMRpV'       d   V P                  4        RV n        R# )z
@param name: printer name
@type name: string
@param connection: CUPS connection
@type connection: CUPS.Connection object
@param kw: printer attributes
@type kw: dict indexed by string
TFN )name
connectionclass_memberslenupdateis_classgetAttributes_ppd)selfr   r   kwhave_kwfetch_attrss   &&&,  k/tmp/fempkg/build/system-config-printer/DESTDIR/usr/lib/python3.14/site-packages/cupshelpers/cupshelpers.py__init__Printer.__init__   sc     	$r(Q,KK2}}}"#!	    c                f    V P                   e#   \        P                  ! V P                   4       R # R # N)r   osunlinkr   s   &r   __del__Printer.__del__9   s!    99 IIdii  !r   c                (    R V P                   ,          # )z<cupshelpers.Printer "%s">)r   r    s   &r   __repr__Printer.__repr__=   s    -		99r   c                8   R  pRp\        V4      p\        P                   Fu  pVP                  V4      '       g   K  V! WCR 4      pWPP                  9   d   K8  VR8X  d   Rp\        W\        V P                  \        \        V4      ,          4      4       Kw  	  R# )c                 "    V P                  4       # r   )lower)strs   &r   _ascii_lower+Printer._expand_flags.<locals>._ascii_lowerB   s    99;r   CUPS_PRINTER_Nclassr   )	r   cups__dict__
startswith_flags_blacklistsetattrbooltypegetattr)r   r*   prefixprefix_lengthr   	attr_names   &     r   _expand_flagsPrinter._expand_flags@   s    	  !F MMDv&& n!56  5 55x'ZTYYt)<<=? "r   c                T   VP                  R^ 4      V n        V P                  \        P                  8g  V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n	        VP                  R	^ 4      V n
        VP                  R
R4      V n        \        V P                  4      \        8w  d   V P                  .V n        V P                  4        V P                  f   V P                  '       * V n        V =VP                  R. 4      V n        \        V P                  4      \        8w  d   V P                  .V n        V P                  P!                  4        Wn        R# )zh
Update object from printer attributes.

@param kw: printer attributes
@type kw: dict indexed by string
zprinter-statez
device-uri zprinter-infozprinter-is-sharedNzprinter-locationzprinter-make-and-modelzprinter-typezprinter-uri-supportedzmember-names)getstater.   IPP_PRINTER_STOPPEDenabled
device_uriinfo	is_sharedlocationmake_and_modelr4   uri_supportedlistr9   
not_sharedr   sortother_attributes)r   r   s   &,r   r   Printer.updateS   sL    VVOQ/
zzT%=%==&&r2FF>2.	 3T:126 ff%=rBFF>1-	VV$;R@##$,"&"4"4!5D>>!!%0DNOVVNB7##$,"&"4"4!5D" "r   c                X   V P                   P                  V P                  4      p/ V n        / V n        RRRR.3RR. RO3/V n        VP                  4        EF=  w  r#VP                  R4      '       d   VR\        R4      )  pVR9   d   K5  VP                  VR
,           R4      ;'       g'    V P
                  P                  VR4      ;'       g    Rp\        V\        4      '       d   \        R V4      pW0P                  V&   VR
,           V9   d"   WR
,           ,          pW53V P
                  V&   K  K  VP                  R
4      '       d   K  VR8w  g   EK  VR8w  g   EK  VR	8w  g   EK  VP                  R4      '       d   EK/  W0P                  V&   EK@  	  VP                  RR4      w  V n        V n        VP                  RR.4      V n        VP                  RR4      V n        VP                  RR.4      V n        VP                  R	R4      ;'       g    RV n        VP                  RR.4      V n        RV n        . V n        RV9   d   VR,          V n        RV n        MRV9   d   VR,          V n        RP/                  V P,                  4      V n        V P2                  ! R/ VB  R# )z
Fetch further attributes for the printer.

Normally only a small set of attributes is fetched.  This
method is for fetching more.
	landscapeFalseTruezpage-bordernonez-defaultNprinter-error-policyprinter-op-policyz
-supportedr<   c                 "    V R ,           V,           # ),r   )xys   &&r   <lambda>'Printer.getAttributes.<locals>.<lambda>   s    3qr   zjob-sheets-defaultzrequesting-user-name-zjob-sheets-supportedzprinter-error-policy-supporteddefaultzprinter-op-policy-supportedTzrequesting-user-name-allowedFzrequesting-user-name-deniedz, )rP   singlezsingle-thickdoublezdouble-thick)z
job-sheetsrQ   rR   znotify-eventszdocument-formatznotify-lease-duration)rP   rP   r   )r   getPrinterAttributesr   
attributesrJ   possible_attributesitemsendswithr   r=   
isinstancerG   r   r0   job_sheet_startjob_sheet_endjob_sheets_supportederror_policyerror_policy_supported	op_policyop_policy_supporteddefault_allowexcept_usersjoinexcept_users_stringr   )r   attrskeyvaluer   	supporteds   &     r   r   Printer.getAttributeso   s    44TYY? "7VW$56V &? @$   ++-JC||J'',S_,- 5 5
 !IId\&94@   4488tD   ud++"$8%@E(-%$- %<&7 8I6;5GD,,T2 . llL11--//,,nn&=>>-2%%c*= (@ 4999 "2440d0$)II.Dvh$O!!II&<fE&+ii,vh'8##6;HHy#(99)I;$8  ")U2 %&D ED!&D*e3 %&C DD#'99T->->#? ur   c                    V P                   ^ ,          P                  R4      '       g   R# V P                   ^ ,          R,          pVP                  R4      ^ ,          pVP                  R4      ^ ,          pVR8X  d   RpV# )zK
Find out which server defines this printer.

@returns: server URI or None
zipp://N:   NN/:zlocalhost.localdomain	localhost)rF   r0   split)r   uris   & r   	getServerPrinter.getServer   so     !!!$//99  #B'iinQiinQ))C
r   c                   RpV P                   fL    V P                  P                  V P                  4      V n         \        P
                  ! V P                   4      pVf/   V P                   e!   \        P
                  ! V P                   4      pV#   \        P                   d1   pTP                  w  r4T\        P                  8X  d   Rp Rp?Lsh Rp?ii ; i)zo
Obtain the printer's PPD.

@returns: cups.PPD object, or False for raw queues
@raise cups.IPPError: IPP error
NF)	r   r   getPPDr   r.   PPDIPPErrorargsIPP_NOT_FOUND)r   resultemargsems   &    r   r|   Printer.getPPD   s     99 OO22499=	499- >dii3XXtyy)F == ***"Fs   A
B C%%CCCc                
   \        V\        4      '       dG   \        P                  ! \        P                  4      pVR8w  d   \        V4      P                  VR4      pV P                  P                  V P                  W4       R# )z~
Set a printer's option.

@param name: option name
@type name: string
@param value: option value
@type value: option-specific
.N)
ra   floatlocalenl_langinfo	RADIXCHARr)   replacer   addPrinterOptionDefaultr   )r   r   ro   	radixchars   &&& r   	setOptionPrinter.setOption   s]     ue$$**F,<,<=ICU++Y<//		4Gr   c                R    V P                   P                  V P                  V4       R# )zH
Unset a printer's option.

@param name: option name
@type name: string
N)r   deletePrinterOptionDefaultr   )r   r   s   &&r   unsetOptionPrinter.unsetOption   s     	22499dCr   Nc                   V'       d(   V P                   P                  V P                  4       R# V'       d*   V P                   P                  V P                  VR7       R# V P                   P                  V P                  4       R# )z
Set the printer's enabled state.

@param on: whether it will be enabled
@type on: bool
@param reason: reason for this state
@type reason: string
reasonN)r   enablePrinterr   disablePrinterr   onr   s   &&&r   
setEnabledPrinter.setEnabled   sQ     OO))$))4..tyy.H..tyy9r   c                   V'       d(   V P                   P                  V P                  4       R# V'       d*   V P                   P                  V P                  VR7       R# V P                   P                  V P                  4       R# )z
Set the printer's accepting state.

@param on: whether it will be accepting
@type on: bool
@param reason: reason for this state
@type reason: string
r   N)r   
acceptJobsr   
rejectJobsr   s   &&&r   setAcceptingPrinter.setAccepting  sQ     OO&&tyy1**499V*D**4995r   c                R    V P                   P                  V P                  V4       R# )zY
Set the printer's shared state.

@param on: whether it will be accepting
@type on: bool
N)r   setPrinterSharedr   )r   r   s   &&r   	setSharedPrinter.setShared  s     	((B7r   c                R    V P                   P                  V P                  V4       R# )zS
Set the printer's error policy.

@param policy: error policy
@type policy: string
N)r   setPrinterErrorPolicyr   r   policys   &&r   setErrorPolicyPrinter.setErrorPolicy  s     	--dii@r   c                R    V P                   P                  V P                  V4       R# )z[
Set the printer's operation policy.

@param policy: operation policy
@type policy: string
N)r   setPrinterOpPolicyr   r   s   &&r   setOperationPolicyPrinter.setOperationPolicy'  s     	**499f=r   c                R    V P                   P                  V P                  W4       R# )zv
Set the printer's job sheets.

@param start: start sheet
@type start: string
@param end: end sheet
@type end: string
N)r   setPrinterJobSheetsr   )r   startends   &&&r   setJobSheetsPrinter.setJobSheets0  s     	++DIIuBr   c                   \        V\        4      '       d   VP                  4       pV Uu. uF  qDP                  R4      NK  	  pp. pV F  pVP                  V4       K  	  V Uu. uF  qDP	                  4       NK  	  ppV Uu. uF  qU'       g   K  VNK  	  ppV'       d)   V P
                  P                  V P                  V4       R# V P
                  P                  V P                  V4       R# u upi u upi u upi )z
Set access control list.

@param allow: whether to allow by default, otherwise deny
@type allow: bool
@param except_users: exception list
@type except_users: string list
rT   N)	ra   r)   rw   extendstripr   setPrinterUsersDeniedr   setPrinterUsersAllowed)r   allowrj   usersu_fs   &&&   r   	setAccessPrinter.setAccess;  s     lC(( &&(E+015aWWS\5E1L##A& /;<|!GGI|L<)5<2BBL<OO11$))\JOO22499lK 2 =<s   C2&C7	C<C<c                "   . p  . ROpV P                   P                  VR7      pTP                  4        F  w  rg TR,          pYP                  R4      ^,           R pYP                  8w  d   K;  T'       d   RT9   g   KL  TR,          R8X  g   K\  TP                  T4       Tf   Ks  \        T4      T8X  g   K   T# 	  T#   \         d    T P                   P                  4       p Li ; i  \        P                   d    Tu # i ; i    K  ; i)z
Find out whether jobs are queued for this printer.

@param only_tests: whether to restrict search to test pages
@type only_tests: bool
@returns: list of job IDs
job-printer-urijob-name)requested_attributesrt   Nz	Test Page)job-idr   r   )
r   getJobs	TypeErrorr.   r~   r_   rindexr   appendr   )	r   
only_testslimitretrjobsidrm   rx   s	   &&&      r   
jobsQueuedPrinter.jobsQueuedR  s    	2=..Q.G IB-.**c*Q./0 iiu$z"k1

B$ce);
! &  
-  2..12 }} 	J	s4    C #D	%C)&C, (C))C, ,DD	Dc                P   . p  . ROpV P                   P                  RVR7      pTP                  4        F  w  rV TR,          pYwP                  R4      ^,           R pYpP                  8w  d   K;  TP                  R\        P                  4      \        P                  8  d   Kp  TP                  T4       Tf   K  \        T4      T8X  g   K   T# 	  T#   \         d     T P                   P                  RR7      p Li ; i  \        P                   d    Tu # i ; i    K  ; i)	zW
Find out whether there are preserved jobs for this printer.

@return: list of job IDs
r   	job-state	completed)
which_jobsr   )r   rt   N)r   r   r   )r   r   r   r.   r~   r_   r   r   r=   IPP_JOB_PENDINGIPP_JOB_COMPLETEDr   r   )r   r   r   r   r   r   rm   rx   s   &&      r   jobsPreservedPrinter.jobsPreservedw  s$    		H>..;EF / H IB-.**c*Q./0 ii		;//1373I3IJJJO S#Y%%7
 & 
+  H..;.GH }} 	J	s4   !C #D 'D =D ?D  D DD D%c                (    V P                  RVR7      # )zT
Find out whether test jobs are queued for this printer.

@returns: list of job IDs
T)r   r   )r   )r   r   s   &&r   testsQueuedPrinter.testsQueued  s     4u==r   c           
         V P                   P                  V P                  4       \        P                  ! 4       ;_uu_ 4       p RpV P                   P                  W!P                  4       R7       TP                  ^ 4       TP                  4        Uu. uF  qUP                  R4      NK  	  ppRp^ pT Fa  pTP                  R4      '       g   K  TP!                  R4      ^,          p	YP                  8w  d   RTR	,          ,           Yh&   R
pT^,          pKc  	  T'       d   TP                  ^ 4       TP#                  T Uu. uF  qUP%                  R4      NK  	  up4       TP'                  4        TP)                  4        TP                  ^ 4        T P                   P+                  Y!P                  4       R7       TuuRRR4       #   \        P                   d]   pTP                  w  pT\        P                  \        P                  39   d    Rp?RRR4       R# \        P                  ! T4      hRp?ii ; iu upi u upi   \        P                   d     RRR4       R# i ; i  + '       g   i     R# ; i)z)
Set this printer as the system default.
z/admin/conf/lpoptions)fdNFzUTF-8zDefault  zDest :   NNT)r   
setDefaultr   tempfileTemporaryFilegetFilefilenor.   	HTTPErrorr   HTTP_NOT_FOUNDHTTP_AUTHORIZATION_CANCELEDseek	readlinesdecoder0   rw   
writelinesencodetruncateflushputFile)
r   fresourcer   slinelineschangedir   s
   &         r   setAsDefaultPrinter.setAsDefault  s    	""499- ##&&!)2''XX['A FFAJ78{{~G~tkk'*~EGGA??J//::s+A.Dyy(#*T"X#5"&FA  
HG 4HI



!OO++X((++F I '& >> )vv,,d.N.NOO  '& nna(() H I ~~ ! E '&B!C '&&s   I,,G
1#I,H>-I,AI," I,I8I,*I>I,
H;3H6I, H66H;;I,I)I,(I))I,,I=	)r   r]   r   r   ri   rA   r@   re   rf   rj   rl   rB   rC   rc   rb   rd   rD   rE   r   rg   rh   rJ   r^   r>   r4   rF   r   )FN)__name__
__module____qualname____firstlineno__r1   r   r!   r$   r9   r   r   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r      s     !7+4!:?&#8BH0H D:"6"8A>	CL.#J!F>, ,r   r   c                    V P                  4       pV P                  4       pVP                  4        FD  w  r4\        W03/ VB pWAV&   W29   g   K  W#,          Vn        VP                  P                  4        KF  	  V# )z
Obtain a list of printers.

@param connection: CUPS connection
@type connection: CUPS.Connection object
@returns: L{Printer} list
)getPrinters
getClassesr_   r   r   rI   )r   printersclassesr   printers   &    r   r  r    sq     %%'H##%G!)$6g6 ?$+MG!!!&&( * Or   c                ,   / pV P                  R4      pV FO  pVP                  R4      R8X  d   K  VP                  R^4      w  rEVP                  4       WP                  4       &   KQ  	  RV9   d   VP                  RVR,          4       RV9   d   VP                  RVR,          4       RV9   d   VP                  RVR,          4       R F  pVP                  VR	4       K  	  VR,          R	8X  d   . VR&   V# VR,          P                  R
4      VR&   V# )z
Parse an IEEE 1284 Device ID, so that it may be indexed by field name.

@param id: IEEE 1284 Device ID, without the two leading length bytes
@type id: string
@returns: dict indexed by field name
;ru   MANUFACTURERMFGMODELMDLzCOMMAND SETCMDr<   rT   )	r  r  r  CLSDESSNSPJ)rw   findr   
setdefault)r   id_dictpiecespiecer   ro   s   &     r   parseDeviceIDr    s    GXXc]F::c?b kk#a(!&

	 
  5'."9:'5''"235'-"89H4$ Iu~ N !--c2Nr   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )Devicei  z&
This class represents a CUPS device.
c                <   Wn         VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  R4      pV^ ,          V n        \        V4      ^8H  V n
        \        V P
                  4      V n        VP                  R4      pVR8w  d?   V P                  P                  R	R4      '       g   W^,           R
 V P                  R	&   R
# R
# R
# )zV
@param uri: device URI
@type uri: string
@param kw: device attributes
@type kw: dict
zdevice-classr<   zdevice-infozdevice-make-and-modelz	device-idzdevice-locationru   zserial=r  Nr  )rx   r=   device_classrB   rE   r   rD   rw   r4   r   r   r  r  r  )r   rx   r   
uri_piecesr   s   &&,  r   r   Device.__init__  s     FF>26FF="-	 ff%<bA&&b)0"5YYs^
]	J* %dgg.HHY74<<++T"55!$UVDLL 67r   c                (    R V P                   ,          # )z<cupshelpers.Device "%s">)rx   r    s   &r   r$   Device.__repr__  s    ,txx77r   c                   Vf   R# V P                   VP                   8w  d   VP                   '       d   R# R# V P                  pVR8X  di   V P                  P                  R4      R8w  d   RpMEV P                  P                  R4      R8w  d   RpM"V P                  P                  R4      R8w  d   R	pVR
8X  d1   V P                  P	                  4       P                  R4      R8w  d   RpVP                  pVR8X  di   VP                  P                  R4      R8w  d   RpMEVP                  P                  R4      R8w  d   RpM"VP                  P                  R4      R8w  d   R	pVR
8X  d1   VP                  P	                  4       P                  R4      R8w  d   RpV P                   '       g   W#8w  d   VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR8X  d   R# VR	8X  d   R# VR	8X  d   R# VR8X  d   R# VR8X  d   R# VR
8X  d   R# VR
8X  d   R# VR8X  d   R# VR8X  d   R# \        V P                  4      \        VP                  4      8  pV'       g   V P                  VP                  8  pV# )z)
Compare devices by order of preference.
TFdnssdz._ippdnssdiz._pdl-datastreamdnssdsz	._printerdnssdlusbfaxusbfaxserialparallelhphpfaxippsippsocketlpdr  )r   r4   rx   r  r(   r3   r   rB   )r   otherstypeotyper   s   &&   r   __lt__Device.__lt__!  s    ===ENN*~~~		Gxx}}W%+ 12b8 {+r1 E>xx~~$$U+r1 

Gyy~~g&",  23r9 ,2 E>yy %%e,2 }}}%.   
"
"}}  ~~      ~~~~  dggehh/YY+Fr   )	r   r   r  rB   r   rD   rE   r4   rx   N)
r   r   r   r   __doc__r   r$   r8  r   r   r  s   @r   r  r    s      -48^ ^r   r  c                   ,   a  ] tR tRt o R tR tRtV tR# )_GetDevicesCalli  c                    R V9   d8   VP                  R 4      V n        V P                  VR &   VP                  ! R/ VB # RV n        VP                  ! R/ VB pV P                  W4      # )reply_handlerNr   )r=   _client_reply_handler_reply_handler
getDevices)r   r   kwdsr   s   &&& r   call_GetDevicesCall.call  sk    d")-?)CD&$($7$7D!((1D11%)"&&/$/""J77r   c                   VP                  4        FL  w  r4\        V3/ VB pWRV&   VP                  R 8w  g   K(  VP                  R 8X  g   K;  VP                  Vn        KN  	  V P                  '       d   V P	                  W4       R# V# )r<   N)r_   r  rB   rE   r?  )r   r   devicesrx   datadevices   &&&   r   r@  _GetDevicesCall._reply_handler  sp     ICC(4(F!CL{{b V%:%:b%@(.%	 ) %%%&&
<Nr   )r?  N)r   r   r   r   rC  r@  r   r   r  s   @r   r<  r<    s     8
 
r   r<  c                8    \        4       pVP                  W4      # )z
Obtain a list of available CUPS devices.

@param connection: CUPS connection
@type connection: cups.Connection object
@returns: a list of L{Device} objects
@raise cups.IPPError: IPP Error
)r<  rC  )r   r   ops   &, r   rA  rA    s     
	B77J##r   c                    V P                  V4       V P                  V4       V P                  4       f   V P                  V4       R# R# )z
Set a new printer enabled, accepting jobs, and (if necessary) the
default printer.

@param connection: CUPS connection
@type connection: cups.Connection object
@param name: printer name
@type name: string
@raise cups.IPPError: IPP error
N)r   r   
getDefaultr   )r   r   s   &&r   activateNewPrinterrN    sD     d#4  't$ (r   c           
       a V3R loV3R lpV! V 4       F  pVP                   R8X  d   K  VP                  VP                   4      pV'       g   K;  VP                  VP                  8X  g   KX  VP                  pVP                   F^  pVR,          V8X  g   K  VP                  VP                   V4       \        R\        VP                   4      : R\        V4      : 24       K`  	  K  	  R# )z
Copy default options between PPDs.

@param ppd1: source PPD
@type ppd1: cups.PPD object
@param ppd2: destination PPD
@type ppd2: cups.PPD object
c                    < V P                   R ,          pV P                   F  pVP                  S! V4      4       K  	  V# ):NNN)r   	subgroupsr   )groupr   ggetPPDGroupOptionss   &  r   rT  *copyPPDOptions.<locals>.getPPDGroupOptions  s6    --"ANN-a01 !r   c              3   \   <"   V P                    F  pS! V4       F  pVx  K	  	  K  	  R # 5ir   )optionGroups)ppdrR  optionrT  s   &  r   iteratePPDOptions)copyPPDOptions.<locals>.iteratePPDOptions  s*     "",U3\ 4 #s   ),
PageRegionchoicezset z = N)keyword
findOptionui	defchoicechoices
markOptionr   repr)ppd1ppd2rZ  rY  
new_optionro   r]  rT  s   &&     @r   copyPPDOptionsrh    s    
 $D)>>\)__V^^4
:&))Z]]2$$E$,,(#U*OOJ$6$6>$
8J8J2K26,"@ A - *r   c                    Rp. ROpV F  pW8X  g   K  RpK  	   V P                  RV4       \        RV,          4       R#    \        RT,          4        R# ; i)z
Set the PPD page size according to locale.

@param ppd: PPD
@type ppd: cups.PPD object
@param language: language, as given by the first element of
locale.setlocale
@type language: string
A4LetterPageSizezset PageSize = %sz*Failed to set PageSize (%s not available?)N)CPOSIXenen_USen_CAfr_CA)rc  r   )rX  languagesizelettereachs   &&   r   setPPDPageSizerw    s[     D>FD J
D)(4/0JADHIs   $A Ac                *  a RR lp. oV3R lpR;r4V P                  R4      pV'       Ed   VP                  P                  RR4      pVP                  RR4      pVP                  R	R
4      pVP                  RR4      pVP                  R4      R8w  g   VP                  R4      R8w  d   RpVP	                  R4      pV EF  pVP                  4       P	                  R4      p	V	 F  p
V
P                  4       P	                  R4      pV^ ,          pV! V4      pV'       g   V! V4       KE  \        P                  P                  V4      R8X  g   Kk  \        V4      p^pRpW8  g   K  W,          pVP                  V4      '       d)   V\        V4      R pV! V4      pV'       g	   V! V4       K  V^,          pKZ  	  V'       d   EK   M	  V'       g
   V'       Eg2   \        P                  ! RR7      w  pp\        P                  ! V4       V P                  V4       \        P                  ! V^ \        P                   4       \        P"                  ! VRRR7      pRpV F  pVP                  V4      '       g   K  V\        V4      R P                  4       P                  R4      p VP	                  R4      w  pppT! T\$        P&                  R,           4      pT'       d   K  T! \$        P&                  R,           T,           4       K  	  S#     K  ; i)z
Check that all relevant executables for a PPD are installed.

@param ppd: PPD
@type ppd: cups.PPD object
@returns: string list, representing missing executables
c                    V R 8X  d   R# V P                  R4      pVR18w  d   V RV p \        V 4      ^ 8X  d   R# V ^ ,          R8X  dT   \        P                  ! V \        P                  4      '       d   \        RV ,          4       V # \        RV ,          4       R# V P                  R4      R18w  d   R# V . R	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.NR/N9   d   R# VP                  R	4       F  pVP                  \        P                  P                  4      \        P                  P                  ,           V ,           p\        P                  ! V\        P                  4      '       g   K  \        RV,          4       Vu # 	  \        V : R0V: 24       R# )2-builtin%Ntruert   z	%s: foundz%s: NOT found=ru   r   [aliasbindbreakcdcontinuedeclareechoelseevalexecexitexportfiifkillletr	   popdprintfpushdpwdreadreadonlysetshiftshoptsourcetestthentrapr4   ulimitumaskunaliasunsetwaitz: NOT found in r  )
r  r   r   accessX_OKr   rw   rstrippathsep)r   r  p	componentfiles   &&   r   	pathcheck%missingExecutables.<locals>.pathcheck  sv   3; IIsO78D:?7c>yy$(([4/0_t3499c?b  2S 2# 2s 2G 2V 2W 2d 22!*2,224:2<B22#2%-2/32592;A2CH2 2 %2 '/2 182 :?2 AG2  	2 "'	2 )0	2 29	2 ;C	2
 2
 $2
 &,2
 .42
 6>2
 @G2 2 !(2 *02 2 S)I##RWW[[1BGGKK?$FDyy$(([4/0	 *
 	dD9:r   c                 d   < V P                  R 4      pVR8w  d   V RV p SP                  V 4       R# )r|  Nr  )r  r   )exer  exes_to_installs   & r   add_missing'missingExecutables.<locals>.add_missing  s0    HHcN7bq'C$r   NFoomaticRIPCommandLinez&&
r<   z&quot;"z&lt;<z&gt;>(&r
  |r   gsz-sIjsServer=T)textrtzutf-8)encodingz*cupsFilter:z/filter:/usr/lib64/cups/filterz/filter/)z/usr/bin:/binr  )findAttrro   r   r  rw   r   r   r  basenamer   r0   r   mkstempr   writeFdlseekSEEK_SETfdopenr   cupsserverbindir)rX  r  r  r  exepathattrcmdlinepipespipecmdscmdr   argnargisearchargtmpfdtmpfnamer   r   mimetypecostr  s   &                     @r   missingExecutablesr    s   "H O% C<<12Dt**$$fb1//8S1//63///63/LL#"$LL#"$G s#D::=&&,Dyy|))3/1g#S/%
 77##W-5:DD+F+"j>>622"%c6lm"4C&/oG#* +S 1!	3 6 7? B cc %,,48
		8U
%BKK(IIudW5D''CLM*003993?,0JJ,<)XtS $S%+%<%< @> &>? w!8!8:!E!KL  s   &LLc                     \        V 4      p. V3# )z
Check that all relevant executables for a PPD are installed.

@param ppd: PPD
@type ppd: cups.PPD object
@returns: string list pair, representing missing packages and
missing executables
)r  )rX  executabless   & r   missingPackagesAndExecutablesr  p  s     %S)Kr   c                      \         P                  ! 4       p \        V 4      P                  4        F#  p\	        VP
                  VP                  4       K%  	  R # r   )r.   
ConnectionrA  valuesprintrx   r  )crH  s     r   _mainr  |  s7    AQ-&&(vzz6>>* )r   __main__)r.   pprintr   r   restringr   r<   r   r   	functoolsr   r   r  r  r  objectr<  rA  rN  rh  rw  r  r  r  r   r   r   r   <module>r     s   , . - -    r rh$:@ @Df .
$%$A@J.AF
+ Z	G r   