3
NZp                 @   s`   d dl Z d dlZd dlZd dlZddlT ddlmZmZmZ d Z	dZ
dZdZG dd deZdS )	    N   )*)tuiutilsdevice      c               @   s   e Zd ZdddZdddZdd	d
Zdd ZdddZdddZdde	j
e	jddfddZe	j
e	jdfddZd ddZdd ZdS )!ModuleNFc             C   s  || _ || _|| _|| _|| _tjd tj| g | _	|	| _
|
| _d | _d| _tjd t_tjdrptjd || _|d k	r|| _t| j| _ng | _d| _tjddd| _d| _g | _tjtjdd	d
r| jjt  |  jd7  _tjtjddd
r| jjt! |  jd7  _tjtjddd
rH| jjt" |  jd7  _t#| _$d| _%| jd k	rt&| jkrtj'r| jr|  j%d7  _%t#| jkr|  j%d7  _%t(| jkr|  j%d7  _%| jd k	rt#| jkrt#| _$nt(| jkrt(| _$| jd k	rtj'r| jr| jd	krLt!| jkrLt | jkrLt#| jkrLt#| _$d| _nt!| jkrp| jdkrpt!| jkst | jkr| jd	krt | jkst"| jkr| jdkrt"| jkrt&| _$n| jd	krdt | jkrdt!| jkrt!| jkrd| _t&| _$t"| jkr$t"| jkr$d| _t&| _$n>t#| jkr8t#| _$n*t(| jkrLt(| _$ntj)d| j   d| _n|| jdkrt!| jkrt | jkrt | jkrd	| _t&| _$n>t#| jkrt#| _$n*t(| jkrt(| _$ntj)d| j   d| _| j$| _*tj+ dkr| rtj,d|  d S )N   Fr   ZHPLIP_DEBUGdebugZ	configurez
ui-toolkitqt4qt30r   qt5nonez#%s cannot be run using Qt3 toolkit.Tz#%s cannot be run using Qt4 toolkit.z'%s should not be run as root/superuser.)-modtitleversiondoc
usage_dataosumasklogZ
set_moduleargsquiet
deprecated	lock_filehelp_only_supportsysargvpropproggetenv	set_levelavail_modessupported_ui_toolkitslennum_supported_ui_toolkitsZsys_confgetdefault_ui_toolkitnum_installed_ui_toolkitsinstalled_ui_toolkitsr   Zto_boolappendUI_TOOLKIT_QT3UI_TOOLKIT_QT4UI_TOOLKIT_QT5INTERACTIVE_MODEdefault_modenum_valid_modesGUI_MODE	gui_buildNON_INTERACTIVE_MODEerrormodegetuidwarn)selfr   r   r   r   r   r$   r%   Zrun_as_root_okr   r    r;   /usr/share/hplip/base/module.py__init__(   s    




$$$
zModule.__init__r   c             C   s   | j r| j dddfg| _ng | _d| jg}g }g }|t@ tkrl|jd |jtj |jtj |jtj | j	d k	r| j
dkr|jd |jtj |jtj | jdkrt| j	krtjr|jtj t| j	kr|jtj t| j	kr|jtj |jd |jtj |jtj | j	d k	rt| j	kr| jd k	r| jdkrtjr| jdkrt| jkr~t| jkr~|jtj t| jkrt| jkr|jtj t| jkrt| jkr|jtj |jtj  |jtj! |t"@ t"kr|jtj# |jtj$ |d k	r(x|D ]}|j| qW |t%@ r<|jd	 |d k	sL|r|jtj |jtj& x|D ]}	|j|	 qjW |d k	rx|D ]}	|j|	 qW |d k	r|jtj |jtj' x |D ]}
|j|
dd
df qW |j(ddj)|dddf x|D ]}| jj| qW d S )N nameTzUsage:z[DEVICE_URI|PRINTER_NAME]r   z[MODE]z	[OPTIONS]z[FILES]ZseealsoF summary)*r   r   r   USAGE_FLAG_DEVICE_ARGSr,   r   Z
USAGE_ARGSZUSAGE_DEVICEZUSAGE_PRINTERr$   r2   ZUSAGE_SPACEZ
USAGE_MODEr*   r3   r    r4   ZUSAGE_GUI_MODEr0   ZUSAGE_INTERACTIVE_MODEr5   ZUSAGE_NON_INTERACTIVE_MODEZUSAGE_OPTIONSr%   r'   r-   r+   ZUSAGE_USE_QT3r.   ZUSAGE_USE_QT4r/   ZUSAGE_USE_QT5ZUSAGE_LOGGING1ZUSAGE_LOGGING2USAGE_FLAG_SUPRESS_G_DEBUG_FLAGZUSAGE_LOGGING3Z
USAGE_HELPUSAGE_FLAG_FILE_ARGSZUSAGE_NOTESZUSAGE_SEEALSOinsertjoin)r:   Zinclude_flagsZextra_optionsZextra_notesZsee_also_listrA   ZcontentZnotesenscr;   r;   r<   setUsage   sx    
















zModule.setUsageTc             C   s$  d}|sdj |dg}dddddd	d
g}|rLdj |dg}|jddddg | jdkrt| jkrtjrdj |dg}|jddg t| jkrdj |dg}|jddg t| jkrdj |dg}|jdddg | j	d k	o| j
dkotjo| jd k	ot| jkrLt| j	kr&t| jkr&|jddg t| j	krLt| jkrL|jddg |d k	rddj ||g}|d k	rx|j| d }d }d }	d }
g }| j}tjr| j}nd }d }y"tjtjdd  ||\}| _W n0 tjk
r } z|jg}W Y d d }~X nX x|D ]\}}|dIkr"|}	q|dJkr4|}
q|dKkr^|j j }tj|sd}q|dLkrvtjd	 q|dMkr| jd k	rt| jkr| j	d k	rtjrt}n
|jd0 q|dNkr| jd k	rt| jkrt}d }q|dOkr| jd k	rt| jkrt}d }q|dPkr.d}q|d9kr@d:}q|d;krRd<}q|d=krdd>}q|dQkr| jd k	rt| jkr| j	d k	rt| j	krtjrt| jkrt}d}n|jdA| j  n|dRkr8| jd k	rt| jkr| j	d k	r&t| j	kr&tjr&t| jkr&t}d}n|jdD| j  nh|dSkr| jd k	rt| jkr| j	d k	rt| j	krtjrt| jkrt}dG}n|jdD| j  qW |rd}| jr|s|r| j|| ntjtj dH| j  d}n| j|| |d k	rtj!d || _"||	|
|||fS )TNzl:hr>   gzlogging=helpz	help-restzhelp-manz	help-descr   Zdbgzd:p:P:zdevice=zdevice-uri=zprinter=zprinter-namer   uZguiZuiiinteractivetextrH   Znoninteractiveznon-interactiveZbatchr   r   zuse-qt3r   zuse-qt4r   -d--device--device-uri-P-p	--printer--printer-name-l	--logging-g--debug--dbg-u--gui--uizUnable to enter GUI mode.-i--interactive--text-n--non-interactive--batch-h--helpz--help-restrestz
--help-manZmanz--help-descdesc--qt3	--use-qt3z2%s does not support Qt3. Unable to enter GUI mode.--qt4	--use-qt4z2%s does not support Qt4. Unable to enter GUI mode.--qt5	--use-qt5r   z
Please check usage '%s --help')rR   rS   rT   )rU   rV   rW   rX   )rY   rZ   )r[   r\   r]   )r^   r_   r`   )ra   rb   rc   )rd   re   rf   )rg   rh   )rk   rl   )rm   rn   )ro   rp   )#rF   extendr2   r3   r$   r    r4   r0   r5   r%   r'   r-   r+   r.   r1   r)   getoptr   r   r   ZGetoptErrormsglowerstripr   r#   r,   r   r/   r   usageinfoboldexitr7   )r:   Zextra_paramsZextra_long_paramsZhandle_device_printerZsupress_g_debug_flagZparamsZlong_paramsZopts
show_usage
device_uriprinter_name	error_msgr7   Z
ui_toolkitZlangrG   oaZ	log_levelr;   r;   r<   parseStdOpts  s    






"















zModule.parseStdOptsc             C   sT   t j }d|_x8ttj D ](\}}|j|d dj|dd  f qW |j  d S )NLanguage CodeAlternate Name(s)r   z, r   )r   r   )	r   Z	FormatterheaderlistZsupported_localesitemsaddrF   output)r:   flocZllr;   r;   r<   showLanguages  s
    $zModule.showLanguagesrQ   c             C   s   |d kr| j s| j  d S |dkr2| j  tj  |dkrFt| j n\tj| j|| j	| j
| j |rx|D ]}tj| qjW tjd tjd |dkrtjd d S )NrQ   rj   r   r   )r   	showTitler   rw   printr   r   Zformat_textr   r   r   r   r6   r   ry   )r:   rz   r}   rG   r;   r;   r<   rv     s"    


zModule.usagec             C   s   | j stjd |r,tjtjdtj  ntjtjd tjtjd| j| jf  tjd tjd tjd tjd tjd tjd | jrtjtjd	| j  tjd d S )
Nr>   z.HP Linux Imaging and Printing System (ver. %s)z$HP Linux Imaging and Printing Systemz
%s ver. %sz0Copyright (c) 2001-15 HP Development Company, LPz0This software comes with ABSOLUTELY NO WARRANTY.z;This is free software, and you are welcome to distribute itz<under certain conditions. See COPYING file for more details.zZ%s support is deprecated. Feature can be used as is. Fixes or updates will not be provided)	r   r   rw   rx   r    r   r   r   r9   )r:   Zshow_verr;   r;   r<   r     s    






zModule.showTitlec             C   s  t jd|||||f  t jd| j  d}d|kr8d}d}d}	d}
|dkrztj||}t j| | rz|rzt jd dS |dk	r||krd}n|rt jd|  dS d}|dk	rft j| x|D ]x}t j| tj|\	}}}}}}}}}t jd	|||||||||f	  || }|j d
d |D krd}	| }}d}qW |	dk	rft jd|  d}|rfdS |dk	r|dkr|r|}
n|dk	r|dk	r|r|	r||kr|}
nt jd||f  d\}}nF|dkr|dk	r|	rtj||}
nt	|dkrt
|j d }
|
dkrVt	|rV| jtkrFtj||}
nt
|j d }
|
dk	rptjdd|
 n$| jttfkrt jd tjd |
S )aD   Validate passed in parameters, and, if in text mode, have user select desired device to use.
            Used for tools that are device-centric and accept -d (and maybe also -p).
            Use the filter(s) to restrict what constitute valid devices.

            Return the matching device URI based on:
            1. Passed in device_uri if it is valid (filter passes)
            2. Corresponding device_uri from the printer_name if it is valid (filter passes) ('*' means default printer)
            3. User input from menu (based on bus and filter)

            device_uri and printer_name can both be specified if they correspond to the same device.

            Returns:
                device_uri|None
                (returns None if passed in device_uri is invalid or printer_name doesn't correspond to device_uri)
        z"getDeviceUri(%s, %s, %s, %s, , %s)zMode=%sFZhpaioTNz*No device found that support this feature.z@'%s' device doesn't support this feature (or) Invalid device URIzXback_end=%s, is_hp=%s, bb=%s, model=%s, serial=%s, dev_file=%s, host=%s, zc=%s, port= %sc             S   s   g | ]}|j  qS r;   )rt   ).0mr;   r;   r<   
<listcomp>$  s    z'Module.getDeviceUri.<locals>.<listcomp>zB'%s' device doesn't support this feature (or) Invalid printer namez=Printer name %s and device URI %s refer to different devices.r   r   	last_usedr{   zANo device selected/specified or that supports this functionality.)NN)r   r   r7   r   getSupportedCUPSDevicesr6   ZparseDeviceURIrt   getDeviceURIByPrinterNamer&   r   keysr0   r   Zdevice_table	user_confsetr5   r   ry   )r:   r{   r|   back_end_filterfilterdevicesrestrict_to_installed_devicesZscan_uri_flagdevice_uri_okprinter_name_okdevice_uri_retZuriZback_endZis_hpZbbZmodelserialZdev_filehostZzcZportZcups_printerZprinter_name_device_urir;   r;   r<   getDeviceUri  sx    






 





zModule.getDeviceUric             C   s  t jd||||f  t jd| j  d}d}d}d}	tj||}
t j|
 |
s^t jd dS |dk	rtj||}||krd}|}	nt jd|  d}|rdS |dk	r&|dkrd	d
lm} |j	 }|dk	r|}nt jd d}nD|j
 dd |
D kr
d}tj|}	nt jd|  d}|r&dS |dk	r`|dkr`|r`t|| dkr|| d	 }nr|dk	r|dk	r|r|r||	kr|}n
t jd n6|dkr|dk	r|r|}nt|
dkr|
d	 }|dkr | jttfkr t|
r tj|
}|dk	r|	dkrtj|}	|	dk	r6tjdd|	 |dk	rPtjdd| n0| jttfkrvt jd tjd n
t jd d||	fS )a   Validate passed in parameters, and, if in text mode, have user select desired printer to use.
            Used for tools that are printer queue-centric and accept -p (and maybe also -d).
            Use the filter(s) to restrict what constitute valid printers.

            Return the matching printer_name based on:
            1. Passed in printer_name if it is valid (filter passes) ('*' means default printer)
            2. From single printer_name of corresponding passed in device_uri (filter passes)
            3. User input from menu (CUPS printer list, filtered) [or if > 1 queue for device_uri]

            device_uri and printer_name can both be specified if they correspond to the same device.

            Returns:
                (printer_name|None, device_uri|None) (tuple)
                (returns None if passed in printer_name is invalid or device_uri doesn't correspond to printer_name)
        zgetPrinterName(%s, %s, %s, %s)zMode=%sFNz*No device found that support this feature.Tz@'%s' device doesn't support this feature (or) Invalid device URIr   r   )cupszCUPS default printer not setc             S   s   g | ]}|j  qS r;   )rt   )r   pr;   r;   r<   r     s    z)Module.getPrinterName.<locals>.<listcomp>zB'%s' device doesn't support this feature (or) Invalid printer namer   z7Printer name and device URI refer to different devices.r   r{   r|   zBNo printer selected/specified or that supports this functionality.zNo printer selected/specified)FNN)FNN)FNN)r   r   r7   r   ZgetSupportedCUPSPrinterNamesr6   r   Zprntr   ZgetDefaultPrinterrt   r   r&   r0   r5   r   Zprinter_tabler   r   r   ry   )r:   r|   r{   r   r   r   r   r   Zprinter_name_retr   Zprintersr   r   Zdefault_printerr;   r;   r<   getPrinterNameT  sx    




$





zModule.getPrinterNamer>   c             C   sJ   |r$t jdj| j|g|\}| _nt j| j|\}| _|sFtjd d S )N-r   )r   Zlock_apprF   r   r   r   ry   )r:   suffixZsuppress_errorokr;   r;   r<   lockInstance  s
     zModule.lockInstancec             C   s   | j d k	rtj| j  d S )N)r   r   Zunlock)r:   r;   r;   r<   unlockInstance  s    
zModule.unlockInstance)NNNFFF)r   NNN)NNTF)rQ   N)T)r>   F)__name__
__module____qualname__r=   rK   r   r   rv   r   r   ZDEFAULT_BE_FILTERZDEFAULT_FILTERr   r   r   r   r;   r;   r;   r<   r	   '   s&     
| 
_   
 (	

hf

r	   )r   rerr   r   rL   r>   r   r   r   ZUSAGE_FLAG_NONErB   rC   rD   objectr	   r;   r;   r;   r<   <module>   s   