3
NZ-             6   @   s  d dl Z d dlZd dlmZmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZddlT d dlZddlmZmZmZmZ ddlmZmZmZmZmZm Z mZ ddl!m"Z" yd dl#j$j%Z%dZ&W n e'k
r   d	Z&Y nX yd dl(Z(dZ)W n e'k
rB   d	Z)Y nX y$d dl*Z*d d
l*m+Z+m,Z,m-Z- dZ.W n e'k
r   d	Z.Y nX yd dl/Z/dd Z0W n& e'k
r   d dl1Z1dd Z0Y nX ddlT ddl2T ddl!m3Z3 d Z4dZ5dZ6dZ7dZ8dZ9dZ:dZ;d Z<dZ=dZ>dZ?e j@d  ZAe j@d ZBe3jCe3jDdddddddddd d!d"gZEg ZFxLeED ]DZGyejHeGejIZJW n  eKk
r   eFjLeG Y nX eFjLeJ qNW d#d$ ZMd%d& ZNd'd( ZOd)d)d*ZPed+ed+ed+dfd,d-ZQd.d/ ZRd*d1d2ZSd+d3d4ZTd,d6d7ZUd8d9 ZVG d:d; d;ZWG d<d= d=ZXG d>d? d?ZYG d@dA dAeYZZG dBdC dCZ[G dDdE dEZ\dFdG Z]dHdI Z^d-dJdKZ_y
ej`ZaW n" ebk
r   d.dLdMZaY nX d/dNdOZcG dPdQ dQedZedRdS ZfdTdU ZgdVdW ZhdXdY ZidZd[ Zjyd d\lmkZk W nB e'k
rB   G d]d^ d^ZlG d_d` d`emZnG dadb dbZkY nX dcdd ZoertepjqdedeZrerjserejtjudfZvnejqd+d+ZrerjserejtZvdgdh Ztdidj fdkdlZwdmdj fdndoZxdpdqdrdsdtgZydud+d+dvd+dwZzdxdy Z{d0dzd{Z|d|d} Z}d1d~dZ~d2ddZG dd dZG dd dZG dd dZdd Ze jdk rtd3ddZd4ddZdd Zd5ddZnejZejZejZdd Zdd Zdd Zd6ddZdd Zdd Zd7ddZdd Zdd ZG dd dedZdd Zd8Zd9Zd:Zd;Zd<Zd=Zd>Zd?Zd@ZdAZdBZdCZdDZdEZdFZdGZdHZdIZdJZdKZdLZdMZdNZdOZejdddӃdkrdPZdQZdRZnNejdddڃdkrΐdSZdTZdUZn&ejddd݃dkrdVZdWZdXZdd ZdYddZdZddZd[ddZdd Zdd Zdd Zdd Zdd Zdd ZdefddZd\ddZG dd dZd]ddZdd Zdd  ZĐdd ZŐdd ZƐdd Zǐdd ZȐd	d
 Ze:e;fddZʐd^ddZːdd Z̐d_ddZ͐dd Zΐd`ddZϐdd ZАdd Zѐdd ZҐdd ZӐdd  ZԐd!d" ZՐd#d$ Z֐d%d& Zאd'd( ZdS (a      N)PopenPIPE   )*)html_entitiesurllib2_requesturllib2_parseurllib2_error)PY3
to_unicodeto_bytes_utf8to_string_utf8BytesIOStringIO
subprocess)os_utilsTF)	SystemBuslowlevel
SessionBusc             C   s   t j| j S )N)hashlibZsha1	hexdigest)s r   /usr/share/hplip/base/utils.pyget_checksumG   s    r   c             C   s   t j| j S )N)shanewr   )r   r   r   r   r   M   s    )pexpectzrm -rfzrm -fzcom.hplip.StatusServicez/http://hplipopensource.com/hplip-web/index.htmlzhttp://www.hp.comz
www.hp.com      z	Continue?zpasswor[dt]:Zkennwortzpassword forzmot de passeu   contraseñazpalavra passeu   口令Z
wachtwoordZheslou   密码u	   Lösenordc              C   s   g } yt d}W n\ tk
rl   y2dtjtjdjjkrPtjtjdjjgS W n tk
rf   | S X Y nX y&t	j
d|j d jddjd} W n tk
r   | S X d| kr| jd |j  | S )Nz/etc/cups/cupsd.confrootzSystemGroup [\w* ]*r   zSystemGroup   )openIOErrorgrpZgetgrgidosstatst_gidZgr_nameOSErrorrefindallreadreplacesplit
IndexErrorremoveclose)lisfpr   r   r   get_cups_systemgroup_list   s"    &
r4   c             C   sZ   t jd| j  ytj| j tjtjB  dS  tt	fk
rT   t jd| j  dS X d S )NzLocking: %sTzFailed to unlock %s.F)
logdebugnamefcntlflockfilenoLOCK_EXZLOCK_NBr$   r)   )fr   r   r   lock   s    r=   c             C   sX   | d k	rTt jd| j  y"tj| j tj tj| j W n t	t
fk
rR   Y nX d S )NzUnlocking: %s)r5   r6   r7   r8   r9   r:   LOCK_UNr&   r0   r$   r)   )r<   r   r   r   unlock   s    r?   c             C   s   t j}tj dkrd}ntjj|s.tj| tjj|dj| dg}yt|d}W n& t	k
rz   |svt
jd|  d
S X t|s|st
jd|| f  dS d	|fS )Nr   z/var.r=   wzUnable to open %s lock file.Fz)Unable to lock %s. Is %s already running?T)FN)FN)propZuser_dirr&   geteuidpathexistsmakedirsjoinr#   r$   r5   errorr=   )ZapplicationZsuppress_errordirZ	lock_fileZlock_file_fr   r   r   lock_app   s"    
rJ   r!   c                st   t |dkr|t |  }tr"t}nt}|jtdtd}|j| ||d k	rb|j||j|   fdd}|S )Nr   r!   c                s   | j  S )N)	translate)r   )deletetransr   r   callable   s    zTranslator.<locals>.callable)lenr
   bytesstring	maketransr   rK   )ZfrmZtorL   ZkeepZ
data_typesZallcharsrN   r   )rL   rM   r   
Translator   s    rS   c             C   sb   t | dkrdS t | dkr0td| d  d S t | dkr^ddj|  d t| j  d S d S )Nr   r!   r   "z", "z" and ")rO   strrG   pop)r2   r   r   r   list_to_string   s    rW   0c             C   sB   t | tr>| r>| d j dkr&tdS | d j d	kr>tdS |S )
zD Convert an arbitrary 0/1/T/F/Y/N string to a normalized string 0/1.r   1tyrX   r<   n)rY   rZ   r[   )rX   r<   r\   )
isinstancerU   lowerr   )r   defaultr   r   r   to_bool_str   s    r`   c             C   sJ   t | tr8| r8| d j d
kr"dS | d j dkrFd	S nt | trF| S |S )zG Convert an arbitrary 0/1/T/F/Y/N string to a boolean True/False value.r   rY   rZ   r[   TrX   r<   r\   F)rY   rZ   r[   )rX   r<   r\   )r]   rU   r^   bool)r   r_   r   r   r   to_bool   s    
rb   r   c             c   s  |d kr| }yt j| }W n t jk
r4   tY nX |p<d}|jd}x|D ]}t jjt jj| |}	xd|D ]\}
tj||
rn|st jj	|	 rn|r|	V  qnyt jj
|	V  W qn tk
r   |	V  Y qnX qnW |ot jj	|	rNx t|	|||||D ]
}|V  qW qNW d S )Nr   ;)r&   listdirrH   StopIterationr.   rD   normpathrG   fnmatchisdirbasename
ValueError	walkFiles)r    recurse	abs_pathsreturn_folderspatternrD   namesZpat_listr7   fullnamepatr<   r   r   r   rk     s,    



rk   c             C   sp   t jj| rlt j| }|tj d@ }|d@ r0dS |tj t j krN|d@ rNdS |tj t j krl|d@ rldS dS )Ni  r   T      F)	r&   rD   rE   r'   ST_MODEST_GIDgetgidST_UIDgetuid)rD   r   moder   r   r   is_path_writable&  s    
r{   c               @   s*   e Zd ZdZdZdZdd Zd
ddZd	S )TextFormatterr   r   r   c             C   s*   g | _ x|D ]}| j jtf | qW d S )N)columnsappendColumn)selfZcolspeclistZcolspecr   r   r   __init__>  s    
zTextFormatter.__init__Fc             C   s   d}t |}t|t| jkr,tjd d S x<t tdd || jD ]"\}}|j| t|t|j}qDW dg| }x6t	|D ]*}x$| jD ]}|| |j
| ||< qW q~W |rdj|d S dj|S d S )Nr   z6Formatter: Number of text items does not match columnsc              W   s   | S )Nr   )xr   r   r   <lambda>I  s    z'TextFormatter.compose.<locals>.<lambda>r!   
)listrO   r}   r5   rH   mapwrapmaxlinesrangegetlinerG   )r   ZtextlistZadd_newlineZnumlinestextcolumnZ	complineslnr   r   r   composeC  s    
 

zTextFormatter.composeN)F)__name__
__module____qualname__LEFTCENTERRIGHTr   r   r   r   r   r   r|   8  s
   r|   c               @   s6   e Zd ZdejdfddZdd Zdd Zd	d
 ZdS )r   N   r   c             C   s    t || _|| _|| _g | _d S )N)intwidth	alignmentmarginr   )r   r   r   r   r   r   r   r   W  s    
zColumn.__init__c             C   s@   | j tjkr|j| jS | j tjkr0|j| jS |j| jS d S )N)r   r|   r   centerr   r   rjustljust)r   liner   r   r   align]  s
    zColumn.alignc             C   s   g | _ g }x^|j D ]R}|t| jkr2|j| qx2tdt|| jD ]}|j|||| j   qFW qW t|svd S |jd}xN|D ]F}dt| }t|| | jkr| j j| j| |}q|d | }qW | j j| j| d S )Nr   r   r"   )	r   r.   rU   r   r~   r   rO   rV   r   )r   r   ZwordsZwordiZcurrentZ	incrementr   r   r   r   e  s"      

zColumn.wrapc             C   s6   |t | jk r"d| j | j|  S d| j| j  S d S )Nr"   )rO   r   r   r   )r   indexr   r   r   r   y  s    zColumn.getlineN)	r   r   r   r|   r   r   r   r   r   r   r   r   r   r   U  s   r   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Stackc             C   s
   g | _ d S )N)stack)r   r   r   r   r     s    zStack.__init__c             C   s
   | j j S )N)r   rV   )r   r   r   r   rV     s    z	Stack.popc             C   s   | j j| d S )N)r   r~   )r   valuer   r   r   push  s    z
Stack.pushc             C   s   | j S )N)r   )r   r   r   r   as_list  s    zStack.as_listc             C   s
   g | _ d S )N)r   )r   r   r   r   clear  s    zStack.clearc             C   s
   t | jS )N)rO   r   )r   r   r   r   __len__  s    zStack.__len__N)	r   r   r   r   rV   r   r   r   r   r   r   r   r   r     s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )Queuec             C   s   t j|  d S )N)r   r   )r   r   r   r   r     s    zQueue.__init__c             C   s   | j jdS )Nr   )r   rV   )r   r   r   r   get  s    z	Queue.getc             C   s   t j| | d S )N)r   r   )r   r   r   r   r   put  s    z	Queue.putN)r   r   r   r   r   r   r   r   r   r   r     s   r   c               @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )
RingBuffer2   c             C   s   || _ g | _d S )N)r   data)r   Zsize_maxr   r   r   r     s    zRingBuffer.__init__c             C   s,   | j j| t| j | jkr(d| _t| _dS )z*append an element at the end of the bufferr   N)r   r~   rO   r   curRingBufferFull	__class__)r   r   r   r   r   r~     s    zRingBuffer.appendc             C   s   || j d< dS )z.replace the last element instead off appendingr   N)r   )r   r   r   r   r   r-     s    zRingBuffer.replacec             C   s   | j S )z8 return a list of elements from the oldest to the newest)r   )r   r   r   r   r     s    zRingBuffer.getN)r   )r   r   r   r   r~   r-   r   r   r   r   r   r     s   
r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c             C   s   d S )Nr   )r   r\   r   r   r   r     s    zRingBufferFull.__init__c             C   s"   || j | j< | jd | j | _d S )Nr   )r   r   r   )r   r   r   r   r   r~     s    zRingBufferFull.appendc             C   s4   | j d | j | _ || j| j < | j d | j | _ d S )Nr   )r   r   r   )r   r   r   r   r   r-     s    zRingBufferFull.replacec             C   s    | j | jd  | j d | j  S )N)r   r   )r   r   r   r   r     s    zRingBufferFull.getN)r   r   r   r   r~   r-   r   r   r   r   r   r     s   r   c                s>   t | j }dd |D   j   fddtdt D S )z9 Returns the keys of dictionary d sorted by their values c             S   s   g | ]}|d  |d gqS )r   r   r   ).0vr   r   r   
<listcomp>  s    z&sort_dict_by_value.<locals>.<listcomp>c                s   g | ]} | d  qS )r   r   )r   r   )	backitemsr   r   r     s    r   )r   itemssortr   rO   )dr   r   )r   r   sort_dict_by_value  s    r   c             C   s   t jd| ddS )Nz%sT)Zgrouping)localeformat)valr   r   r   commafy  s    r   c             C   s8  | dk rdj t| dgS d|   k o,dk n  r|r^dj tt| d dtdt| dgS dj tt| d dtd	gS nd|   k od
k n  r|rdj tt| d dtdt| dgS dj tt| d dtdgS nN|rdj tt| d dtdt| dgS dj tt| d dtdgS d S )Ni   r!   z Bi   g      @r   z KB ()z KBi   @g      0Az MB (z MBg      Az GB (z GB)rG   r   r   round)r   Z
show_bytesr   r   r   format_bytes  s    ("("(r   c             C   s6   t j| }tj|tjtjB tjB d}tj|d|fS )Ni  zw+b)tempfileZmktempr&   r#   O_RDWRO_CREATO_EXCLfdopen)suffixprefixrI   r   rD   fdr   r   r   make_temp_file  s    
r   c             C   s   g }t jd}|r|jd}|jd |jd |jd |jd |jd d}x@|D ]8}yt j|}W n tk
r   wXY qXX | |krX|}P qXW |r|rt jj|| S dS n|S d S )	NPATH:z/usr/binz/usr/local/binz/sbinz	/usr/sbinz/usr/local/sbinr!   )r&   getenvr.   r~   rd   r)   rD   rG   )Zcommandreturn_full_pathrD   Zpath_valZ
found_pathpfilesr   r   r   which  s.    







r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )UserSettingsc             C   s   | j   d S )N)load)r   r   r   r   r     s    zUserSettings.__init__c             C   sl  d| _ td}t|dkr"d| _ nRtd}t|dkr>d| _ n6td}t|dkrZd| _ ntd	}t|dkrtd
| _ d| _td}t|dkrd| _nRtd}t|dkrd| _n6td}t|dkrd| _ntd}t|dkrd| _td}t|rd| _nd| _td}t|r"d| _nd| _td}t|rBd| _nd| _td}t|rbd| _nd| _d S )Nr!   zhp-printr   zhp-print -p%PRINTER%Zkprinterz"kprinter -P%PRINTER% --system cupsZgtklpzgtklp -P%PRINTER%Zxppzxpp -P%PRINTER%zsimple-scanzsimple-scan %SANE_URI%Zxsanezxsane -V %SANE_URI%ZkookaZ
xscanimagez	hp-unloadzhp-unload -d %DEVICE_URI%z'python %HOME%/unload.py -d %DEVICE_URI%zhp-makecopieszhp-makecopies -d %DEVICE_URI%z+python %HOME%/makecopies.py -d %DEVICE_URI%z
hp-sendfaxzhp-sendfax -d %FAX_URI%z%python %HOME%/sendfax.py -d %FAX_URI%zhp-fabzpython %HOME%/fab.py)	cmd_printr   rO   cmd_scan	cmd_pcardcmd_copycmd_faxcmd_fab)r   rD   r   r   r   loadDefaults!  sT    



zUserSettings.loadDefaultsc             C   sV  | j   tjd ttjddd| _yttjddd| _W n t	k
rX   d| _Y nX yttjddd| _
W n t	k
r   d	| _
Y nX tjd
d| j| _tjd
d| j| _tjd
d| j| _tjd
d| j| _tjd
d| j| _tjd
d| j| _ttjddd| _ttjddd| _ttjddd| _ttjddd| _| j  d S )NzLoading user settings...refreshenablerX   rateZ30   typer   commandsprntscanpcardcpyfaxZfabupgradenotify_upgradelast_upgraded_timepending_upgrade_timelatest_available_versionr!   )r   r5   r6   rb   	user_confr   auto_refreshr   auto_refresh_raterj   auto_refresh_typer   r   r   r   r   r   upgrade_notifyupgrade_last_update_timeupgrade_pending_update_timerU   r   )r   r   r   r   r   g  s,    
zUserSettings.loadc             C   s   t jd| j  t jd| j  t jd| j  t jd| j  t jd| j  t jd| j  t jd| j  t jd| j	  t jd	| j
  t jd
| j  t jd| j  t jd| j  d S )NzPrint command: %szPCard command: %szFax command: %szFAB command: %szCopy command: %s zScan command: %szAuto refresh: %szAuto refresh rate: %szAuto refresh type: %szUpgrade notification:%dzLast Installed time:%dz#Next scheduled installation time:%d)r5   r6   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r6     s    zUserSettings.debugc             C   s   t jd tjdd| j tjdd| j tjdd| j tjdd| j tjdd| j tjdd	| j	 tjdd
| j
 tjdd| j tjdd| j tjdd| j tjdd| j tjdd| j | j  d S )NzSaving user settings...r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r5   r6   r   setr   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   save  s    
zUserSettings.saveN)r   r   r   r   r   r   r6   r   r   r   r   r   r     s
   Fr   c              C   sf   yBdd l } | j }| j|| j| jB | j| jd}|j  |j  W n t	k
r`   t
jd Y nX d S )Nr   z`PyQt not installed. GUI not available. Please check that the PyQt package is installed. Exiting.)gtkZWindowZMessageDialogZDIALOG_MODALZDIALOG_DESTROY_WITH_PARENTZMESSAGE_WARNINGZ
BUTTONS_OKrunZdestroyImportErrorr5   rH   )r   rA   Zdialogr   r   r   no_qt_message_gtk  s    r   c               C   sD   t jstjd dS tjds,tjd dS t s@tjd dS dS )NzGUI mode disabled in build.FDISPLAYzNo display found.z Qt/PyQt 3 initialization failed.T)rB   	gui_buildr5   warnr&   r   checkPyQtImportr   r   r   r   canEnterGUIMode  s    



r   c              C   sf   t jstjd dS tjds,tjd dS y
t  W n* tk
r` }  ztj|  dS d } ~ X nX dS )NzGUI mode disabled in build.Fr   zNo display found.T)rB   r   r5   r   r&   r   checkPyQtImport45r   )er   r   r   canEnterGUIMode4  s    




r   c              C   sz  ydd l } dd l}W n8 tk
rL   tjdr>tjdr>t  tjd dS X t| j	 j
dd }|tk rztjd dS y
| j}W n tk
r   | j}Y nX x|jddk r|d	7 }qW |j
d\}}}|jd
dkrtjd nyt|}t|}t|}W n  tk
r"   d\}}}Y nX |tk sB|tkrv|tk rvtjd|||f  tjdttf  tjd dS dS )Nr   r   ZSTARTED_FROM_MENUz/PyQt not installed. GUI not available. Exiting.Fr@   zBIncorrect version of Qt installed. Ver. 3.0.0 or greater required.r   z.0Zsnapshotz3A non-stable snapshot version of PyQt is installed.z]This program may not function properly with the version of PyQt that is installed (%d.%d.%d).zDIncorrect version of pyQt installed. Ver. %d.%d or greater required.zUThis program will continue, but you may experience errors, crashes or other problems.T)r   r   r   )qtuir   r&   r   r   r5   rH   r   ZqVersionr.   ZMINIMUM_QT_MAJOR_VERZPYQT_VERSION_STRAttributeErrorZPYQT_VERSIONcountfindZwarningrj   ZMINIMUM_PYQT_MAJOR_VERZMINIMUM_PYQT_MINOR_VER)r   r  ZqtMajorZpyqtVersionZmaj_verZmin_verZpat_verr   r   r   r     sD    




r   c              C   sL   ydd l } dd l}W n$ tk
r8   dd l}dd l}Y nX tjd dS dS )Nr   zgHPLIP is not installed properly or is installed without graphical support. Please reinstall HPLIP againFT)PyQt4ui4r   PyQt5ui5r5   r6   )r  r  r  r  r   r   r   checkPyQtImport4  s    
r	  )Templatec               @   s    e Zd ZdZdd Zdd ZdS )	_multimapzHelper class for combining multiple mappings.

        Used by .{safe_,}substitute() to combine the mapping and keyword
        arguments.
        c             C   s   || _ || _d S )N)_primary
_secondary)r   ZprimaryZ	secondaryr   r   r   r   /  s    z_multimap.__init__c             C   s*   y
| j | S  tk
r$   | j| S X d S )N)r  KeyErrorr  )r   keyr   r   r   __getitem__3  s    
z_multimap.__getitem__N)r   r   r   __doc__r   r  r   r   r   r   r  )  s   r  c                   s    e Zd ZdZ fddZ  ZS )_TemplateMetaclassaK  
        %(delim)s(?:
          (?P<escaped>%(delim)s) |   # Escape sequence of two delimiters
          (?P<named>%(id)s)      |   # delimiter and a Python identifier
          {(?P<braced>%(id)s)}   |   # delimiter and a braced identifier
          (?P<invalid>)              # Other ill-formed delimiter exprs
        )
        c                sX   t t| j||| d|kr$| j}ntjtj| j| jd }tj|tj	tj
B | _d S )Nro   )Zdelimid)superr  r   ro   r*   escape	delimiter	idpatterncompile
IGNORECASEVERBOSE)clsr7   basesZdctro   )r   r   r   r   D  s    
z_TemplateMetaclass.__init__)r   r   r   ro   r   __classcell__r   r   )r   r   r  :  s   r  c               @   s<   e Zd ZdZeZdZdZdd Zdd Z	dd	 Z
d
d ZdS )r
  z.A string class for supporting $-substitutions.$z[_a-z][_a-z0-9]*c             C   s
   || _ d S )N)template)r   r  r   r   r   r   Z  s    zTemplate.__init__c             C   sb   |j d}| jd | jd}|s,d}d}n"|tdj|d d  }t|}td||f d S )NinvalidTr   r!   z.Invalid placeholder in string: line %d, col %dr   )startr  
splitlinesrO   rG   rj   )r   mor   r   colnolinenor   r   r   _invalid^  s    
zTemplate._invalidc                sX   t |dkrtd|s| n|r2t||d  n|d   fdd}jj|jS )Nr   zToo many positional argumentsr   c                sh   | j dp| j d}|d k	r, | }d| S | j dd k	r@jS | j dd k	rXj|  tdjd S )Nnamedbracedz%sescapedr   z#Unrecognized named group in pattern)groupr  r&  rj   ro   )r#  r'  r   )mappingr   r   r   convertt  s    
z$Template.substitute.<locals>.convert)rO   	TypeErrorr  ro   subr  )r   argskwsr,  r   )r+  r   r   
substitutej  s    zTemplate.substitutec                sX   t |dkrtd|s| n|r2t||d  n|d   fdd}jj|jS )Nr   zToo many positional argumentsr   c                s   | j d}|d k	r:yd |  S  tk
r8   j| S X | j d}|d k	r|yd |  S  tk
rz   jd | d S X | j dd k	rjS | j dd k	rjS tdjd S )	Nr'  z%sr(  {}r)  r   z#Unrecognized named group in pattern)r*  r  r  rj   ro   )r#  r'  r(  )r+  r   r   r   r,    s$    

z)Template.safe_substitute.<locals>.convert)rO   r-  r  ro   r.  r  )r   r/  r0  r,  r   )r+  r   r   safe_substitute  s    zTemplate.safe_substituteN)r   r   r   r  r  Z__metaclass__r  r  r   r&  r1  r4  r   r   r   r   r
  S  s   r
  c             C   sV   t jdjj }d|kr|d= t jdjj }d|kr<|d= t| jt jdjf|S )Nr   r   )sys	_getframe	f_globalscopyf_localsr
  r1  )r   globalslocalsr   r   r   cat  s    r<      zutf-8c             C   s   | j ttS )N)rK   identityunprintable)r   r   r   r   	printable  s    r@  c             C   s   | S )Nr   )r   r   r   r   r     s    r   c             C   s   x| D ]}||rdS qW dS )NTFr   )Sr<   r   r   r   r   any  s    
 rB  c             C   s   | S )Nr   )r   r   r   r   r     s    c             C   s   x| D ]}||sdS qW dS )NFTr   )rA  r<   r   r   r   r   all  s    
 rC  firefoxmozilla	konquerorepiphany	skipstonez-new-tabz	--new-tab)rD  rE  rF  rG  rH  c              C   sB   t rtj dkrdS tdr dS xtD ]} t| r&| S q&W d S d S )NDarwinr#   zxdg-open)platform_availplatformsystemr   BROWSERS)br   r   r   find_browser  s    
rO  c             C   s   t r$tj dkr$d|  }tj| nxtdr@d|  }tj| n\xZtD ]D}t|dd}|rF|rrd|t| | f }nd|| f }tj| P qFW tj	d	|   d S )
NrI  z	open "%s"zxdg-openzxdg-open "%s"True)r   z%s %s "%s" &z	%s "%s" &zUnable to open URL: %s)
rJ  rK  rL  r   Zexecuter   rM  BROWSER_OPTSr5   r   )urlZuse_browser_optscmdrN  Zbbr   r   r   openURL  s    

rT  c                s   g   fdd| D   S )Nc                s    g | ]} j |s j|qS r   )r  r~   )r   r   )tempr   r   r     s    zuniqueList.<locals>.<listcomp>r   )inputr   )rU  r   
uniqueList  s    rW  c                sn    d krfdd}n fdd}x@t dtD ].}||r8| |d   |d < |< q8W d S )Nc                s    |  kS )Nr   )r   )lmr   r   r     s    zlist_move_up.<locals>.<lambda>c                s    |  S )Nr   )r   )cmprX  rY  r   r   r     s    r   )r   rO   )rX  rY  rZ  r<   r   r   )rZ  rX  rY  r   list_move_up  s    r[  c                st    d krfdd}n fdd}xFt td ddD ].}||r>|d  |  |< |d < q>W d S )Nc                s    |  kS )Nr   )r   )rX  rY  r   r   r     s    z list_move_down.<locals>.<lambda>c                s    |  S )Nr   )r   )rZ  rX  rY  r   r   r     s    r   r   r   r   )r   rO   )rX  rY  rZ  r<   r   r   )rZ  rX  rY  r   list_move_down  s    r\  c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )XMLToDictParserc             C   s   g | _ i | _d| _d S )Nr!   )r   r   
last_start)r   r   r   r   r     s    zXMLToDictParser.__init__c             C   sh   | j jt|j  t|j | _t|rdx8|D ]0}| j jt|j  | j||  | j j  q0W d S )N)r   r~   r   r^   r^  rO   addDatarV   )r   r7   Zattrsar   r   r   startElement  s    
zXMLToDictParser.startElementc             C   s&   |j  | jkr| jd | jj  d S )Nr!   )r^   r^  r_  r   rV   )r   r7   r   r   r   
endElement   s    
zXMLToDictParser.endElementc             C   s$   t |j }|r | jr | j| d S )N)r   stripr   r_  )r   r   r   r   r   charData'  s    
zXMLToDictParser.charDatac          "   C   s*  d| _ yt|}W n tk
r.   t|}Y nX dj| j}dj|dg}y| j|  W n tk
r   y| j|  W n tk
r   || j|< Y n`X d}xXy| jdj|t|g  W n. tk
r   || jdj|t|g< P Y nX |d7 }qW Y n.X | j| | j|< || jdj|dg< | j|= d S )Nr!   -rX   r   r   rY   )r^  r   rj   r   rG   r   r   r  )r   r   Z	stack_strZstack_str_0jr   r   r   r_  -  s2    zXMLToDictParser.addDatac             C   sB   t r2tj }| j|_| j|_| j|_|j	|d n
t
jd | jS )NTzRFailed to import expat module , check python-xml/python3-xml package installation.)xml_expat_availexpatParserCreatera  StartElementHandlerrb  EndElementHandlerrd  CharacterDataHandlerParser5   rH   r   )r   r   parserr   r   r   parseXMLO  s    
zXMLToDictParser.parseXMLN)	r   r   r   r   ra  rb  rd  r_  ro  r   r   r   r   r]    s   "r]  c               @   sJ   e Zd Zdd Zdd Zdd Zdd ZdddZdddZdddZ	d
S )Elementc             C   s   || _ || _d| _g | _d S )Nr!   )r7   
attributeschardatachildren)r   r7   rq  r   r   r   r   `  s    zElement.__init__c             C   s   | j j| d S )N)rs  r~   )r   elementr   r   r   AddChildf  s    zElement.AddChildc             C   s   | j j|S )N)rq  r   )r   r  r   r   r   getAttributei  s    zElement.getAttributec             C   s   | j S )N)rr  )r   r   r   r   getDatal  s    zElement.getDatar!   Nc             C   sn   |r|j }n| j }|s| j S g }xD|D ]<}|j|kr>|j| | j||}x|D ]}|j| qPW q&W |S d S )N)rs  r7   r~   getElementsByTagName)r   r7   ZElementNodeZChildren_listelementsrt  Zrec_elementsr`  r   r   r   rx  o  s    



zElement.getElementsByTagNamec             C   s:   |s
| j S g }x"| j D ]}|j|kr|j| qW |S d S )N)rs  r7   r~   )r   r7   ry  rt  r   r   r   getChildElements  s    
zElement.getChildElementsr   c             C   s   d| }|d| j  7 }x$| jD ]}|d|| j| f 7 }qW d}x | jD ]}||j|d 7 }qHW |dkr| jr|d| j d| j   7 }q|d7 }n|d| d| j   7 }|S )	Nr"   z<%sz %s="%s"r!   r   >z</%s>z/>)r7   rq  rs  toStringrr  )r   levelZretvalZ	attributecchildr   r   r   r|    s    
zElement.toString)r!   N)r!   )r   )
r   r   r   r   ru  rv  rw  rx  rz  r|  r   r   r   r   rp  _  s   


rp  c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )extendedExpatc             C   s   d | _ g | _d S )N)r    	nodeStack)r   r   r   r   r     s    zextendedExpat.__init__c             C   sD   t ||}t| jdkr.| jd }|j| n|| _| jj| d S )Nr   r   r   )rp  rO   r  ru  r    r~   )r   r7   rq  rt  parentr   r   r   StartElement_EE  s    

zextendedExpat.StartElement_EEc             C   s   | j d d | _ d S )Nr   r   )r  )r   r7   r   r   r   EndElement_EE  s    zextendedExpat.EndElement_EEc             C   s$   |r | j d }| j|7  _d S d S )Nr   r   )r  rr  )r   r   rt  r   r   r   charData_EE  s    
zextendedExpat.charData_EEc             C   sB   t r2tj }| j|_| j|_| j|_|j	|d n
t
jd | jS )NTzRFailed to import expat module , check python-xml/python3-xml package installation.)rg  rh  ri  r  rj  r  rk  r  rl  rm  r5   rH   r    )r   Z	xmlStringZParserr   r   r   rm    s    
zextendedExpat.ParseN)r   r   r   r   r  r  r  rm  r   r   r   r   r    s
   
r  c             C   s   dj d| dgS )Nr!   rT   )rG   )r   r   r   r   dquote  s    r  ir"   c             C   s>   d}x,t | ttt| D ]\}}||krP qW | |d  S )Nr   )zipr   r   rO   )r   charsr   r~  r   r   r   xlstrip  s
     r  c             C   s   t tt | |S )N)xreverser  )r   r  r   r   r   xrstrip  s    r  c             C   s   t | }|j  dj|S )Nr!   )r   reverserG   )r   rX  r   r   r   r    s    r  c             C   s   t tt t| ||S )N)r  r  )r   r  r   r   r   xstrip  s    r  c               C   s.   t rttj d d d S tjdd> S d S )Nr   r   P)rJ  r   rK  ZarchitecturestructZcalcsizer   r   r   r   
getBitness  s    r  c               C   s    t rtj jddj S dS d S )Nr"   _Zi686)rJ  rK  machiner-   r^   r   r   r   r   getProcessor  s    r  c               C   s   t jdkrtS tS d S )NZbig)r5  	byteorder
BIG_ENDIANLITTLE_ENDIANr   r   r   r   	getEndian  s    
r  c          0   C   s  dd l }|j }d}|rd| ks(d| krtj dkr|j }tjd| |f  |dkr|j|d}	|j }tjd|  |	dkrdS ytj	| |d}
W n" tj
k
r } zdS d }~X nX yDd}x8|rt  y|
jt}W n tk
 r   wY nX |
jr|rf|tkrftjd
|  ytj|tj}W n  tk
rP   tj| Y nX tj| tj| y"|j|
j |rtj|
j W n tk
r   Y nX |dkrP q|d	krqq|dkr|
jd q|std|
j|j|| |d	7 }qW W n2 tk
r2 } ztjd|  W Y d d }~X nX |r@t  y|
j  W n& tj
k
rr } zW Y d d }~X nX |
j|j fS )Nr   r!   ZsuZsudozcmd = %s pwd_prompt_str = [%s]zpwd_prompt_str2 = [%s]   )timeoutr   zAdding %s to EXPECT LISTr   ZYESz.password Object(i.e. passwordObj) is not validzException: %s)r  r!   r   )r   r!   )ior   r&   rC   ZgetPasswordPromptStringr5   r6   ZgetPasswordr   ZspawnuZExceptionPexpectZupdate_spinnerZexpectEXPECT_LIST	ExceptionZbeforer*   r  Ir-  r~   writeZsendlinerH   Zcleanup_spinnerr1   Z
exitstatusgetvalue)rS  passwordObjZpswd_msgZ
log_outputZspinnerr  r  outputZpwd_prompt_strZpasswdr  r   Zpswd_queried_cntr   r   r   r   r   r     sv     




 r   c             C   s  g }xR| j tdD ]>}|j }|j d}t|dkrL|d jtd}|d t|d |d< |d ot|d std| |d td	kst|d d d	kr|d
7 }n>dd |D }|d |d krtd| |tdt| 7 }dd |D }|d |d krtd| x:t|d |d d D ]}|j||  q2W q|j| qW t	t
dd t|D j }dd |D }|j  |S )zCredit: Jean Brouwers, comp.lang.python 16-7-2004
       Convert a string representation of a set of ranges into a
       list of ints, e.g.
       u"1-4, 7, 9-12" --> [1,2,3,4,7,9,10,11,12]
    ,re  r   r   
0123456789Nr   zempty range: rX   z%dc             S   s   g | ]}t |qS r   )rO   )r   r   r   r   r   r   `  s    z expand_range.<locals>.<listcomp>zwide range: z%%0%ddc             S   s   g | ]}t |d qS )
   )r   )r   r   r   r   r   r   e  s    zbad range: c             S   s   g | ]\}}||fqS r   r   )r   r   r\   r   r   r   r   n  s    c             S   s   g | ]}|rt |qS r   )r   )r   r   r   r   r   r   p  s    )r.   r   rc  rO   rstriprj   r   r   r~   r   dict	enumeratekeysr   )nsZfsr\   rhrA   r   r   r   r   expand_rangeL  s2    
$
r  c             C   s   | sdS t | d g| d d  }}}x\| dd D ]L}||d krJd}n2|rj|jtd||f  d}n|jtd|  |}q4W |r|jtd	|  dj|S )
z} Convert a list of integers into a string
        range representation:
        [1,2,3,4,7,9,10,11,12] --> u"1-4,7,9-12"
    r!   r   Fr   NTz-%s,%sz,%sz-%s)rU   r~   r   rG   )r   r   r~  r  r   r   r   r   collapse_rangev  s    r  c       	      C   s   |d krt j }d}xxt|ddddd dD ]`}t jj|\}}|j| r*||kr*yt|t| d  }W n tk
r~   w*Y q*X t	||}q*W t jj
|d| ||d |f S )Nr   Fr   )rl   rm   rn   ro   rD   z%s%0*d%sr   )r&   getcwdrk   rD   splitext
startswithr   rO   rj   r   rG   )	ri   ZextrI   ZdigitsrY  r<   r  r   r   r   r   r   createSequencedFilename  s    r  c             C   sX   | d krt j }nB| j j } x4ttj D ]\}}| |kr,P q,W d}tjd|  |S )NZen_USz)Unknown lang/locale. Using default of %s.)	r   ZgetSystemLocaler^   rc  r   Zsupported_localesr   r5   r   )ZlanglocZllr   r   r   validate_language  s    
r  c              C   sV   ydd l } t| j S  tk
rP   td}|rHtjj|d}tj	|S dS Y nX d S )Nr   uuidgenr!   )
uuidrU   Zuuid4r   r   r&   rD   rG   r   	getoutput)r  r  r   r   r   gen_random_uuid  s    
r  c               @   s&   e Zd ZdddZdd Zdd ZdS )	RestTableFormatterNc             C   s   || _ g | _d S )N)headerrows)r   r  r   r   r   r     s    zRestTableFormatter.__init__c             C   s   | j j| d S )N)r  r~   )r   Zrow_datar   r   r   add  s    zRestTableFormatter.addc       
      C   s|  | j rnt| j d }x,| j D ]"}t||krtjd|  d S qW t| j|kr\tjd g }xNt| jD ]@\}}t|}x | j D ]}t|t|| }qW |j|d  qlW d}x$|D ]}dj|d|d  dg}qW dj|dg}|j	| | jrd	}xFt|D ]:\}}dj|d
| j| d
|d t| j|   d	g}qW dj|dg}|j	| d}x&|D ]}dj|d|d  dg}qhW dj|dg}|j	| xt| j D ]\}	}d	}xNt|D ]B\}}dj|d
| j |	 | d
|d t| j |	 |   d	g}qW dj|dg}|j	| d}x&|D ]}dj|d|d  dg}q,W dj|dg}|j	| qW n
tjd d S )Nr   z"Invalid number of items in row: %sz"Invalid number of items in header.r   +r!   re  r   |r"   r   =zNo data rows)
r  rO   r5   rH   r  r  r   r~   rG   r  )
r   rA   Znum_colsr  Z
col_widthsr   r~  Z	max_widthr   rf  r   r   r   r    sT    


6


>

zRestTableFormatter.output)N)r   r   r   r   r  r  r   r   r   r   r    s   
r  c             C   sZ   dd l }|j d d j}d|kr*td| jj }|jdd  |jdd  |j| d S )Nr   r   r   z(Must call mixin() from within class def.r  )inspectr   r9  r-  __dict__r8  rV   update)r  r  r;  r  r   r   r   mixin  s    
r  	[OPTIONS]headingSet the logging level:-l<level> or --logging=<level>option5<level>: none, info\*, error, warn, debug (\*default)Run in debug mode:-g (same as option: -ldebug)Output plain text only:-t[PRINTER|DEVICE-URI]	[PRINTER]To specify a device-URI:'-d<device-uri> or --device=<device-uri>To specify a CUPS printer:"-p<printer> or --printer=<printer>'Bus to probe (if device not specified):-b<bus> or --bus=<bus>f<bus>: cups\*, usb\*, net, bt, fw, par\* (\*defaults) (Note: bt and fw not supported in this release.)This help information:-h or --helpspace	Examples:Notes:nIf device or printer is not specified, the local device bus is probed and the program enters interactive mode.note<If -p\* is specified, the default CUPS printer will be used.	See Also:Set the language:a--loc=<lang> or --lang=<lang>. Use --loc=? or --lang=? to see a list of available language codes.F--lang=<lang>. Use --lang=? to see a list of available language codes.[MODE]r  Run in non-interactive mode:-n or --non-interactiveRun in graphical UI mode:-u or --gui (Default)Run in interactive mode:-i or --interactiveZ	configurez
ui-toolkitZqt3Use Qt3:--qt3 (Default)Use Qt4:--qt4Use Qt5:--qt5qt4--qt3--qt4 (Default)qt5--qt5 (Default)c              C   s   t jdj d } d d d}xF| jdD ]8}|j }t|dkr(|d ||d < |d ||d < q(W yt|d t|d  }}W n tk
r   d\}}Y nX ||fS )Nzstty -ar   )r  r}   rc   r   r   r  r}      P   )r  r  )r   r  r"  r.   rO   r   r-  )Zln1valsZphr   r  colsr   r   r   ttysize@  s    
r  c             C   sT   t  \}}| r | }|| d }nt|d d }|| d }t|dd|ddfS )N   r   r   )r   r   )r  r   r|   )overrider  r  Zcol1Zcol2r   r   r   usage_formatterP  s    

r  r   c             C   s  |dkrt  } x| D ]}|\}}}	}
|jdd}|jdd}|	dkrdtjtj| tjd q|	dDkrtj| |
rtjd q|	dEkrtjtj| q|	dFkrtj|j||f|
 q|	dk r|jdrtjd|j   n
tj| q|	dkrtjd qW tjd nf|dkrdG\}}dH\}}dI\}}x| D ]}|\}}}	}
|	d
krxtt	||}tt	||}nN|	dkrtt	||}tt	||}n&|	dkr@tt	||}tt	||}q@W |d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|| }|| }|| }tjd||f  d|||f }tj| tjdt	|  tjd g }d}x| D ]}|\}}}	}
|	dkr|j
| d| }t	|t	| }}|	dkrtjdjd|dg tjd qj|	dJkrtjd tj| tjd qj|	dKkr<tjd tjd| d  tjd d}qj|	d
krP|rtjd tjd tjdjdd| dd| dg d}|rd|krtjdjd|dd|| d   d!|d||  d!g n^|rtjdjd!|d||  d!|d||  d!g n(tjdjd!d| d!|d||  d!g tjdjdd| dd| dg qj|	dkrb|rtjd tjd tjdjdd| dd| dg d}|rd|krtjdjd|dd|| d   d!|d||  d!g n^|rtjdjd!|d||  d!|d||  d!g n(tjdjd!d| d!|d||  d!g tjdjdd| dd| dg n|	dkr|rXd|krXtj| n|	dkrD|rtjd tjd tjdjdd| dd| dg d}|jdrtjdjd!d|d"  d!g tjdjd!|d|| d"  d!g tjdjdd| dd| dg n|	dkrjtjd qjW x(|D ] }tjd#||jd$df  qdW tjd n|d%kr~tjd&||f  tjd'||f  x| D ]}|\}}}	}
|jd(d}|jd(d}t	|t	| }}|	dkr4tjd) tjd*|jd+d  n|	dkrT|rtjd,|  nz|	dLkr|rxtjd-||f  n
tj| nJ|	dMkrtjd.|j jd/djd0djd1d  n|	d2krtj| qW tjd3 tjd4 tjd5 tjd6 tjd7 tjd8 tjd9 tjd: tjd; tjd< tjd= tjd> tjd? tjd@ tjdA tjdB tjd dCS )Nz
    Format usage text in multiple formats:
        text: for --help in the console
        rest: for conversion with rst2web for the website
        man: for manpages
    r   \r!   Zsummaryparar7   seealsor  r  r  exampler  r"   	r  restr      z_restindex
page-title: %s
crumb: %s
format: rest
file-extension: html
encoding: utf8
/restindex
z%s: %s (ver. %s)r  Fz`%s`_z**Tz.. class:: borderlessr  re  z`_z| *r   r   r  r   z
.. _`%s`: %s.html
zhp-Zmanz$.TH "%s" 1 "%s" Linux "User Manuals"z.SH NAME
%s \- %sz\*z.SH SYNOPSISz.B %szUsage:z.SH DESCRIPTION
%sz.IP "%s"
%sz.SH %sr   []zseealso, paraz
.SH AUTHORz+HPLIP (HP Linux Imaging and Printing) is anz=HP developed solution for printing, scanning, and faxing withz,HP inkjet and laser based printers in Linux.z.SH REPORTING BUGSzThe HPLIP Launchpad.net sitez.B https://launchpad.net/hplipz is available to get help, reportz>bugs, make suggestions, discuss the HPLIP project or otherwisezcontact the HPLIP Team.z.SH COPYRIGHTz2Copyright (c) 2001-15 HP Development Company, L.P.z.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.N)r  r7   r  )r  r  )r  r   )r   r   )r   r   )r   r   )r  r7   )r  r  )r  r   r  )r  r  )r  r-   r5   infoboldr   r  lstripr   rO   r~   rG   upper)Z	text_listtyptitleZcrumbversionZ	formatterr   Ztext1Ztext2r   Ztrailing_spaceZopt_colwidth1Zopt_colwidth2Zexmpl_colwidth1Zexmpl_colwidth2Znote_colwidth1Znote_colwidth2Zopt_tablewidthZexmpl_tablewidthZnote_tablewidthrZ   ZlinksZneeds_headerZlen1Zlen2rX  r   r   r   format_text^  s6   






















"60(&


"60($



"$$

 





,
















r  c             C   s   t jd |r&t jt jdtj  nt jt jd t jt jd| |f  t jd t jd t jd t jd t jd 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.)r5   r  r  rB   r  )Zprogram_namer  Zshow_verr   r   r   	log_titleB  s    





r  c             C   s   dt j| }t j||| S )Nz(?i))r*   r  r.  )oldsearchr-   Zregexr   r   r   ireplaceS  s    r  c             C   s   dd }t jd|| S )Nc             S   s   | j d}|d d dkrpy>|d d dkrBtt|dd dS tt|dd	 S W q tk
rl   Y qX n0yttj|dd
  }W n tk
r   Y nX |S )Nr   r   z&#r   z&#xr   rs   r   r   r   )r*  chrr   rj   r   Zname2codepointr  )rY  r   r   r   r   fixup\  s    
zunescape.<locals>.fixupz&#?\w+;)r*   r.  )r   r  r   r   r   unescape[  s    r  c             C   s   t | tst| } | jdd} x0tjD ]&}|dkr&| jt|dtj|  } q&W x6ttdttdd D ]}| jt|d| } qlW | S )	N&z&amp;&   z&%s;    r     z&#%d;)	r]   rU   r   r-   r   Zcodepoint2namer  r   r   )r   r~  r   r   r   r  v  s    
 r  c              C   sD   dddddg} d }x,| D ]$}t |r|d }tjd|  P qW |S )Nzgnome-terminalZkonsolezx-terminal-emulatorZxtermZgtktermz -e zAvailable Terminal = %s )r   r5   r6   )Zterminal_listZterminal_cmdrS  r   r   r   get_terminal  s    
r  c          
   C   s  |dks |d ks | dks | d kr.t jd dS | jd}|jd}t jd| |f  d}d}tjd}yTx,|t|k o|t|k rd}d}d}	d}
|j|| rt|j|| jd	}|j|| jd
}nt|| }|j|| rt|j|| jd	}	|j|| jd
}
nt|| }	||	k r<d}P nR||	krTt jd dS |j	 |
j	 k rnd}P n |j	 |
j	 krt jd dS |d	7 }qnW |dkrt|t|k rd}W n   t j
dt  dS |S )Nr!   zavailable_version is ''Fr@   z0HPLIP Installed_version=%s  Available_version=%sr   z(\d{1,})([a-z]{1,})r"   r   r   Tz Already new verison is installedz_Failed to get the latest version. Check out %s for manually installing latest version of HPLIP.)r5   r6   r.   r*   r  rO   r  r   r*  r^   rH   HPLIP_WEB_SITE)Zinstalled_versionZavailable_versionZinstalled_arrayZavailable_arrayZcntZIs_olderrr   Zinstalled_ver_digZinstalled_ver_alphZavailable_ver_digZavailable_ver_alphr   r   r   Is_HPLIP_older_version  sT     







r  c             C   sR   t | | d | }| dkr(tjjd tjjdtjd| d  tjj  d S )Nd   r   zz%sz%2d%%r  )r   r5  stdoutr  r5   Zcolorflush)r  Z	blockSizeZ	totalSizeZpercentr   r   r   downLoad_status  s
    r  i    c             C   s   | j  r.| j  jdr.t| j  jdj }ntjd d }d}x:| j|}|sRP |j| |t|7 }|rB||d| qBW d S )NzContent-LengthzIgnoring progres barr   r   )	r  r   r   rc  r5   r6   r,   r  rO   )responseZout_fdZ
chunk_sizeZ
status_barZ
total_sizeZbytes_so_farchunkr   r   r   chunk_write  s    


r"  c             C   s\  d}| dks| d kr&t jd |dfS |d kr8t \}}y|dkrtd}|rtjj|d}td||| f \}}|rt jd|  |dfS nd}|ry*tj	| }t
|d	}	t||	 |	j  W n4 tjk
r }
 zt jd
|   |dfS d }
~
X nX W n6 tk
r. }
 zt jd|
j  |dfS d }
~
X nX tjj|sTt jdt  |dfS d|fS )Nr   r!   zURL is emptyFwgetz=%s --cache=off --tries=3 --timeout=60 --output-document=%s %sz0Failed to connect to HPLIP site. Error code = %dTwbzFailed to open URL: %szI/O Error: %sz/Failed to get hplip version/ %s file not found.r   r   )r5   rH   r   r   r&   rD   rG   r   r   Zurlopenr#   r"  r1   r	   ZURLErrorr$   strerrorrE   Zhplip_version_file)ZweburlZ
outputFileZ	useURLLIBZretValuer3   r#  statusr  r   Zfile_fdr   r   r   r   download_from_network  s@    





r'  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	Sync_Lockc             C   s   || _ t| j d| _d S )NrA   )ZLock_filenamer#   handler)r   filenamer   r   r   r   '  s    zSync_Lock.__init__c             C   s   t j| jt j d S )N)r8   r9   r)  r;   )r   r   r   r   acquire,  s    zSync_Lock.acquirec             C   s   t j| jt j d S )N)r8   r9   r)  r>   )r   r   r   r   release/  s    zSync_Lock.releasec             C   s   | j j  d S )N)r)  r1   )r   r   r   r   __del__2  s    zSync_Lock.__del__N)r   r   r   r   r+  r,  r-  r   r   r   r   r(  &  s   r(  c       	      C   sh   t stjd d S tjd ||| ||||g}tjdtdd}|j|ddi t j| tjd d S )	NzFailed to import dbus, lowlevelzsend_message() entered/ZEvent)rD   Z	interfacer7   Z	signatureZssisisszsend_message() returning)	
dbus_availr5   r6   r   ZSignalMessageDBUS_SERVICEr~   r   Zsend_message)	Z
event_codeZ
device_uriZprinter_nameZusernameZjob_idr  Z	pipe_namer/  msgr   r   r   	sendEvent5  s    

r2  c             C   s,   t j | }|r dj|}||fS g dfS d S )Nr"   r!   )globrG   )ZFile_expZ	File_listZFile_list_strr   r   r   expand_listB  s
    

r4  c             C   s4  d}d}x4| j ddkr6| jddd } | jds:P q
|S q
W t| dkrN|S | | dkr`| }nyx|t| k rd}x0| | dks| | dks| | d	kr|d }qxW x:| | d	kr| | dkr|d
 t| | d
 }|d }qW |dkrP || ||| d   }|| d }qdW W n tk
r.   Y nX |S )Nr   r!   z

r   ZHTTP<r"   r   rs   r   r   )r  r.   r  rO   r   r/   )Zsrc_datar   Zdst_dataZbuf_lenr   r   r   unchunck_xml_dataL  s6    
&r7  c             C   s   d}g }t jd}| rN|j| rN|j| jd}t jddt|}|jd}n
|jd tj	d|  |j
d	}|jd
}x6|D ].}d}x$|D ]}	||	kr||= P |d7 }qW qW t|dkrd}d}
x |D ]}|
r|
d7 }
|
|7 }
qW ||
fS )NFz.*-G(.*)r   z\sr!   r  ZlpzRequied groups list =[%s]z
r"   r   T)r*   r  r  r*  r.  rU   r.   r~   r5   r6   r  rO   )Zrequired_grps_strZavl_grpsresultZexp_grp_listZexp_patZgrpsZgrp_listgZ	grp_indexr   Zmissing_groups_strr`  r   r   r   check_user_groups|  s4    






r:  c             C   s   d}t jj| s tjd|   npt jj| r:t jj| }n| }t jj|sZtjd|  n6t j| jd@ dkr~tjd|   ntjd|   d}tjd| |f  |S )	NFz9Either %s file is not present or symbolic link is missingz%s library file is missing.H   z;%s library file doesn't have user/group execute permission.z%s library file present.Tz%s library status: %d)	r&   rD   rE   r5   r6   islinkrealpathr'   st_mode)Zso_file_pathZret_valZ	real_filer   r   r   check_library  s    r?  c             C   sb   d}t d}| rT|rTtjj|d}d|| f }tj| t|\}}tjd|  n
tjd |S )Nr   r#  z<%s --cache=off --tries=3 --timeout=60 --output-document=- %szwget returned: %dzwget not foundr   )r   r&   rD   rG   r5   r6   r   )targetr&  r#  rS  r  r   r   r   download_via_wget  s    

rA  c             C   sb   d}t d}| rT|rTtjj|d}d|| f }tj| t|\}}tjd|  n
tjd |S )Nr   curlz2%s --output - --connect-timeout 5 --max-time 10 %szcurl returned: %dzcurl not foundr   )r   r&   rD   rG   r5   r6   r   )r@  r&  rB  rS  r  r   r   r   download_via_curl  s    

rC  c             C   sb   d}t d}| rT|rTtjj|d}d|| f }tj| t|\}}tjd|  n
tjd |S )Nr   pingz%s -c1 -W1 -w10 %szping returned: %dzping not foundr   )r   r&   rD   rG   r5   r6   r   )r@  r&  rD  rS  r  r   r   r   check_network_via_ping  s    

rE  c             C   s0   t | }|dkr(t| }|dkr(t|}|dkS )Nr   )rA  rC  rE  )rR  Zping_serverr&  r   r   r   check_network_connection  s    rF  c             C   s\   g }xR| D ]J}|r|d | }d|krJt j |}x"|D ]}|j| q6W q
|j| q
W |S )Nr.  r   )r3  r~   )Z
Files_ListZ
prefix_dirZExpanded_Files_listr<   Zf_fullfiler   r   r   
expandList  s    


rH  c             C   s2   yt t| t|S  tk
r,   t | |S X d S )N)rZ  floatrj   )r   r[   r   r   r   compare  s    rJ  c             C   st   | d k	rft jd|   xN| D ]F}t|\}}|dkrx,|D ]$}t jd|| |f  ||| fS W qW t jd dS )Nz*Searching for '%s' in running processes...TzFound: %s (%s)z	Not foundr   r!   )r   r!   )r5   r6   Is_Process_Running)Zpackage_mgrsr   r&  processpidr   r   r   check_pkg_mgr  s    


rN  c             C   s  | sdi fS yi }t ddddgtd}t d| g|jtd}t dddg|jtd}|j d	 }tjd
|  |rxH|j D ]<}d| }tj|\}}	d| }tj|\}}
|	rx|
||	< qxW d|fS di fS W nD t	k
r } z&tj
d|   ttj? d|f di fS d }~X nX d S )NFZpsz-wZaux)r  Zgrep)stdinr  z-vr   zIs_Process_Running output = %s zecho '%s' | awk {'print $2'}z!echo '%s' | awk {'print $11,$12'}Tz"Execution failed: process Name[%s]zExecution failed:)r   r   r  Zcommunicater5   r6   r"  r   Zgetstatusoutputr  rH   printr5  stderr)Zprocess_namerL  Zp1Zp2Zp3r  r   rS  r&  rM  Zcmdliner   r   r   r   rK  	  s.    rK  c             C   sZ   t d |  }|r |r |j | }tjd| |f  t||\}}d|krVtjd|   d S )Nr"   zRemoving %s cmd = %s r   zFailed to remove=%s )RMDIRZ
getAuthCmdr5   r6   r   )rD   r  ZcksudorS  r&  r  r   r   r   r0   *	  s    r0   c                s   G  fdddt }|S )z,Convert a cmp= function into a key= functionc                   s\   e Zd Zdd Z fddZ fddZ fddZ fd	d
Z fddZ fddZ	dS )zcmp_to_key.<locals>.Kc             W   s
   || _ d S )N)obj)r   rS  r/  r   r   r   r   8	  s    zcmp_to_key.<locals>.K.__init__c                s    | j |j dk S )Nr   )rS  )r   other)mycmpr   r   __lt__:	  s    zcmp_to_key.<locals>.K.__lt__c                s    | j |j dkS )Nr   )rS  )r   rT  )rU  r   r   __gt__<	  s    zcmp_to_key.<locals>.K.__gt__c                s    | j |j dkS )Nr   )rS  )r   rT  )rU  r   r   __eq__>	  s    zcmp_to_key.<locals>.K.__eq__c                s    | j |j dkS )Nr   )rS  )r   rT  )rU  r   r   __le__@	  s    zcmp_to_key.<locals>.K.__le__c                s    | j |j dkS )Nr   )rS  )r   rT  )rU  r   r   __ge__B	  s    zcmp_to_key.<locals>.K.__ge__c                s    | j |j dkS )Nr   )rS  )r   rT  )rU  r   r   __ne__D	  s    zcmp_to_key.<locals>.K.__ne__N)
r   r   r   r   rV  rW  rX  rY  rZ  r[  r   )rU  r   r   K7	  s   r\  )object)rU  r\  r   )rU  r   
cmp_to_key5	  s    r^  c             C   s@   | d |d k| d |d k  p>| d |d k| d |d k  S )Nr   r   r   )r   r[   r   r   r   	levelsCmpI	  s    r_  c               C   s   t dttd tt  r4dttd tt  S t dtt rPdtt S t dtt rldtt S t dttd tt  rdttd tt  S t dtt rdtt S t drdS tjdt  dS )zfDetermine the pip command syntax available for a particular distro.
    since it varies across distroszpip-%sr@   zpip%szpip-python%sz
pip-pythonzEpython pip command not found. Please install '%s' package(s) manuallyN)r   rU   MAJ_VERMIN_VERr5   rH   Zdepends_to_install_using_pipr   r   r   r   find_pipM	  s    rb  c              C   sB   y&t j t jt j} | jd | j  dS  t jk
r<   dS X d S )N1.2.3.48   TF)rc  rd  )socketZAF_INETZ
SOCK_DGRAMZconnectr1   rH   )r   r   r   r   	check_lana	  s    
rf  c             C   s   | j dr$| j d}| |d d  } | dd dkrd
}d}x`|r| j d}t| d|d  d}|| |d	 |d	 |   }| |d	 | d	 t|  } q>W |} | S )Nz

r  r   r   r5  r!   z
rs   r   r   )r  r   rO   )r   r   sizerU  r   r   r   extract_xml_chunkj	  s    


 rh  c              C   s   ydd l } dS  tk
r8 } ztj| W Y d d }~X nX ydd l}dS  tk
rr } ztj| W Y d d }~X nX tdd S )Nr   r  r  z-GUI Modules PyQt4 and PyQt5 are not installed)r  r   r5   r6   r  )r  r   r  r   r   r   r   z	  s    r   c              C   sN   d} yt  } tjd|   | S  tk
rH } ztj| W Y d d }~X nX d S )Nr!   zUsing GUI Module %s)r   r5   r  r   rH   )Z
_ui_statusr   r   r   r   	ui_status	  s    ri  c             C   s   | dkr`yddl m} tjd |dfS  tk
r\ } ztj| tjd W Y d d }~X qX nr| dkryddlm} tjd |d	fS  tk
r } ztj| tjd W Y d d }~X nX tjd
 tjd d S )Nr  r   )QApplicationzUsing PyQt4r  r   r  zUsing PyQt5r  z+Unable to load Qt support. Is it installed?)	ZPyQt4.QtGuirj  r5   r6   r   rH   r5  exitZPyQt5.QtWidgets)Z
ui_toolkitrj  r   r   r   r   import_dialog	  s$    




rl  c             C   s6   | j d}t| }x|dd  D ]}t||}q W |S )Nr@   r   )r.   
__import__getattr)Zmod_name_as_strZ
componentsmodcompr   r   r   dyn_import_mod	  s
    
rq  )F)rX   )F)TFFr   N)F)r!   r!   r!   F)F)T)N)N)r"   )r"   )r"   )Nr!   TTr   )Nr   )r  r!   r  F)r  r  r  F)r!   r  r  F)r  r  r  F)r  r  r  F)r  r!   r  F)r  r!   r  F)r  r  r  F)r  r  r  F)r  r  r  F)r!   r  r  F)r  r  r  T)r!   r!   r  F)r  r!   r  F)r  r!   r  F)r  r!   r  F)r  r!   r  F)r  r!   r  F)r  r  r  F)r  r  r  F)r  r!   r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r  r  r  F)r   )r   r!   r!   r!   )T)NF)r!   r   r!   r!   )N)N)NF)r5  r&   r   r   r   r%   rg   r   re  r  ZselectZtimer8   errnor'   rQ   r3  r*   Zdatetimer9  r   Zsixext.movesr   r   r   r	   Zsixextr
   r   r   r   r   r   r!   r   Zxml.parsers.expatZparsersrh  rg  r   rK  rJ  Zdbusr   r   r   r/  r   r   r   Zcodesr   r  r  rR  ZRMr0  r  ZHTTP_CHECK_TARGETZPING_CHECK_TARGETZ
ERROR_NONEZERROR_FILE_CHECKSUMZERROR_UNABLE_TO_RECV_KEYSZERROR_DIGITAL_SIGN_BADversion_infor`  ra  ZEOFZTIMEOUTZEXPECT_WORD_LISTr  r   r  r  r   r-  r~   r4   r=   r?   rJ   rS   rW   r`   rb   rk   r{   r|   r   r   r   r   r   r   r   r   Zmkstempr   r  r   r]  r   r   r   r   r   r	  r
  r  r   r  r<  rP   rR   r>  rK   r@  encoder?  rB  rC  rM  rQ  rO  rT  rW  r[  r\  r]  rp  r  r  
hexversionr  r  r  r  rU   r  r  rc  r  r  r  r   r  r  r  r  r  r  r  ZUSAGE_OPTIONSZUSAGE_LOGGING1ZUSAGE_LOGGING2ZUSAGE_LOGGING3ZUSAGE_LOGGING_PLAINZ
USAGE_ARGSZUSAGE_ARGS2ZUSAGE_DEVICEZUSAGE_PRINTERZ
USAGE_BUS1Z
USAGE_BUS2Z
USAGE_HELPZUSAGE_SPACEZUSAGE_EXAMPLESZUSAGE_NOTESZUSAGE_STD_NOTES1ZUSAGE_STD_NOTES2ZUSAGE_SEEALSOZUSAGE_LANGUAGEZUSAGE_LANGUAGE2Z
USAGE_MODEZUSAGE_NON_INTERACTIVE_MODEZUSAGE_GUI_MODEZUSAGE_INTERACTIVE_MODEZsys_confr   ZUSAGE_USE_QT3ZUSAGE_USE_QT4ZUSAGE_USE_QT5r  r  r  r  r  r  r  r  r  r  r"  r'  r(  r2  r4  r7  r:  r?  rA  rC  rE  rF  rH  rJ  rN  rK  r0   r^  r_  rb  rf  rh  r   ri  rl  rq  r   r   r   r   <module>   s  $








",
! 	3WP=(O*F e<0

0!		
