Mini Shell

Direktori : /usr/lib/python3.6/site-packages/cupshelpers/__pycache__/
Upload File :
Current File : //usr/lib/python3.6/site-packages/cupshelpers/__pycache__/cupshelpers.cpython-36.pyc

3

���]mv�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZGdd�d�Zdd	�Z
d
d�ZGdd
�d
�ZGdd�de�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zedkr�e�dS)�N�)�_debugprint)�config)�reducec@s�eZdZddgZdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
d/dd�Zd0dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd1d'd(�Zd2d)d*�Zd3d+d,�Zd-d.�ZdS)4�Printer�options�localcKsX||_||_g|_t|�dk}d}|rB|jf|�|jr>d}nd}|rN|j�d|_dS)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
        rTFN)�name�
connection�
class_members�len�update�is_class�
getAttributes�_ppd)�selfr	r
�kwZhave_kwZfetch_attrs�r�}/builddir/build/BUILDROOT/system-config-printer-1.5.11-13.el8.i386/usr/lib/python3.6/site-packages/cupshelpers/cupshelpers.py�__init__s	zPrinter.__init__cCs|jdk	rtj|j�dS)N)r�os�unlink)rrrr�__del__9s
zPrinter.__del__cCs
d|jS)Nz<cupshelpers.Printer "%s">)r	)rrrr�__repr__=szPrinter.__repr__c	Csvdd�}d}t|�}x\tjD]R}|j|�r|||d��}||jkrFq|dkrRd}t||t|jtt|�@��qWdS)NcSs|j�S)N)�lower)�strrrr�_ascii_lowerBsz+Printer._expand_flags.<locals>._ascii_lowerZ
CUPS_PRINTER_�classr)	r�cups�__dict__�
startswith�_flags_blacklist�setattr�bool�type�getattr)rr�prefixZ
prefix_lengthr	�	attr_namerrr�
_expand_flags@s

zPrinter._expand_flagscKs�|jdd�|_|jtjk|_|jdd�|_|jdd�|_|jdd�|_|jdd�|_|jd	d�|_	|jd
d�|_
|jdd�|_t
|j�tkr�|jg|_|j
�|jdkr�|j|_|`|jdg�|_t
|j�tkr�|jg|_|jj�||_dS)
z�
        Update object from printer attributes.

        @param kw: printer attributes
        @type kw: dict indexed by string
        z
printer-staterz
device-uri�zprinter-infozprinter-is-sharedNzprinter-locationzprinter-make-and-modelzprinter-typezprinter-uri-supportedzmember-names)�get�staterZIPP_PRINTER_STOPPEDZenabledZ
device_uri�infoZ	is_shared�location�make_and_modelr$�
uri_supported�listr(Z
not_sharedr�sort�other_attributes)rrrrrr
Ss(




zPrinter.updatecCs�|jj|j�}i|_i|_dddgfddddddgfd�|_x�|j�D]�\}}|jd	�r�|d
td	��}|d krtqF|j	|dd
�p�|jj	|d
�p�d}t
|t�r�tdd�|�}||j|<|d|kr�||d}||f|j|<qF|jd�rF|dkrF|dkrF|d
krF|j
d�rF||j|<qFW|j	dd!�\|_|_|j	ddg�|_|j	dd�|_|j	ddg�|_|j	d
d��ppd|_|j	ddg�|_d|_g|_d|k�r�|d|_d|_nd|k�r�|d|_dj|j�|_|jf|�d
S)"z�
        Fetch further attributes for the printer.

        Normally only a small set of attributes is fetched.  This
        method is for fetching more.
        �False�True�noneZsinglezsingle-thickZdoublezdouble-thick)Z	landscapezpage-borderz-defaultN�
job-sheets�printer-error-policy�printer-op-policy�
notify-events�document-format�notify-lease-durationz
-supportedr)cSs|d|S)N�,r)�x�yrrr�<lambda>�sz'Printer.getAttributes.<locals>.<lambda>zjob-sheets-defaultzrequesting-user-name-zjob-sheets-supportedzprinter-error-policy-supported�defaultzprinter-op-policy-supportedTzrequesting-user-name-allowedFzrequesting-user-name-deniedz, )r6r7r8r9r:r;)r5r5)r
ZgetPrinterAttributesr	Z
attributesr2Zpossible_attributes�items�endswithrr*�
isinstancer0rr Zjob_sheet_startZ
job_sheet_endZjob_sheets_supportedZerror_policyZerror_policy_supportedZ	op_policyZop_policy_supportedZ
default_allow�except_users�joinZexcept_users_stringr
)r�attrs�key�valuer	Z	supportedrrrros`







zPrinter.getAttributescCsR|jdjd�sdS|jddd�}|jd�d}|jd�d}|dkrNd}|S)	zc
        Find out which server defines this printer.

        @returns: server URI or None
        rzipp://N��/�:zlocalhost.localdomainZ	localhost)r/r �split)r�urirrr�	getServer�szPrinter.getServercCs�d}|jdkrpy |jj|j�|_tj|j�}Wn@tjk
rn}z"|j\}}|tjkr\d}n�WYdd}~XnX|dkr�|jdk	r�tj|j�}|S)z�
        Obtain the printer's PPD.

        @returns: cups.PPD object, or False for raw queues
        @raise cups.IPPError: IPP error
        NF)	rr
�getPPDr	rZPPD�IPPError�argsZ
IPP_NOT_FOUND)r�resultZemargs�e�mrrrrO�s


zPrinter.getPPDcCsDt|t�r.tjtj�}|dkr.t|�j|d�}|jj|j	||�dS)z�
        Set a printer's option.

        @param name: option name
        @type name: string
        @param value: option value
        @type value: option-specific
        �.N)
rC�float�locale�nl_langinfo�	RADIXCHARr�replacer
ZaddPrinterOptionDefaultr	)rr	rHZ	radixcharrrr�	setOption�s
	
zPrinter.setOptioncCs|jj|j|�dS)zh
        Unset a printer's option.

        @param name: option name
        @type name: string
        N)r
ZdeletePrinterOptionDefaultr	)rr	rrr�unsetOption�szPrinter.unsetOptionNcCs>|r|jj|j�n&|r,|jj|j|d�n|jj|j�dS)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	ZdisablePrinter)r�onr]rrr�
setEnabled�s
	zPrinter.setEnabledcCs>|r|jj|j�n&|r,|jj|j|d�n|jj|j�dS)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	Z
rejectJobs)rr_r]rrr�setAcceptings
	zPrinter.setAcceptingcCs|jj|j|�dS)zy
        Set the printer's shared state.

        @param on: whether it will be accepting
        @type on: bool
        N)r
ZsetPrinterSharedr	)rr_rrr�	setSharedszPrinter.setSharedcCs|jj|j|�dS)zs
        Set the printer's error policy.

        @param policy: error policy
        @type policy: string
        N)r
ZsetPrinterErrorPolicyr	)r�policyrrr�setErrorPolicyszPrinter.setErrorPolicycCs|jj|j|�dS)z{
        Set the printer's operation policy.

        @param policy: operation policy
        @type policy: string
        N)r
ZsetPrinterOpPolicyr	)rrdrrr�setOperationPolicy'szPrinter.setOperationPolicycCs|jj|j||�dS)z�
        Set the printer's job sheets.

        @param start: start sheet
        @type start: string
        @param end: end sheet
        @type end: string
        N)r
ZsetPrinterJobSheetsr	)r�start�endrrr�setJobSheets0s	zPrinter.setJobSheetscCs�t|t�rX|j�}dd�|D�}g}x|D]}|j|�q*Wdd�|D�}dd�|D�}|rn|jj|j|�n|jj|j|�dS)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
        cSsg|]}|jd��qS)r<)rL)�.0�urrr�
<listcomp>Fsz%Printer.setAccess.<locals>.<listcomp>cSsg|]}|j��qSr)�strip)rjrkrrrrlJscSsg|]}|r|�qSrr)rjZ_frrrrlKsN)rCrrL�extendr
ZsetPrinterUsersDeniedr	ZsetPrinterUsersAllowed)rZallowrDZusersrkrrr�	setAccess;s	

zPrinter.setAccessFc	Cs�g}y@ydddg}|jj|d�}Wntk
r@|jj�}YnXWntjk
rZ|SXx�|j�D]�\}}y"|d}||jd�dd�}WnwfYnX||jkr�qf|s�d|krf|ddkrf|j|�|dk	rft	|�|krfPqfW|S)	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
        zjob-idzjob-printer-urizjob-name)�requested_attributesrJrNz	Test Page)
r
�getJobs�	TypeErrorrrPrA�rindexr	�appendr)	r�
only_tests�limit�ret�r�jobs�idrFrMrrr�
jobsQueuedRs0


zPrinter.jobsQueuedcCs�g}yFydddg}|jjd|d�}Wn"tk
rF|jjdd�}YnXWntjk
r`|SXx�|j�D]|\}}y"|d}||jd�dd	�}WnwlYnX||jkr�ql|jdtj	�tj
kr�ql|j|�|d	k	rlt|�|krlPqlW|S)
zo
        Find out whether there are preserved jobs for this printer.

        @return: list of job IDs
        zjob-idzjob-printer-uriz	job-stateZ	completed)�
which_jobsrp)r|rJrN)
r
rqrrrrPrArsr	r*ZIPP_JOB_PENDINGZIPP_JOB_COMPLETEDrtr)rrvrwrxryrzrFrMrrr�
jobsPreservedws2


zPrinter.jobsPreservedcCs|jd|d�S)zl
        Find out whether test jobs are queued for this printer.

        @returns: list of job IDs
        T)rurv)r{)rrvrrr�testsQueued�szPrinter.testsQueuedc
 Cst|jj|j�tj���R}yd}|jj||j�d�WnJtjk
r�}z,|j	\}|tj
tjgkrfdStj|��WYdd}~XnX|jd�dd�|j
�D�}d}d}xN|D]F}|jd�r�|jd	�d
}	|	|jkr�d|dd�||<d
}|d
7}q�W|�rf|jd�|jdd�|D��|j�|j�|jd�y|jj||j�d�Wntjk
�rddSX|SQRXdS)z9
        Set this printer as the system default.
        z/admin/conf/lpoptions)�fdFNrcSsg|]}|jd��qS)zUTF-8)�decode)rj�linerrrrl�sz(Printer.setAsDefault.<locals>.<listcomp>zDefault � rzDest �TcSsg|]}|jd��qS)zUTF-8)�encode)rjr�rrrrl�s)r
�
setDefaultr	�tempfileZ
TemporaryFileZgetFile�filenorZ	HTTPErrorrQZHTTP_NOT_FOUNDZHTTP_AUTHORIZATION_CANCELED�seek�	readlinesr rL�
writelines�truncate�flushZputFile)
r�fZresourcerS�s�linesZchanged�ir�r	rrr�setAsDefault�s@





zPrinter.setAsDefault)N)N)FN)N)N)�__name__�
__module__�__qualname__r!rrrr(r
rrNrOr[r\r`rbrcrerfriror{r}r~r�rrrrrs,D	

			
%
#
rcCs\|j�}|j�}xF|j�D]:\}}t||f|�}|||<||kr|||_|jj�qW|S)z�
    Obtain a list of printers.

    @param connection: CUPS connection
    @type connection: CUPS.Connection object
    @returns: L{Printer} list
    )�getPrintersZ
getClassesrArrr1)r
Zprinters�classesr	Zprinterrrrr��s
r�c	Cs�i}|jd�}x<|D]4}|jd�dkr(q|jdd�\}}|j�||j�<qWd|krd|jd|d�d|kr||jd|d�d|kr�|jd	|d�xdD]}|j|d�q�W|d	dkr�g|d	<n|d	jd�|d	<|S)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
    �;rKrZMANUFACTURER�MFGZMODEL�MDLzCOMMAND SET�CMD�CLS�DES�SN�S�P�Jr)r<���)	r�r�r�r�r�r�r�r�r�)rL�findrm�
setdefault)rz�id_dict�piecesZpiecer	rHrrr�
parseDeviceID�s&



r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Devicez.
    This class represents a CUPS device.
    cKs�||_|jdd�|_|jdd�|_|jdd�|_|jdd�|_|jdd�|_|jd�}|d|_t	|�d	k|_
t|j�|_|j
d
�}|dkr�|jjdd�r�||dd
�|jd<d
S)z~
        @param uri: device URI
        @type uri: string
        @param kw: device attributes
        @type kw: dict
        zdevice-classr)zdevice-infozdevice-make-and-modelz	device-idzdevice-locationrKrrzserial=r��Nr�)rMr*Zdevice_classr,r.rzr-rLr$rrr�r�r�)rrMrZ
uri_piecesr�rrrrs


zDevice.__init__cCs
d|jS)Nz<cupshelpers.Device "%s">)rM)rrrrrszDevice.__repr__cCs�|dkrdS|j|jkr&|jr"dSdS|j}|dkrt|jjd�dkrJd}n*|jjd�dkr`d	}n|jjd
�dkrtd}|dkr�|jj�jd
�dkr�d}|j}|dkr�|jjd�dkr�d}n*|jjd�dkr�d	}n|jjd
�dkr�d}|dk�r|jj�jd
�dk�rd}|j�r�||k�r�|dk�r(dS|dk�r6dS|dk�rDdS|dk�rRdS|dk�r`dS|dk�rndS|dk�r|dS|dk�r�dS|dk�r�dS|dk�r�dS|dk�r�dS|dk�r�dS|dk�r�dS|dk�r�dS|d	k�r�dS|d	k�r�dS|dk�rdS|dk�rdS|dk�r$dS|dk�r2dS|dk�r@dS|dk�rNdS|dk�r\dS|dk�rjdS|dk�rxdS|dk�r�dSt|j�t|j�k}|�s�|j|jk}|S)z9
        Compare devices by order of preference.
        NTFZdnssdz._ipprZdnssdiz._pdl-datastreamZdnssdsz	._printerZdnssdlZusbZfaxZusbfax�serial�parallelZhpZhpfaxZippsZippZsocketZlpdr�r�r�r�r�r�r�r�)rr$rMr�rr#rzr,)r�other�stypeZotyperRrrr�__lt__!s�


























z
Device.__lt__N)r�r�r��__doc__rrr�rrrrr��sr�c@seZdZdd�Zdd�ZdS)�_GetDevicesCallcCsHd|kr*|jd�|_|j|d<|jf|�Sd|_|jf|�}|j||�S)NZ
reply_handler)r*�_client_reply_handler�_reply_handler�
getDevices)rr
�kwdsrRrrr�call�s
z_GetDevicesCall.callcCsbxD|j�D]8\}}t|f|�}|||<|jdkr
|jdkr
|j|_q
W|jrZ|j||�n|SdS)Nr))rAr�r,r.r�)rr
ZdevicesrM�data�devicerrrr��sz_GetDevicesCall._reply_handlerN)r�r�r�r�r�rrrrr��s
r�cKst�}|j||�S)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�r�)r
r�oprrrr��s	r�cCs.|j|�|j|�|j�dkr*|j|�dS)a
    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^raZ
getDefaultr�)r
r	rrr�activateNewPrinter�s

r�cs��fdd���fdd�}x�||�D]v}|jdkr2q"|j|j�}|r"|j|jkr"|j}xB|jD]8}|d|kr\|j|j|�tdt|j�t|�f�q\Wq"WdS)	z�
    Copy default options between PPDs.

    @param ppd1: source PPD
    @type ppd1: cups.PPD object
    @param ppd2: destination PPD
    @type ppd2: cups.PPD object
    cs0|jdd�}x|jD]}|j�|��qW|S)N)rZ	subgroupsrn)�groupr�g)�getPPDGroupOptionsrrr��sz*copyPPDOptions.<locals>.getPPDGroupOptionsc3s,x&|jD]}x�|�D]
}|VqWqWdS)N)ZoptionGroups)�ppdr��option)r�rr�iteratePPDOptions�sz)copyPPDOptions.<locals>.iteratePPDOptionsZ
PageRegion�choicezset %s = %sN)�keywordZ
findOptionZuiZ	defchoice�choices�
markOptionr�repr)Zppd1Zppd2r�r�Z
new_optionrHr�r)r�r�copyPPDOptions�s	
r�c	Cshd}ddddddg}x|D]}||krd}qWy|jd	|�td
|�Wntd|�YnXdS)
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
    ZA4�CZPOSIX�en�en_US�en_CA�fr_CAZLetterZPageSizezset PageSize = %sz*Failed to set PageSize (%s not available?)N)r�r)r��language�sizeZletterZeachrrr�setPPDPageSize�s
r�cs>d!dd�}g��fdd�}d}}|jd�}|�r`|jjdd	�}|jd
d�}|jdd
�}|jdd�}|jd�d"ks�|jd�d#kr�d	}|jd�}x�|D]�}|j�jd�}	x�|	D]�}
|
j�jd�}|d}||�}|s�||�q�tjj|�dkr�t	|�}d}
d}xT|
|k�rP||
}|j
|��rD|t	|�d�}||�}|�sB||�P|
d7}
�q�Wq�W|s�Pq�W|�sn|�r:tjdd�\}}tj
|�|j|�tj|dtj�tj|ddd�}d}x�|D]z}|j
|��r�|t	|�d�j�jd�}y|jd�\}}}Wn�w�YnX||tjd�}|�s�|tjd |��q�W�S)$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
    �
/usr/bin:/binc(Ss�|dkrdS|jd�}|d3kr*|d|�}t|�dkr:dS|ddkrttj|tj�rdtd|�|Std	|�dS|jd
�d4kr�dS|d5kr�dSxJ|jd�D]<}|jtjj	�tjj	|}tj|tj�r�td|�|Sq�Wtd2||f�dS)6N�-Zbuiltin�%rr�truerJz	%s: foundz
%s: NOT found�=rKrU�[�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�trapr$�ulimit�umask�unalias�unset�waitz%s: NOT found in %sr�r�)'rKrUr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r$r�r�r�r�r�)
r�rr�access�X_OKrrL�rstrip�path�sep)r	r��pZ	component�filerrr�	pathcheck�s<
z%missingExecutables.<locals>.pathcheckcs,|jd�}|dkr|d|�}�j|�dS)Nr�rr�)r�rt)�exer�)�exes_to_installrr�add_missings
z'missingExecutables.<locals>.add_missingNZFoomaticRIPCommandLinez&&
r)z&quot;�"z&lt;�<z&gt;�>�(r�&r��|r�rZgsz-sIjsServer=T)�textZrtzutf-8)�encodingz*cupsFilter:z/filter:/usr/lib64/cups/filterz/filter/)r�r�r�)ZfindAttrrHrZr�rLrmrr��basenamerr r��mkstemprZwriteFd�lseek�SEEK_SET�fdopenrZcupsserverbindir)r�r�r�r�Zexepath�attrZcmdlineZpipes�pipeZcmds�cmdrQZargnZargi�search�argZtmpfdZtmpfnamer�r�ZmimetypeZcostr)r�r�missingExecutables�sr
$	







rcCst|�}g|fS)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)r�Zexecutablesrrr�missingPackagesAndExecutablesps	rcCs0tj�}x"t|�j�D]}t|j|j�qWdS)N)rZ
Connectionr��values�printrMr�)�cr�rrr�_main|sr�__main__)r�pprintrr��re�stringrWr)rr�	functoolsrrr�r�r��objectr�r�r�r�r�rrrr�rrrr�<module>s.07