
    =	f@                    	   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 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" d dl#Z#	 d dl$m%c m&Z& dZ'	 d dl)Z)dZ*	 d dl+Z+d d
l+m,Z,m-Z-m.Z. dZ/	 d dl0Z0d Z1ddl ddl3 ddl!m4Z4 d Z5dZ6dZ7dZ8dZ9dZ:dZ;dZ<d Z=dZ>dZ?dZ@e j                  d    ZBe j                  d   ZCe4j                  e4j                  ddddddddddd d!gZFg ZGeFD ]1  ZH	  ej                  eHej                        ZKeGj                  eK       3 d" ZNd# ZOd$ ZPdd%ZQ ed&       ed&       ed&      dfd'ZRd( ZSdd)ZTdd*ZUdd+ZVd, ZW G d- d.      ZX G d/ d0      ZY G d1 d2      ZZ G d3 d4eZ      Z[ G d5 d6      Z\ G d7 d8      Z]d9 Z^d: Z_dd;Z`	 ej                  Zbdd=Zd G d> d?ee      Zfd@ ZgdA ZhdB ZidC ZjdD Zk	 d dElmlZl dL Zper>eqj                  dMdM      Zsesj                  esej                  j                  dN            Zwn/ ej                  d&d&      Zsesj                  esej                        ZwdO ZudP fdQZxdR fdSZyg dTZzdUd&d&dVd&dTZ{dW Z|ddXZ}dY Z~ddZZdd[Z G d\ d]      Z G d^ d_      Z G d` da      Zdb Ze j
                  dck  rdddZddeZdf ZddgZn'ej                  Zej                  Zej                  Zdh Zdi Zdj ZddkZdl Zdm ZddnZddoZdp Zdq Z G dr dsee      Zdt ZduZdvZdwZdxZdyZdzZd{Zd|Zd}Zd~ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZejg                  ddd      dk(  rdZdZdZn;ejg                  ddd      dk(  rdZdZdZnejg                  ddd      dk(  rdZdZdZd ZddZddZddZd Zd Zd Zd Zd Zd ZdefdZddZ G d d      ZddZd Zd Zd Zd ZddZddZd Ze;e<fdZddZd ZddZd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zy# e($ r d	Z'Y w xY w# e($ r d	Z*Y w xY w# e($ r d	Z/Y w xY w# e($ r d dl2Z2d Z1Y w xY w# eM$ r eGj                  eH       Y w xY w# ec$ r dd<ZbY w xY w# e($ r#  G dF dG      Zm G dH dIen      Zo G dJ dK      ZlY w xY w)    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                 H    t        j                  |       j                         S N)hashlibsha1	hexdigestss    /usr/share/hplip/base/utils.pyget_checksumr   H   s    ||A((**    c                 H    t        j                  |       j                         S r   )shanewr   r   s    r   r   r   N   s    wwqz##%%r   )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]:kennwortzpassword forzmot de passeu   contraseñazpalavra passeu   口令
wachtwoordheslou   密码u	   Lösenordc                  b   g } 	 t        d      }	 t        j                  dj                               d   j                  dd      j                  d      } d| v r| j                  d       |j!                          | S # t        $ r 	 dt        j                  t	        j
                  d      j                        j                  k7  r?t        j                  t	        j
                  d      j                        j                  gcY S n# t        $ r | cY cY S w xY wY w xY w# t        $ r | cY S w xY w)Nz/etc/cups/cupsd.confrootzSystemGroup [\w* ]*r   zSystemGroup   )openIOErrorgrpgetgrgidosstatst_gidgr_nameOSErrorrefindallreadreplacesplit
IndexErrorremoveclose)lisfps     r   get_cups_systemgroup_listr@      s   
C&'

1"'')<a@HHXZ[bbcfg }

6HHJJ  	bgg.D&E&L&LMUUURWW-C%D%K%KLTTUU V 	J	 V  
sN   A= AD  =	DA;DDDDDDDD D.-D.c                 >   t         j                  d| j                  z         	 t        j                  | j                         t        j                  t        j                  z         y# t        t        f$ r% t         j                  d| j                  z         Y yw xY w)NzLocking: %sTzFailed to unlock %s.F)
logdebugnamefcntlflockfilenoLOCK_EXLOCK_NBr.   r5   fs    r   lockrL      sm    IImaff$%AHHJ =>W 		(16612s   AA( (1BBc                    | ut         j                  d| j                  z         	 t        j                  | j                         t        j                         t        j                  | j                         y y # t        t        f$ r Y y w xY w)NzUnlocking: %s)rB   rC   rD   rE   rF   rG   LOCK_UNr1   r<   r.   r5   rJ   s    r   unlockrO      sg    }		/AFF*+	KK
EMM2IIaff	 
 ! 		s   AA9 9B
Bc                    t         j                  }t        j                         dk(  rd}n4t        j                  j                  |      st        j                  |       t        j                  j                  |dj                  | dg            }	 t        |d      }t        |      s|st        j                  d|d	| d
       yd|fS # t        $ r |st        j                  d|z         Y yw xY w)Nr   z/var.rL   wzUnable to open %s lock file.)FNzUnable to lock z. Is z already running?T)propuser_dirr1   geteuidpathexistsmakedirsjoinr-   r.   rB   errorrL   )applicationsuppress_errordir	lock_filelock_file_fs        r   lock_appr`      s    
--C	zz|qWW^^C 
CS#((K+@"ABI9c* IIYP[\]  II4y@As   C #C10C1r+   c                 (   t        |      dk(  r|t        |       z  }t        rt        }nt        }|j	                  t        d      t        d            }|j	                  | |      |"|j                  ||j                  |            fd}|S )Nr   r+   c                 (    | j                        S r   )	translate)r   deletetranss    r   callablezTranslator.<locals>.callable   s    {{5&))r   )lenr   bytesstring	maketransr   rc   )frmtord   keep
data_typesallcharsrf   re   s     `    @r   
Translatorrp      s    
2w!|#c(]


##M"$5}R7HIH  b)E##HdnnXv.NO* Or   c                     t        |       dk(  ryt        |       dk(  rt        d| d   z   dz         S t        |       dk\  r4ddj                  |       z   dz   t        | j                               z   dz   S y )Nr   r+   r   "z", "z" and ")rg   strrY   pop)r>   s    r   list_to_stringru      sp    
3x1}
3x1}4A;t#$$
3x1}HMM#&&{23swwy>A$FF r   c                     t        | t              rB| r@| d   j                         dv rt        d      S | d   j                         dv 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   0rK   nr|   )
isinstancers   lowerr   r   defaults     r   to_bool_strr      sK    !SaQ4::<?*c?"qTZZ\_,c?"Nr   c                     t        | t              r0| r.| d   j                         dv ry| d   j                         dv ry|S t        | t              r| S |S )zG Convert an arbitrary 0/1/T/F/Y/N string to a boolean True/False value.r   rw   Tr{   F)r~   rs   r   boolr   s     r   to_boolr      sU    !SaQ4::<?*qTZZ\_, N 
At	Nr   c           	   #     K   || }	 t        j                  |       }|xs d}|j                  d      }|D ]  }t         j                  j                  t         j                  j                  | |            }	|D ]d  }
t        j                  ||
      s|s t         j                  j                  |	      r<|r|	 C	 t         j                  j                  |	       f |st         j                  j                  |	      st        |	|||||      D ]  }|   y # t         j                  $ r Y y w xY w# t        $ r |	 Y w xY ww)Nr   ;)r1   listdirrZ   r:   rV   normpathrY   fnmatchisdirbasename
ValueError	walkFiles)r*   recurse	abs_pathsreturn_folderspatternrV   namespat_listrD   fullnamepatrK   s               r   r   r     s#    |

4 
 nG}}S!H 77##BGGLLt$<= 		+CtS)!x)@ &+"$''"2"28"<<		+ rww}}X.x)^WVZ[ % 88 $  * +"*N+sd   E
D A4E
!E
4E
<!D7E
"E
E
D41E
3D44E
7EE
EE
c                 \   t         j                  j                  |       rt        j                  |       }|t        j                     dz  }|dz  ry|t        j
                     t        j                         k(  r|dz  ry|t        j                     t        j                         k(  r|dz  ryy)Ni  r$   T      F)	r1   rV   rW   r2   ST_MODEST_GIDgetgidST_UIDgetuid)rV   r   modes      r   is_path_writabler   (  s|    	ww~~dGGDM&#:t{{^ryy{*td{t{{^ryy{*te|r   c                   &    e Zd ZdZdZdZd ZddZy)TextFormatterr   r   r$   c                 h    g | _         |D ]&  }| j                   j                  t        di |       ( y )N )columnsappendColumn)selfcolspeclistcolspecs      r   __init__zTextFormatter.__init__@  s2    " 	3GLL 1 12	3r   c                    d}t        |      }t        |      t        | j                        k7  rt        j	                  d       y t        t        d || j                              D ]5  \  }}|j                  |       t        |t        |j                              }7 dg|z  }t        |      D ]-  }| j                  D ]  }||   |j                  |      z   ||<    / |rdj                  |      dz   S dj                  |      S )Nr   z6Formatter: Number of text items does not match columnsc                      | S r   r   xs    r   <lambda>z'TextFormatter.compose.<locals>.<lambda>K  s     r   r+   
)listrg   r   rB   rZ   mapwrapmaxlinesrangegetlinerY   )r   textlistadd_newlinenumlinestextcolumn	complineslns           r   composezTextFormatter.composeE  s    >x=C--IINO \8T\\!JK 	8LD&KK8S%67H	8 D8O	/ 	CB,, C )"r0B B	"C	C 99Y'$..99Y''r   NF)__name__
__module____qualname__LEFTCENTERRIGHTr   r   r   r   r   r   r   :  s    DFE3
(r   r   c                   @    e Zd Zdej                  dfdZd Zd Zd Zy)r   N   r   c                 N    t        |      | _        || _        || _        g | _        y r   )intwidth	alignmentmarginr   )r   r   r   r   s       r   r   zColumn.__init__Y  s"    Z
"
r   c                    | j                   t        j                  k(  r|j                  | j                        S | j                   t        j
                  k(  r|j                  | j                        S |j                  | j                        S r   )r   r   r   centerr   r   rjustljust)r   lines     r   alignzColumn.align_  s_    >>]111;;tzz**^^}222::djj))::djj))r   c                 x   g | _         g }|j                         D ]r  }|t        | j                        k  r|j	                  |       -t        dt        |      | j                        D ]#  }|j	                  |||| j                  z           % t t        |      sy |j                  d      }|D ]`  }dt        |      z   }t        |      |z   | j                  kD  r-| j                   j	                  | j                  |             |}Y|dz   |z   }b | j                   j	                  | j                  |             y )Nr   r   r,   )	r   r:   rs   r   r   r   rg   rt   r   )r   r   wordswordicurrent	increments          r   r   zColumn.wrapg  s   
JJL 	7Ds4::&T"q#d)TZZ8 7ALLa$**!567		7 5z6))A, 	/DCII7|i'$**4

!!$**W"56!C-$.	/ 	

$**W-.r   c                     |t        | j                        k  rd| j                  z  | j                  |   z   S d| j                  | j                  z   z  S )Nr,   )rg   r   r   r   )r   indexs     r   r   zColumn.getline{  sF    3tzz?"t{{?TZZ%666$++

233r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r   W  s#    =+=+=a */(4r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Stackc                     g | _         y r   stackr   s    r   r   zStack.__init__  	    
r   c                 6    | j                   j                         S r   r   rt   r   s    r   rt   z	Stack.pop  s    zz~~r   c                 :    | j                   j                  |       y r   )r   r   r   values     r   pushz
Stack.push  s    

% r   c                     | j                   S r   r   r   s    r   as_listzStack.as_list  s    zzr   c                     g | _         y r   r   r   s    r   clearzStack.clear  r   r   c                 ,    t        | j                        S r   )rg   r   r   s    r   __len__zStack.__len__  s    4::r   N)	r   r   r   r   rt   r   r   r   r   r   r   r   r   r     s      !r   r   c                       e Zd Zd Zd Zd Zy)Queuec                 .    t         j                  |        y r   )r   r   r   s    r   r   zQueue.__init__  s    tr   c                 8    | j                   j                  d      S Nr   r   r   s    r   getz	Queue.get  s    zz~~a  r   c                 0    t         j                  | |       y r   )r   r   r   s     r   putz	Queue.put  s    

4r   N)r   r   r   r   r   r   r   r   r   r   r     s    ! r   r   c                   &    e Zd ZddZd Zd Zd Zy)
RingBufferc                      || _         g | _        y r   )r   data)r   size_maxs     r   r   zRingBuffer.__init__  s    	r   c                     | j                   j                  |       t        | j                         | j                  k(  rd| _        t
        | _        yy)z*append an element at the end of the bufferr   N)r   r   rg   r   curRingBufferFull	__class__r   r   s     r   r   zRingBuffer.append  s;    		tyy>TXX%DH+DN &r   c                 "    || j                   d<   y)z.replace the last element instead off appendingNr   r  s     r   r9   zRingBuffer.replace  s    		"r   c                     | j                   S )z8 return a list of elements from the oldest to the newestr  r   s    r   r   zRingBuffer.get  s    yyr   N)2   r   r   r   r   r   r9   r   r   r   r   r   r     s    ,r   r   c                   $    e Zd Zd Zd Zd Zd Zy)r   c                      y r   r   )r   r}   s     r   r   zRingBufferFull.__init__  s    r   c                 x    || j                   | j                  <   | j                  dz   | j                  z  | _        y Nr   )r   r   r   r  s     r   r   zRingBufferFull.append  s,    		$((HHQJ$((*r   c                     | j                   dz
  | j                  z  | _         || j                  | j                   <   | j                   dz   | j                  z  | _         y r  )r   r   r   r  s     r   r9   zRingBufferFull.replace  sD    HHQJ$((*		$((HHQJ$((*r   c                 h    | j                   | j                  d  | j                   d | j                   z   S r   )r   r   r   s    r   r   zRingBufferFull.get  s+    yy#dii	&:::r   Nr  r   r   r   r   r     s    ++;r   r   c                     t        | j                               }|D cg c]  }|d   |d   g }}|j                          t        dt	        |            D cg c]
  }||   d    c}S c c}w c c}w )z9 Returns the keys of dictionary d sorted by their values r   r   )r   itemssortr   rg   )dr  v	backitemsr   s        r   sort_dict_by_valuer    sf    
qwwy/E$)*q!QqT{*I*NN%*1c)n%=>IaLO>> +>s   A*A/c                 2    t        j                  d| d      S )N%sT)grouping)localeformat)vals    r   commafyr    s    ==sT22r   c                 "   | dk  rdj                  t        |       dg      S d| cxk  rdk  rtn nq|r=dj                  t        t        | dz  d            t        d      t        |       dg      S dj                  t        t        | dz  d            t        d	      g      S d| cxk  rd
k  rtn nq|r=dj                  t        t        | dz  d            t        d      t        |       dg      S dj                  t        t        | dz  d            t        d      g      S |r=dj                  t        t        | dz  d            t        d      t        |       dg      S dj                  t        t        | dz  d            t        d      g      S )Ni   r+   z Bi   g      @r   z KB ()z KBi   @g      0Az MB (z MBg      Az GB (z GB)rY   r  r   round)r   
show_bytess     r   format_bytesr     s^   4xww
D)**		G	77JuQvXq'9:Z=PSZ[\S]_bcdd77JuQvXq'9:Z=NOPP	1	!z	!77JuQy[!'<=z'?RU\]^U_adeff77JuQy[!'<=z%?PQRR77JuQ|^Q'?@*WBUX_`aXbdghii77JuQ|^Q'?@*UBSTUUr   c                     t        j                  |       }t        j                  |t        j                  t        j
                  z  t        j                  z  d      }t        j                  |d      |fS )Ni  zw+b)tempfilemktempr1   r-   O_RDWRO_CREATO_EXCLfdopen)suffixprefixr]   r   rV   fds         r   make_temp_filer+    sN    v&WWT299RZZ/		95AB'//r   c                    g }t        j                  d      }|r|j                  d      }|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       d}|D ]   }	 t        j                  |      }| |v s|} n |r#|r t         j                  j                  ||       S y|S # t
        $ r Y Uw xY w)	NPATH:z/usr/binz/usr/local/binz/sbinz	/usr/sbinz/usr/local/sbinr+   )r1   getenvr:   r   r   r5   rV   rY   )commandreturn_full_pathrV   path_val
found_pathpfiless          r   whichr6    s    	Dyy H~~c"KK
KK !KKKKKK!"J 	JJqME %
 77<<
G44  		s   C	CCc                   *    e Zd Zd Zd Zd Zd Zd Zy)UserSettingsc                 $    | j                          y r   )loadr   s    r   r   zUserSettings.__init__   s    		r   c                 T   d| _         t        d      }t        |      dkD  rd| _         nbt        d      }t        |      dkD  rd| _         nAt        d      }t        |      dkD  rd| _         n t        d	      }t        |      dkD  rd
| _         d| _        t        d      }t        |      dkD  rd| _        nbt        d      }t        |      dkD  rd| _        nAt        d      }t        |      dkD  rd| _        n t        d      }t        |      dkD  rd| _        t        d      }t        |      rd| _        nd| _        t        d      }t        |      rd| _        nd| _        t        d      }t        |      rd| _        nd| _        t        d      }t        |      rd| _        y d| _        y )Nr+   zhp-printr   zhp-print -p%PRINTER%kprinterz"kprinter -P%PRINTER% --system cupsgtklpzgtklp -P%PRINTER%xppzxpp -P%PRINTER%zsimple-scanzsimple-scan %SANE_URI%xsanezxsane -V %SANE_URI%kooka
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_printr6  rg   cmd_scan	cmd_pcardcmd_copycmd_faxcmd_fab)r   rV   s     r   loadDefaultszUserSettings.loadDefaults#  sq   Z t9q=3DN$D4y1}!EW~t9q=%8DN <D4y1}): ]#t9q=4DM>D4y1} 5W~t9q=$+DM .D4y1}(4 [!t98DNFDN _%t9;DMIDM \"t94DLBDL Xt9#DL1DLr   c                    | j                          t        j                  d       t        t        j                  ddd            | _        	 t        t        j                  ddd            | _        	 t        t        j                  dd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        t        j                  ddd            | _        t        t        j                  ddd            | _        t        t        j                  ddd            | _        t)        t        j                  ddd            | _        | j                          y # t        $ r d| _        Y w xY w# t        $ r d	| _
        Y w xY w)NzLoading user settings...refreshenabler|   rate30   typer   commandsprntscanpcardcpyfaxfabupgradenotify_upgradelast_upgraded_timepending_upgrade_timelatest_available_versionr+   )rH  rB   rC   r   	user_confr   auto_refreshr   auto_refresh_rater   auto_refresh_typerB  rC  rD  rE  rF  rG  upgrade_notifyupgrade_last_update_timeupgrade_pending_update_timers   r[  r   s    r   r:  zUserSettings.loadi  s   		,-#IMM)Xs$KL	(%(y&$)O%PD"	'%(y&#)N%OD" #z64>>J!j&$--H"z7DNNK!j%G }}ZE }}ZE$Y]]9>NPS%TU(+IMM)DXZ],^(_%*-immIG]_b.c*d(&))--	C]^`*a&b%

'  	(%'D"	(
  	'%&D"	's$   %H  2%H7  H43H47I
Ic                 4   t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d| j
                  z         t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d	| j                  z         t         j                  d
| j                  z         t         j                  d| j                  z         t         j                  d| j                  z         y )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)rB   rC   rB  rD  rF  rG  rE  rC  r]  r^  r_  r`  ra  rb  r   s    r   rC   zUserSettings.debug  s   		%67		%67		#dll23		#dll23		%56		$t}}45		$t'8'889		)D,B,BBC		)D,B,BBC		+d.A.AAB		*D,I,IIJ		7$:Z:ZZ[r   c                 f   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                          y )NzSaving user settings...rP  rQ  rS  rU  rR  rT  rJ  rK  rL  rO  rW  rX  rY  rZ  r[  )rB   rC   r\  setrB  rD  rF  rC  rE  r]  r^  r_  r`  ra  rb  r[  r   s    r   savezUserSettings.save  s   		+,j&$..9j'4>>:j%6j&$--8j%7i$*;*;<i)?)?@i)?)?@i!143F3FGi 4d6S6STi!79Y9YZi!;T=Z=Z[

r   N)r   r   r   r   rH  r:  rC   rf  r   r   r   r8  r8    s    D2L8\r   r8  c                  6   	 dd l } | j                         }| j                  || j                  | j                  z  | j
                  | j                  d      }|j                          |j                          y # t        $ r t        j                  d       Y y w xY w)Nr   z`PyQt not installed. GUI not available. Please check that the PyQt package is installed. Exiting.)gtkWindowMessageDialogDIALOG_MODALDIALOG_DESTROY_WITH_PARENTMESSAGE_WARNING
BUTTONS_OKrundestroyImportErrorrB   rZ   )rh  rR   dialogs      r   no_qt_message_gtkrs    s    
vJJL""1c&6&69W9W&W#&#6#6 $FG 	

 v		tuvs   A4A7 7BBc                      t         j                  st        j                  d       yt	        j
                  d      st        j                  d       yt               st        j                  d       yy)NGUI mode disabled in build.FDISPLAYNo display found.z Qt/PyQt 3 initialization failed.T)rS   	gui_buildrB   warnr1   r/  checkPyQtImportr   r   r   canEnterGUIModer{    sN    >>./YYy!$%34r   c                     t         j                  st        j                  d       yt	        j
                  d      st        j                  d       y	 t                y# t        $ r} t        j                  |        Y d } ~ yd } ~ ww xY w)Nru  Frv  rw  T)rS   rx  rB   ry  r1   r/  checkPyQtImport45rq  )es    r   canEnterGUIMode4r    se    >>./YYy!$%	
 	  	HHQK	s   
A 	B'BBc                     	 dd l } dd l}t        | j                         j                  d      d         }|t        k  rt        j                  d       y	 | j                  }|j                  d      dk  r|d	z  }|j                  d      dk  r|j                  d      \  }}}|j!                  d
      dk\  rt        j#                  d       y	 t        |      }t        |      }t        |      }|t&        k  s|t&        k(  r\|t(        k  rSt        j                  d|||fz         t        j                  dt&        t(        fz         t        j                  d       yy# t        $ rL t        j                  d      rt        j                  d      r
t                t        j                  d       Y yw xY w# t        $ r | j                  }Y nw xY w# t$        $ r	 d\  }}}Y w xY w)Nr   rv  STARTED_FROM_MENUz/PyQt not installed. GUI not available. Exiting.FrQ   zBIncorrect version of Qt installed. Ver. 3.0.0 or greater required.r$   z.0snapshotz3A non-stable snapshot version of PyQt is installed.)r   r   r   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)qtuirq  r1   r/  rs  rB   rZ   r   qVersionr:   MINIMUM_QT_MAJOR_VERPYQT_VERSION_STRAttributeErrorPYQT_VERSIONcountfindwarningr   MINIMUM_PYQT_MAJOR_VERMINIMUM_PYQT_MINOR_VER)r  r  qtMajorpyqtVersionmaj_vermin_verpat_vers          r   rz  rz    s    "++-%%c*1-.G%%		VW&)) 

C
 1
$t 

C
 1
$ #."3"3C"8Wgw
#q(IJ  	0'lG'lG'lG ++..7=S3SIIu  zA  CJ  LS  yT  T  UII\`v  yO  `P  P  QIImnW  99YBII.A$B		CD$  &oo&  	0(/%GWg	0s6   E F7 !G AF43F47GGG%$G%c                  n    	 dd l } dd l}t        j                  d       y# t        $ r dd l}dd l}Y yw xY w)Nr   zgHPLIP is not installed properly or is installed without graphical support. Please reinstall HPLIP againFT)PyQt4ui4rB   rC   rq  PyQt5ui5)r  r  r  r  s       r   checkPyQtImport4r    s;    
 			{|   s     44)Templatec                       e Zd ZdZd Zd Zy)	_multimapzHelper class for combining multiple mappings.

        Used by .{safe_,}substitute() to combine the mapping and keyword
        arguments.
        c                      || _         || _        y r   )_primary
_secondary)r   primary	secondarys      r   r   z_multimap.__init__1  s    #DM'DOr   c                 ^    	 | j                   |   S # t        $ r | j                  |   cY S w xY wr   )r  KeyErrorr  r   keys     r   __getitem__z_multimap.__getitem__5  s4    ,}}S)) ,s++,s    ,,N)r   r   r   __doc__r   r  r   r   r   r  r  +  s    	
	(	,r   r  c                   "     e Zd ZdZ fdZ x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                 @   t         t        |   |||       d|v r| j                  }n=t        j                  t	        j
                  | j                        | j                  dz  }t	        j                  |t        j                  t        j                  z        | _        y )Nr   )delimid)superr  r   r   r6   escape	delimiter	idpatterncompile
IGNORECASEVERBOSE)clsrD   basesdctr   r   s        r   r   z_TemplateMetaclass.__init__F  su    $c3D%EC++,44 ii6!mm8  **Wbmmbjj.HICKr   )r   r   r   r   r   __classcell__)r   s   @r   r  r  <  s    		J 		Jr   r  c                   4    e Zd ZdZeZdZdZd Zd Z	d Z
d Zy)	r  z.A string class for supporting $-substitutions.$z[_a-z][_a-z0-9]*c                     || _         y r   )template)r   r  s     r   r   zTemplate.__init__\  s	    $DMr   c                     |j                  d      }| j                  d | j                  d      }|sd}d}n+|t        dj	                  |d d             z
  }t        |      }t        d||fz        )NinvalidTr   r+   r  z.Invalid placeholder in string: line %d, col %d)startr  
splitlinesrg   rY   r   )r   mor   r   colnolinenos         r   _invalidzTemplate._invalid`  s{    #AMM"1%006ECcr
 344UM$e_- . .r   c                      t        |      dkD  rt        d      |s|n|rt        ||d         n|d    fd} j                  j	                  | j
                        S )Nr   Too many positional argumentsr   c                    | j                  d      xs | j                  d      }|
|   }d|z  S | j                  d      j                  S | j                  d      j                  |        t        dj                        )Nnamedbracedr  escapedr  #Unrecognized named group in pattern)groupr  r  r   r   )r  r  r  mappingr   s      r   convertz$Template.substitute.<locals>.convertv  s    )?RXXh-?$!%.C  #:%88I&2>>)88I&2MM"% !F!%/ /r   rg   	TypeErrorr  r   subr  r   argskwsr  r  s   `   @r   
substitutezTemplate.substitutel  s`    4y1} ?@@#Ca1q'/ <<##GT]];;r   c                      t        |      dkD  rt        d      |s|n|rt        ||d         n|d    fd} j                  j	                  | j
                        S )Nr   r  r   c                    | j                  d      }|		 d|   z  S | j                  d      }|		 d|   z  S | j                  d      j                  S | j                  d      j                  S t        dj                        # t        $ r j                  |z   cY S w xY w# t        $ r j                  dz   |z   dz   cY S w xY w)	Nr  r  r  {}r  r  r  )r  r  r  r   r   )r  r  r  r  r   s      r   r  z)Template.safe_substitute.<locals>.convert  s    )$6  $gen44 (+%C#gfo55 88I&2>>)88I&2>>) !F!%/ / $ 6#~~556 $ C#~~3f<sBBCs"   B
 B( 
B%$B%(C	C	r  r  s   `   @r   safe_substitutezTemplate.safe_substitute  s`    4y1} ?@@#Ca1q'/* <<##GT]];;r   N)r   r   r   r  r  __metaclass__r  r  r   r  r  r  r   r   r   r  r  U  s(    <*	'		%
	.	<6	<r   r  c                 D   t        j                  d      j                  j                         }d|v r|d= t        j                  d      j                  j                         }d|v r|d=  t        |       j                  t        j                  d      j                  fi |S )Nr   r   )sys	_getframe	f_globalscopyf_localsr  r  )r   globalslocalss      r   catr    s    mmA((--/GFO]]1&&++-F6N!8A;!!#--"2"<"<GGGr   r   zutf-8c                 6    | j                  t        t              S r   )rc   identityunprintabler   s    r   	printabler    s    ;;x--r   c                     | S r   r   r   s    r   r   r         Q r   c                 &    | D ]  } ||      s y y)NTFr   SrK   r   s      r   anyr    s     Q4r   c                     | S r   r   r   s    r   r   r     r  r   c                 &    | D ]  } ||      r y y)NFTr   r  s      r   allr    s     "tE"r   )firefoxmozilla	konquerorepiphany	skipstonez-new-tabz	--new-tabc                      t         rt        j                         dk(  ryt        d      ryt        D ]  } t        |       s| c S  y )NDarwinr-   xdg-open)platform_availplatformsystemr6  BROWSERS)bs    r   find_browserr    sA    (//+x7	z	 	AQx	 r   c                    t         r2t        j                         dk(  rd| z  }t        j                  |       y t        d      rd| z  }t        j                  |       y t        D ]E  }t        |d      }|s|r|dt        |   d| d	}n|d| d	}t        j                  |        y  t        j                  d
| z         y )Nr  z	open "%s"r  zxdg-open "%s"True)r1  r,   z "z" &zUnable to open URL: %s)
r  r  r  r   executer6  r  BROWSER_OPTSrB   ry  )urluse_browser_optscmdr  bbs        r   openURLr    s    (//+x7C	z	# 
	5Aq62B#02LOSIC-/5C  %
	5 HH-34r   c                 v    g }| D cg c]%  }|j                  |      r|j                  |      ' c} |S c c}w r   )r  r   )inputtempr   s      r   
uniqueListr    s1    D"8$**Q-T[[^8K 9s   66c                       fd}n fd}t        dt                     D ]"  } ||      s |    |dz
     c |dz
  <    |<   $ y )Nc                     |    k(  S r   r   r   lms    r   r   zlist_move_up.<locals>.<lambda>      adai r   c                      |          S r   r   r   cmpr  r  s    r   r   zlist_move_up.<locals>.<lambda>      c!A$l r   r   r   rg   r  r  r  rK   r   s   ```  r   list_move_upr    sV    
{"1c!f (Q4Q41Q3LAacFAaD(r   c                       fd}n fd}t        t               dz
  dd      D ]"  } ||      s |dz       |   c |<    |dz   <   $ y )Nc                     |    k(  S r   r   r  s    r   r   z list_move_down.<locals>.<lambda>  r  r   c                      |          S r   r   r  s    r   r   z list_move_down.<locals>.<lambda>	  r  r   r$   r  r   r  r  s   ```  r   list_move_downr    s\    
{"3q6!8R$ (Q4QqS61Q4LAaD!AaC&(r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)XMLToDictParserc                 .    g | _         i | _        d| _        y Nr+   )r   r   
last_startr   s    r   r   zXMLToDictParser.__init__  s    
	r   c                    | j                   j                  t        |      j                                t        |      j                         | _        t        |      rh|D ]b  }| j                   j                  t        |      j                                | j                  ||          | j                   j                          d y y r   )r   r   r   r   r!  rg   addDatart   )r   rD   attrsas       r   startElementzXMLToDictParser.startElement  s    

*T*0023$T*002u: !

!!*Q-"5"5"78U1X&

 ! r   c                     |j                         | j                  k(  r| j                  d       | j                  j	                          y r   )r   r!  r#  r   rt   r   rD   s     r   
endElementzXMLToDictParser.endElement"  s0    ::<4??*LL 	

r   c                 x    t        |      j                         }|r| j                  r| j                  |       y y y r   )r   stripr   r#  )r   r   s     r   charDatazXMLToDictParser.charData)  s1    $%%'DJJLL 4r   c           
         d| _         	 t        |      }dj	                  | j
                        }dj	                  |dg      }	 | j                  |    | j                  |   | j                  |<   || j                  dj	                  |dg      <   | j                  |= y # t        $ r t        |      }Y w xY w# t        $ r 	 | j                  |    d}	 	 | j                  dj	                  |t        |      g          n9# t        $ r- || j                  dj	                  |t        |      g      <   Y Y y w xY w|dz  }j# t        $ r || j                  |<   Y Y y w xY ww xY w)Nr+   -r|   rx   r$   r   )r!  r   r   r   rY   r   r   r  )r   r   	stack_strstack_str_0js        r   r#  zXMLToDictParser.addData/  sZ   	$t9D HHTZZ(	hh	3/0	%IIi " &*YYy%9DIIk"48DIIchh	3/01		)$5  	$d#D	$  			+& 		#((Iz!}+E"FG# JN		#((Iz!}+E"FG FA 	  ,'+		)$,	se   B B6 B32B36	E D<E)C=<E=2D3/E2D33	E<EEEEc                    t         ret        j                         }| j                  |_        | j
                  |_        | j                  |_        |j                  |d       | j                  S t        j                  d       | j                  S NTzRFailed to import expat module , check python-xml/python3-xml package installation.)xml_expat_availexpatParserCreater&  StartElementHandlerr)  EndElementHandlerr,  CharacterDataHandlerParserB   rZ   r   )r   r   parsers      r   parseXMLzXMLToDictParser.parseXMLQ  sl    '')F)-):):F&'+F$*.--F'LLt$
 yy IIjkyyr   N)	r   r   r   r   r&  r)  r,  r#  r<  r   r   r   r  r    s!    
	!%Dr   r  c                   <    e Zd Zd Zd Zd Zd Zd	dZd
dZddZ	y)Elementc                 <    || _         || _        d| _        g | _        y r   )rD   
attributeschardatachildren)r   rD   r@  s      r   r   zElement.__init__b  s    	$r   c                 :    | j                   j                  |       y r   )rB  r   )r   elements     r   AddChildzElement.AddChildh  s    W%r   c                 8    | j                   j                  |      S r   )r@  r   r  s     r   getAttributezElement.getAttributek  s    ""3''r   c                     | j                   S r   )rA  r   s    r   getDatazElement.getDatan  s    }}r   Nc                     |r|j                   }n| j                   }|s| j                   S g }|D ]L  }|j                  |k(  r|j                  |       | j                  ||      }|D ]  }|j                  |        N |S r   )rB  rD   r   getElementsByTagName)r   rD   ElementNodeChildren_listelementsrD  rec_elementsr%  s           r   rK  zElement.getElementsByTagNameq  s    '00M MMM== H( '<<4'OOG,#88$wG% 'AOOA&'' Or   c                     |s| j                   S g }| j                   D ]#  }|j                  |k(  s|j                  |       % |S r   )rB  rD   r   )r   rD   rN  rD  s       r   getChildElementszElement.getChildElements  sF    == H== -<<4'OOG,- Or   c                    d|z  }|d| j                   z  z  }| j                  D ]  }|d|d| j                  |   dz  } d}| j                  D ]  }||j                  |dz         z  } |dk(  r7| j                  r$|d| j                  z   d| j                   z  z   z  }|S |d	z  }|S |d|z   d| j                   z  z   z  }|S )
Nr,   z<%sz="rr   r+   r   >z</%s>z/>)rD   r@  rB  toStringrA  )r   levelretval	attributecchilds         r   rT  zElement.toString  s    u%$))## 	MIi1KLLF	M]] 	)Ea((A	)7}}#dmm+w/BCC
  $  cAg499!455Fr   )r+   N)r+   r   )
r   r   r   r   rE  rG  rI  rK  rQ  rT  r   r   r   r>  r>  a  s%    &($r   r>  c                   *    e Zd Zd Zd Zd Zd Zd Zy)extendedExpatc                      d | _         g | _        y r   )r*   	nodeStackr   s    r   r   zextendedExpat.__init__  s    	r   c                     t        ||      }t        | j                        dkD  r!| j                  d   }|j                  |       n|| _        | j                  j                  |       y )Nr   r  )r>  rg   r^  rE  r*   r   )r   rD   r@  rD  parents        r   StartElement_EEzextendedExpat.StartElement_EE  sR    $
+t~~"^^B'FOOG$DIg&r   c                 ,    | j                   d d | _         y Nr  )r^  r(  s     r   EndElement_EEzextendedExpat.EndElement_EE  s    ,r   c                 R    |r%| j                   d   }|xj                  |z  c_        y y rc  )r^  rA  )r   r   rD  s      r   charData_EEzextendedExpat.charData_EE  s,    nnR(G$ r   c                    t         ret        j                         }| j                  |_        | j
                  |_        | j                  |_        |j                  |d       | j                  S t        j                  d       | j                  S r3  )r4  r5  r6  ra  r7  rd  r8  rf  r9  r:  rB   rZ   r*   )r   	xmlStringParsers      r   r:  zextendedExpat.Parse  sp    '')F)-)=)=F&'+'9'9F$*.*:*:F'LLD) yy IIjkyyr   N)r   r   r   r   ra  rd  rf  r:  r   r   r   r\  r\    s    '-r   r\  c                 *    dj                  d| dg      S )Nr+   rr   )rY   r   s    r   dquoterk    s    77CC=!!r   ic           
      z    d}t        | t        t        t        |                         D ]  \  }}||vs n | |d  S r   )zipr   r   rg   )r   charsr   rX  s       r   xlstripro    sE    4c!f./ 	DAq~	 ur   c                 >    t        t        t        |       |            S r   xreversero  r   rn  s     r   xrstriprt    s    U344r   c                 Z    t        |       }|j                          dj                  |      S r   )r   reverserY   )r   r  s     r   rr  rr    s"    G			wwqzr   c           
      R    t        t        t        t        | |            |            S r   rq  rs  s     r   xstriprx    s     E): ;UCDDr   c                      t         r#t        t        j                         d   d d       S t	        j
                  d      dz  S )Nr   Pr%   )r  r   r  architecturestructcalcsizer   r   r   
getBitnessr    s9    8((*1-cr233s#q((r   c                  t    t         r2t        j                         j                  dd      j	                         S y)Nr,   _i686)r  r  machiner9   r   r   r   r   getProcessorr    s-    !))#s399;;r   c                  @    t         j                  dk(  rt        S t        S )Nbig)r  	byteorder
BIG_ENDIANLITTLE_ENDIANr   r   r   	getEndianr    s    
}}r   c                    dd l }|j                         }d}|rd| v sd| v rt        j                         dk7  rq|j	                         }t
        j                  d| d|d       |dk(  r@|j                  |d      }	|j	                         }t
        j                  d|z         |	dk(  ry		 t        j                  | |
      }
	 d}	 |r
t                	 |
j                  t              }|
j                  r|ro|t        vrgt
        j                  d|z         	 t!        j"                  |t         j$                        }t        j'                  |       t        j'                  |       	 |j+                  |
j                         |rt
        j                  |
j                         |dk(  rnR|dk(  r|dk(  r|
j-                  d       n3|st        d      |
j-                  |j                  ||             |dz  }4	 |r
t1                	 |
j3                          |
j4                  |j7                         fS # t        j                  $ r
}Y d }~yd }~ww xY w# t        $ r Y w xY w# t(        $ r t        j'                  |       Y  w xY w# t        $ r Y w xY w# t        $ r"}t
        j/                  d|z         Y d }~d }~ww xY w# t        j                  $ r
}Y d }~d }~ww xY w)Nr   r+   susudozcmd = z pwd_prompt_str = []zpwd_prompt_str2 = [%s])   r+   )timeout)r  r+   zAdding %s to EXPECT LISTr   r$   YESz.password Object(i.e. passwordObj) is not validzException: %s)ior   r1   rU   getPasswordPromptStringrB   rC   getPasswordr#   spawnuExceptionPexpectupdate_spinnerexpectEXPECT_LIST	Exceptionbeforer6   r  Ir   r  writesendlinerZ   cleanup_spinnerr=   
exitstatusgetvalue)r  passwordObjpswd_msg
log_outputspinnerr  r  outputpwd_prompt_strpasswdrY  r~  pswd_queried_cntr   r4  s                  r   ro  ro    s   [[]FNv}"**,!:K$<<>		CHIR ,,Xq9F(@@BNII.?@|sG4.' LL- ||!nK&GII8GH;JJ~rtt< $**1-#**>:LL.!		%,,/ Avaau% ##$TUU{66xAQRS A% S 8 " 
 V__...u ##    % ;#**>:; ! &  '		/A%&&' ## s   *H3 J I '.J $I# :*J %<J !AJ K 3II	I J I  J #JJ JJ 	JJ JJ 	K J==KK"K"c           
         g }| j                  t        d            D ]e  }|j                         }|j                  d      }t        |      dk(  r!|d   j	                  t        d            }|d   t        |      d |d<   |d   r|d   st        d|z         |d   t        d	      k(  st        |d   d         d	k7  r|d
z  }nK|D cg c]  }t        |       }}|d   |d   kD  rt        d|z         |t        d      t        |      z  z  }|D cg c]  }t        |d       }}|d   |d   kD  rt        d|z         t        |d   |d   dz         D ]  }|j                  ||z          U|j                  |       h t        t        t        |      D cg c]	  \  }}||f c}}      j                               }|D cg c]  }|st        |       }}|j                          |S c c}w c c}w c c}}w c c}w )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]
    ,r.  r$   r   
0123456789Nr   zempty range: r|   z%dzwide range: z%%0%dd
   zbad range: )r:   r   r+  rg   rstripr   r   r   r   r   r   dict	enumeratekeysr  )nsfsr}   rhr   rR   r   s           r   expand_ranger  N  s    
BXXjo& GGIGGCLq6Q;!J|45AQ4A=AaDaDQqT 1!455tz#&*QqT!W*=*DT	%&'SV''Q4!A$;#NQ$677Z)CF22%&'Q'A'tad{ 1221Q41a( !		!a% ! IIaL16 
dy}5tq!QF56;;=	>B	"Q#a&	"B	"GGII' (
 ( 6	"s   	G3G8G=
HHc                 D   | syt        | d         g| d   d}}}| dd D ]P  }||dz   k(  rd}nA|r"|j                  t        d      ||fz         d}n|j                  t        d      |z         |}R |r|j                  t        d	      z         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)rs   r   r   rY   )r   r   rX  r  r   s        r   collapse_ranger  x  s    
 1Q4yk1Q4!qAqrU 
1:AH-156E*Q./
 		E"Q&'771:r   c                    |t        j                         }d}t        |ddddd       D ]`  }t         j                  j	                  |      \  }}|j                  |       s7||k(  s=	 t        |t        |       d        }t        ||      }b t         j                  j                  |d| ||dz   |fz        S # t        $ r Y w xY wNr   Fr   )r   r   r   r   rV   z%s%0*d%sr   r1   getcwdr   rV   splitext
startswithr   rg   r   r   rY   	r   extr]   digitsr  rK   r  r~  r   s	            r   createBBSequencedFilenamer        
{iik	AsEU5Z]dhi 	ww"1<<!cQh#h-.)* 1I	 77<<Z8VQqS#*FFGG     (B77	CCc                    |t        j                         }d}t        |ddddd       D ]`  }t         j                  j	                  |      \  }}|j                  |       s7||k(  s=	 t        |t        |       d        }t        ||      }b t         j                  j                  |d| ||dz   |fz        S # t        $ r Y w xY wr  r  r  s	            r   createSequencedFilenamer    r  r  c                     | t        j                         }|S | j                         j                         } t	        t
        j                               D ]  \  }}| |v s |S  d}t        j                  d|z         |S )Nen_USz)Unknown lang/locale. Using default of %s.)	r   getSystemLocaler   r+  r   supported_localesr  rB   ry  )langloclls      r   validate_languager    s    |&&( J zz|!!#-3356 	HGCrz
 J	H CHH@3FGJr   c                      	 dd l } t        | j                               S # t        $ rG t	        d      }|r7t
        j                  j                  |d      }t        j                  |      cY S Y yw xY w)Nr   uuidgenr+   )
uuidrs   uuid4rq  r6  r1   rV   rY   r   	getoutput)r  r  s     r   gen_random_uuidr    s_    
4::<   	"ggll7I6G''00s    AA/.A/c                        e Zd ZddZd Zd Zy)RestTableFormatterNc                      || _         g | _        y r   )headerrows)r   r  s     r   r   zRestTableFormatter.__init__  s    	r   c                 :    | j                   j                  |       y r   )r  r   )r   row_datas     r   addzRestTableFormatter.add  s    		"r   c                    | j                   rt        | j                   d         }| j                   D ]*  }t        |      |k7  st        j                  d|z          y  t        | j                        |k7  rt        j                  d       g }t        | j                        D ]M  \  }}t        |      }| j                   D ]  }t        |t        ||               } |j                  |dz          O d}|D ]  }dj                  |d|dz   z  dg      } dj                  |dg      }|j                  |       | j                  rd	}t        |      D ]G  \  }}dj                  |d
| j                  |   d
|dz   t        | j                  |         z
  z  d	g      }I dj                  |dg      }|j                  |       d}|D ]  }dj                  |d|dz   z  dg      } dj                  |dg      }|j                  |       t        | j                         D ]  \  }	}d	}t        |      D ]M  \  }}dj                  |d
| j                   |	   |   d
|dz   t        | j                   |	   |         z
  z  d	g      }O dj                  |dg      }|j                  |       d}|D ]  }dj                  |d|dz   z  dg      } dj                  |dg      }|j                  |        y t        j                  d       y )Nr   z"Invalid number of items in row: %sz"Invalid number of items in header.r$   +r+   r.  r   |r,   r   =zNo data rows)
r  rg   rB   rZ   r  r  r   r   rY   r  )
r   rR   num_colsr  
col_widthsr   rX  	max_widthr   r1  s
             r   r  zRestTableFormatter.output  s   99499Q<(HYY q6X%IIBQFG
 4;;8+		>?J!$++. /1F	 :A #Is1Q4y 9I: !!)A+./ A 3GGQqsS123 D	"AGGAJ {{%j1 `DAqCQ!CTUDW@W9XZ] ^_A` GGQI&
# 7AC1Q3K 56A7 GGQI&
 "$)), 1%j1 bDAqC1a#1SSTVWEYAY:Z\_ `aAb GGQI&
# 7AC1Q3K 56A7 GGQI&
  IIn%r   r   )r   r   r   r   r  r  r   r   r   r  r    s    #;&r   r  c                    dd l }|j                         d   d   j                  }d|vrt        d      | j                  j                         }|j                  dd        |j                  dd        |j                  |       y )Nr   r   r   z(Must call mixin() from within class def.r  )inspectr   r  r  __dict__r  rt   update)r  r  r  r  s       r   mixinr    sn    ]]_Q"++F6!BCC<<DHHYHH\4 
MM$r   )z	[OPTIONS]r+   headingF)zSet the logging level:z-l<level> or --logging=<level>optionF)r+   z5<level>: none, info\*, error, warn, debug (\*default)r  F)zRun in debug mode:z-g (same as option: -ldebug)r  F)zOutput plain text only:z-tr  F)z[PRINTER|DEVICE-URI]r+   r  F)z	[PRINTER]r+   r  F)zTo specify a device-URI:z'-d<device-uri> or --device=<device-uri>r  F)zTo specify a CUPS printer:z"-p<printer> or --printer=<printer>r  F)z'Bus to probe (if device not specified):z-b<bus> or --bus=<bus>r  F)r+   zf<bus>: cups\*, usb\*, net, bt, fw, par\* (\*defaults) (Note: bt and fw not supported in this release.)r  F)zThis help information:z-h or --helpr  T)r+   r+   spaceF)z	Examples:r+   r  F)zNotes:r+   r  F)znIf device or printer is not specified, the local device bus is probed and the program enters interactive mode.r+   noteF)z<If -p\* is specified, the default CUPS printer will be used.r+   r  F)z	See Also:r+   r  F)Set the language:za--loc=<lang> or --lang=<lang>. Use --loc=? or --lang=? to see a list of available language codes.r  F)r  zF--lang=<lang>. Use --lang=? to see a list of available language codes.r  F)z[MODE]r+   r  F)zRun in non-interactive mode:z-n or --non-interactiver  F)zRun in graphical UI mode:z-u or --gui (Default)r  F)zRun in interactive mode:z-i or --interactiver  F	configurez
ui-toolkitqt3)Use Qt3:z--qt3 (Default)r  F)Use Qt4:z--qt4r  F)Use Qt5:z--qt5r  Fqt4)r  z--qt3r  F)r  z--qt4 (Default)r  Fqt5)r  z--qt5 (Default)r  Fc                  ^   t        j                  d      j                         d   } d d d}| j                  d      D ]7  }|j                         }t	        |      dk(  s"|d   ||d   <   |d   ||d   <   9 	 t        |d         t        |d         }}||fS # t        $ r d	\  }}Y ||fS w xY w)
Nzstty -ar   )r  r   r   r$   r   r  r   )   P   )r   r  r  r:   rg   r   r  )ln1valsphr   r  colss         r   ttysizer  T  s    


y
)
4
4
6q
9C4(Diin HHJq6Q;1D1J1D1J	
f&DO(<d :  
d:s   8B B,+B,c                     t               \  }}| r| }||z
  dz
  }nt        |dz        dz
  }||z
  dz
  }t        |dd|ddf      S )N   r%   r$   )r   r   )r  r   r   )overrider  r  col1col2s        r   usage_formatterr  d  sb    JD$d{Q4!8}q d{QDQ7&*q9< = =r   c                 0   |dk(  rt               }| D ]m  }|\  }}}	}
|j                  dd      }|j                  dd      }|	dk(  r>t        j                  t        j	                  |             t        j                  d       r|	dv r.t        j                  |       |
st        j                  d       |	dv r)t        j                  t        j	                  |             |	dv r(t        j                  |j                  ||f|
             |	dk(  rP|j                  d	      r(t        j                  d
|j                         z          ;t        j                  |       R|	dk(  sYt        j                  d       p t        j                  d       yP|dk(  rwd\  }}d\  }}d\  }}| D ]  }|\  }}}	}
|	dk(  r+t        t        |      |      }t        t        |      |      }:|	dk(  r+t        t        |      |      }t        t        |      |      }j|	dk(  spt        t        |      |      }t        t        |      |      } |dz  }|dz  }|dz  }|dz  }|dz  }|dz  }||z   }||z   }||z   }t        j                  d|d|d       |d|d|d}t        j                  |       t        j                  dt        |      z         t        j                  d       g }d}| D ]  }|\  }}}	}
|	dk(  r|j                  |       d|z  }t        |      t        |      }}|	dk(  r=t        j                  dj                  d|dg             t        j                  d       ~|	dv r@t        j                  d       t        j                  |       t        j                  d       |	dv rIt        j                  d       t        j                  d|z   dz          t        j                  d       d}|	dk(  r=|r[t        j                  d       t        j                  d       t        j                  dj                  dd |z  dd |z  dg             d}|r@d!|vr<t        j                  dj                  d"|d#d	||z
  d$z
  z  d%|d	||z
  z  d%g             nm|r8t        j                  dj                  d%|d	||z
  z  d%|d	||z
  z  d%g             n3t        j                  dj                  d%d	|z  d%|d	||z
  z  d%g             t        j                  dj                  dd |z  dd |z  dg             R|	dk(  r=|r[t        j                  d       t        j                  d       t        j                  dj                  dd |z  dd |z  dg             d}|r@d!|vr<t        j                  dj                  d"|d#d	||z
  d$z
  z  d%|d	||z
  z  d%g             nm|r8t        j                  dj                  d%|d	||z
  z  d%|d	||z
  z  d%g             n3t        j                  dj                  d%d	|z  d%|d	||z
  z  d%g             t        j                  dj                  dd |z  dd |z  dg             |	dk(  r!|sd!|vst        j                  |       |	dk(  r|r[t        j                  d       t        j                  d       t        j                  dj                  dd |z  dd |z  dg             d}|j                  d	      r-t        j                  dj                  d%d	|d&z   z  d%g             t        j                  dj                  d%|d	||z
  d&z   z  d%g             t        j                  dj                  dd |z  dd |z  dg             |	dk(  st        j                  d        |D ].  }t        j                  d'|d(|j                  d)d      d*       0 t        j                  d       yP|d+k(  rt        j                  d,|d-|d.       t        j                  d/|d0|       | D ]W  }|\  }}}	}
|j                  d1d#      }|j                  d1d#      }t        |      t        |      }}|	dk(  r>t        j                  d2       t        j                  d3|j                  d4d      z         |	d5k(  r|st        j                  d6|z         |	d7v r4|rt        j                  d8|d9|       t        j                  |       |	d:v rXt        j                  d;|j                         j                  d<d      j                  d=d      j                  d>d      z         =|	d?v sCt        j                  |       Z t        j                  d@       t        j                  dA       t        j                  dB       t        j                  dC       t        j                  dD       t        j                  dE       t        j                  dF       t        j                  dG       t        j                  dH       t        j                  dI       t        j                  dJ       t        j                  dK       t        j                  dL       t        j                  dM       t        j                  dN       t        j                  dO       t        j                  d       yPyP)Qz
    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+   summary)pararD   seealso)r  r  )r  exampler  r,   	r  rest)r   r   r  r     zrestindex
page-title: z
crumb: z=
format: rest
file-extension: html
encoding: utf8
/restindex
z: z (ver. r  r  Fr  z`%s`_z**)r  rD   Tz.. class:: borderlessr  r.  z`_z| *r   r%   r  r   z
.. _`z`: zhp-z.html
manz.TH "z" 1 "z" Linux "User Manuals"z
.SH NAME\nz \- z\*z.SH SYNOPSISz.B %szUsage:rD   z.SH DESCRIPTION
%s)r  r  r  z.IP "z"
)r  r  z.SH %sr.  [r  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-18 HP Development Company, L.P.z.LP0This software comes with ABSOLUTELY NO WARRANTY.;This is free software, and you are welcome to distribute it<under certain conditions. See COPYING file for more details.N)r  r9   rB   infoboldr   r  lstripr   rg   r   rY   upper)	text_listtyptitlecrumbversion	formatterr   text1text2r  trailing_spaceopt_colwidth1opt_colwidth2exmpl_colwidth1exmpl_colwidth2note_colwidth1note_colwidth2opt_tablewidthexmpl_tablewidthnote_tablewidthry   linksneeds_headerlen1len2r  s                             r   format_textr+  r  s	    f}#%	 	D370E5&. MM$+EMM$+E"%)66!HHRL00%)00**E5>>JK6!##C(HHTELLN23HHUO7"=	@ 	 
'+$}+/()-& 	AD370E5&.(" #CJ > #CJ >9$"%c%j/"B"%c%j/"B6!!$SZ!@!$SZ!@	A 	11!!&6*_<(>9 	 %! 	" #(8SV L	D370E5&."U#%USZ$D"$t!456++00,-#8#HH45HHRLHHRWWc3}+<c3}CTVY%Z[\#(LT.HHRWWeUCmD>PQR>R9SUXZ_adfstxfxay{~%  A  BHHRWWc5#}T7I2JCQVX[]jko]oXpru%vwxHHRWWc3+>UCQ^_cQcLdfi%jkl#s='8#s=?PRU!VWX9$HH45HHRLHHRWWc3+>SEXZ]%^_`#(LT.HHRWWeUCod>RST>T9UWZ\acfhwx|h|c}  @C  &D  E  FHHRWWc5#t7K2LcSXZ]_nos_sZtvy%z{|HHRWWc3+@#ucSbcgSgNhjm%nop#s?':C_ATVY!Z[\9$T.HHUO 6!HH45HHRLHHRWWc3~+=sCDVX[%\]^#(L##C(HHRWWc30A+BC%HIJ#uc?43G3I.JC!PQR#s>'93N@RTW!XYZ7"YL	\  	JAHH199UB3GHI	J 		5'JK%78 	 D370E5&.MM%-EMM%-EUSZ$D"(5==2#>>?6!HH2U:;88HHue<=HHUO00EKKM$9$9#r$B$J$J3PR$S$[$[\_ac$ddeO,5	 8 	>?PQ?@%&/01234QR*+!EFCDNOOPg 
r   c                 L   t         j                  d       |r:t         j                  t         j                  dt        j                  z               n(t         j                  t         j                  d             t         j                  t         j                  | d|             t         j                  d       t         j                  d       t         j                  d       t         j                  d       t         j                  d       t         j                  d       y )	Nr+   z.HP Linux Imaging and Printing System (ver. %s)z$HP Linux Imaging and Printing Systemz ver. z0Copyright (c) 2001-18 HP Development Company, LPr  r  r  )rB   r  r  rS   r  )program_namer  show_vers      r   	log_titler/  V  s    HHRLJT\\YZ[@ABHHSXXlG<=>HHRLHH?@HH?@HHJKHHKLHHRLr   c                 `    dt        j                  |      z   }t        j                  |||       S )Nz(?i))r6   r  r  )oldsearchr9   regexs       r   ireplacer4  g  s(    RYYv&&E66%#&&r   c                 6    d }t        j                  d||       S )Nc                 (   | j                  d      }|d d dk(  r8	 |d d dk(  rt        t        |dd d            S t        t        |dd             S 	 t        t        j
                  |dd          }|S # t        $ r Y |S w xY w# t        $ r Y |S w xY w)	Nr   r$   z&#r%   z&#xr  r   r   )r  chrr   r   r   name2codepointr  )r  r   s     r   fixupzunescape.<locals>.fixupp  s    wwqz8t8u$s4":r233 s4"://
=77Qr
CD      s(   A4 A4 B 4	B B	BBz&#?\w+;)r6   r  )r   r9  s     r   unescaper:  o  s    * 66*eT**r   c                    t        | t              st        |       } | j                  dd      } t        j
                  D ]7  }|dk7  s	| j                  t        |      dt        j
                  |   z        } 9 t        t        d            t        t        dd            z   D ]   }| j                  t        |      d|z        } " | S )	N&z&amp;&   z&%s;    r     z&#%d;)	r~   rs   r   r9   r   codepoint2namer7  r   r   )r   rX  s     r   r  r    s    aqM			#wA)) L9		#a&&=+G+G+J"JKAL %+eD$&7!88 +IIc!fgk*+ Hr   c                  v    g d} d }| D ]-  }t        |      s|dz   }t        j                  d|z          |S  |S )N)zgnome-terminalkonsolezx-terminal-emulatorxtermgtktermz -e zAvailable Terminal = %s )r6  rB   rC   )terminal_listterminal_cmdr  s      r   get_terminalrG    sN    YML :;LII0,>? r   c                    |dk(  s|d k(  s
| dk(  s| d k(  rt         j                  d       y| j                  d      }|j                  d      }t         j                  d| d|       d}d}t        j                  d      }	 |t        |      k  r|t        |      k  rd}d	}d}	d	}
|j                  ||         rPt        |j                  ||         j                  d
            }|j                  ||         j                  d      }nt        ||         }|j                  ||         rPt        |j                  ||         j                  d
            }	|j                  ||         j                  d      }
nt        ||         }	||	k  rd}n||	kD  rt         j                  d       y|j                         |
j                         k  rd}nZ|j                         |
j                         kD  rt         j                  d       y|d
z  }|t        |      k  r|t        |      k  r|du rt        |      t        |      k  rd}|S #  t         j                  dt        z         Y yxY w)Nr+   zavailable_version is ''FrQ   zHPLIP Installed_version=z  Available_version=r   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.)rB   rC   r:   r6   r  rg   r2  r   r  r   rZ   HPLIP_WEB_SITE)installed_versionavailable_versioninstalled_arrayavailable_arraycntIs_olderr   installed_ver_diginstalled_ver_alphavailable_ver_digavailable_ver_alphs              r   Is_HPLIP_older_versionrT    sl   B"3t";?PTV?VZkosZs		+,%++C0O%++C0OIIBSTefg
CH


-.C*3''C_1E,E""zz/#./$'

?33G(H(N(Nq(Q$R!%(ZZ0D%E%K%KA%N"$'(<$=!zz/#./$'

?33G(H(N(Nq(Q$R!%(ZZ0D%E%K%KA%N"$'(<$=!!$55#&77		<= ',,.1C1I1I1KK#H(..03E3K3K3MMII@A 1HCC 3''C_1E,EH u_!5O8L!LH O			s  uC  C  	Ds    D,I /AI 
!I -I I,c                 "   t        | |z  dz  |z        }| dk7  rt        j                  j                  d       t        j                  j                  dt        j                  d|z  d      z         t        j                  j                          y )Nd   r   zr  z%2d%%r  )r   r  stdoutr  rB   colorflush)r  	blockSize	totalSizepercents       r   downLoad_statusr]    si    %	/#%i/0Gz

"JJTCIIggov>?@JJr   i    c                    | j                         rV| j                         j                  d      r7t        | j                         j                  d      j                               }nt        j                  d       d }d}	 | j                  |      }|sy |j                  |       |t        |      z  }|r
 ||d       @)NzContent-LengthzIgnoring progres barr   r   )	r  r   r   r+  rB   rC   r8   r  rg   )responseout_fd
chunk_size
status_bar
total_sizebytes_so_farchunks          r   chunk_writerf    s    mmo(--/--.>?++,<=CCEFz
yy'(z<	
mmJ'e	ll5c%j l		L!Z	0 
r   c                 *   d}| dk(  s| t         j                  d       |dfS |t               \  }}	 |du rct        d      }|rTt        j
                  j                  |d      }t        |d|d|       \  }}|rt         j                  d|z         |dfS d	}|r>	 t        j                  |       }t        |d
      }	t        ||	       |	j                          t        j
                  j#                  |      s t         j                  dt$        z         |dfS d|fS # t        j                  $ r&}
t         j                  d| z         |dfcY d }
~
S d }
~
ww xY w# t        $ r0}
t         j                  d|
j                   z         |dfcY d }
~
S d }
~
ww xY w)Nr  r+   zURL is emptyFwgetz6 --cache=off --tries=3 --timeout=60 --output-document=r,   z0Failed 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   )rB   rZ   r+  r6  r1   rV   rY   ro  r   urlopenr-   rf  r=   r
   URLErrorr.   strerrorrW   hplip_version_file)weburl
outputFile	useURLLIBretValuer?   rh  statusr  r_  file_fdr~  s              r   download_from_networkrt  
  s~   H|v~		.!|')J=Dww||D&1!$gkmwy  &A  "BIIPRXXY#R<' 	$*226:z40Hg. 77>>*%		CDVVW|j= !)) $		2V;<|#$  		/AJJ./|sN   A$E E =D E0EEE EE 	F"%FFFc                   $    e Zd Zd Zd Zd Zd Zy)	Sync_Lockc                 H    || _         t        | j                   d      | _        y )NrR   )Lock_filenamer-   handler)r   filenames     r   r   zSync_Lock.__init__;  s    %D..4r   c                 `    t        j                  | j                  t         j                         y r   )rE   rF   ry  rH   r   s    r   acquirezSync_Lock.acquire@      DLL%--0r   c                 `    t        j                  | j                  t         j                         y r   )rE   rF   ry  rN   r   s    r   releasezSync_Lock.releaseC  r}  r   c                 8    | j                   j                          y r   )ry  r=   r   s    r   __del__zSync_Lock.__del__F  s    r   N)r   r   r   r   r|  r  r  r   r   r   rv  rv  :  s    5
11r   rv  c                 0   t         st        j                  d       y t        j                  d       ||| ||||g}t        j                  dt
        d      } |j                  |ddi t               j                  |       t        j                  d       y )	NzFailed to import dbus, lowlevelzsend_message() entered/Event)rV   	interfacerD   	signaturessisisszsend_message() returning)	
dbus_availrB   rC   r   SignalMessageDBUS_SERVICEr   r   send_message)	
event_code
device_uriprinter_nameusernamejob_idr  	pipe_namer  msgs	            r   	sendEventr  I  sz    		34II&'j(FE9UD

 
 c\
PCCJJT**KS!II()r   c                 b    t        j                   |       }|rdj                  |      }||fS g dfS )Nr,   r+   )globrY   )File_exp	File_listFile_list_strs      r   expand_listr  V  s5    yy"9hhy)m%%Ulr   c                 F   d}d}	 | j                  d      dk7  r'| j                  dd      d   } | j                  d      sn|S >t        |       dk  r|S | |   dk(  r| }|S 	 |t        |       k  rd}| |   dk(  s| |   d	k(  s| |   d
k(  r |dz   }| |   dk(  r| |   d	k(  r| |   d
k(  r | |   d
k7  r3| |   d	k7  r+|dz  t	        | |   d      z   }|dz   }| |   d
k7  r	| |   d	k7  r+|dk(  r	 |S || |||z   dz    z   }||z   dz   }|t        |       k  r|S # t
        $ r Y |S w xY w)Nr   r+   r   

r  HTTP<r,   r   r   r$   )r  r:   r  rg   r   r;   )src_datar   dst_databuf_lens       r   unchunck_xml_datar  `  s   EH
==$*~~j!4Q7H&&v.O  8} #& O#	X&WE?c)Xe_-DQV[_H_axu E?c)Xe_-DQV[_H_E?d*x$/F "s8E?B'??waxu E?d*x$/F 1 O !(5q"AAXu_q(U X&  O  	O	s0   !5D D  D ):D $D ,$D 	D D c                 $   d}g }t        j                  d      }| rc|j                  |       rR|j                  |       j                  d      }t        j                  ddt        |            }|j                  d      }n|j                  d       t        j                  d|z         |j                  d	      }|j                  d
      }|D ]  }d}|D ]  }	||	k(  r||=  |dz  }  t        |      dk(  rd}d}
|D ]  }|
r|
dz  }
|
|z  }
 ||
fS )NFz.*-G(.*)r   z\sr+   r  lpzRequied groups list =[%s]
r,   r   T)r6   r  r2  r  r  rs   r:   r   rB   rC   r  rg   )required_grps_stravl_grpsresultexp_grp_listexp_patgrpsgrp_listg	grp_indexr4  missing_groups_strr%  s               r   check_user_groupsr    s0   FLZZ'GW^^,=>~~/066q9ffUBD	*zz#D!II),67v&HnnS!H 	 	AAv +MI		 <A  #%a  %%%r   c                 P   d}t         j                  j                  |       st        j	                  d| z         nt         j                  j                  |       r t         j                  j                  |       }n| }t         j                  j                  |      st        j	                  d|z         nXt        j                  |       j                  dz  dk7  rt        j	                  d| z         nt        j	                  d| z         d}t        j	                  d| |fz         |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)	r1   rV   rW   rB   rC   islinkrealpathr2   st_mode)so_file_pathret_val	real_files      r   check_libraryr    s    G77>>,'		MP\]^ 77>>,'((6I$Iww~~i(II3yABggl#++b0R7IISWcdeII0LABGII%w(??@Nr   c                 (   d}t        d      }| rm|rkt        j                  j                  |d      }|d| }|r|dz  }t        j                  |       t        |      \  }}t        j                  d|z         |S t        j                  d       |S )Nr  rh  z8 --cache=off --tries=3 --timeout=60 --output-document=- z --spider -Szwget returned: %dzwget not foundr6  r1   rV   rY   rB   rC   ro  )targetheadrr  rh  r  r  s         r   download_via_wgetr    s    F=D$ww||D&)PTV\]>!C		#S		%./ M 			"#Mr   c                 (   d}t        d      }| rm|rkt        j                  j                  |d      }|d| }|r|dz  }t        j                  |       t        |      \  }}t        j                  d|z         |S t        j                  d       |S )Nr  curlz. --output - --connect-timeout 5 --max-time 10 z --headzcurl returned: %dzcurl not foundr  )r  r  rr  r  r  r  s         r   download_via_curlr    s    F=D$ww||D&)FJFS9C		#S		%./ M 			"#Mr   c                    d}t        d      }| rf|rdt        j                  j                  |d      }|d| }t        j                  |       t        |      \  }}t        j                  d|z         |S t        j                  d       |S )Nr  pingz -c1 -W1 -w10 zping returned: %dzping not foundr  )r  rr  r  r  r  s        r   check_network_via_pingr    sx    F=D$ww||D&)&*F3		#S		%./ M 			"#Mr   c                 j    t        | d      }|dk7  rt        | d      }|dk7  rt        |      }|dk(  S )NT)r  r   )r  r  r  )r  ping_serverrr  s      r   check_network_connectionr    s<    s.F!"3T2aK+K8FaKr   c                     g }| D ]O  }|r|dz   |z   }d|v r.t        j                   |      }|D ]  }|j                  |        ?|j                  |       Q |S )Nr  r   )r  r   )
Files_List
prefix_dirExpanded_Files_listrK   f_fullfiles         r   
expandListr    sr     *C!#A!8YYq\F /!((./  &&q)* r   c                 v    	 t        t        |       t        |            S # t        $ r t        | |      cY S w xY wr   )r  floatr   r   rz   s     r   comparer  		  s7    58U1X&& 1ays     88c           	          | bt         j                  d| z         | D ]E  }t        |      \  }}|du s|D ]+  }t         j                  d||   d|d       |||   fc c S  G t         j                  d       y)Nz*Searching for '%s' in running processes...TzFound: z (r  z	Not found)r   r+   )rB   rC   Is_Process_Running)package_mgrsr4  rr  processpids        r   check_pkg_mgrr  	  s    		>MN 	3A!3A!6wT>& 3		gclC"HI #WS\223	3 IIkr   c                 b   | sdi fS 	 i }t        g dt              }t        d| g|j                  t              }t        g d|j                  t              }|j                         d   }t        j                  d|z         |r[|j                         D ]D  }d	|z  }t        j                  |      \  }}	d
|z  }t        j                  |      \  }}
|	s@|
||	<   F d|fS di fS # t        $ r@}t        j                  d| z         t        t        j                  z	  d|f di fcY d }~S d }~ww xY w)NF)ps-wr  aux)rW  grep)stdinrW  )r  z-vr  r   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   rW  communicaterB   rC   r  r   getstatusoutputr  rZ   printr  stderr)process_namer  p1p2p3r  r4  r  rr  r  cmdliner~  s               r   r  r  #	  s,   by,T:FL)4H)4H!!$		3V;<&&( +4a7'77<
s91<!+!;!;C!@w#*GCL+ = "9 		6DE

/2bys*   CC% 
C% !C% %	D..5D)#D.)D.c                     t         dz   | z   }|r|r|j                         |z  }t        j                  d| d|d       t	        ||      \  }}d|k7  rt        j                  d| z         y y )Nr,   z	Removing z cmd = r   zFailed to remove=%s )RMDIR
getAuthCmdrB   rC   ro  )rV   r  cksudor  rr  r  s         r   r<   r<   B	  sg    	t	C+##%s*IIc23k*NFFF{		(-. r   c                 *      G  fddt               }|S )z,Convert a cmp= function into a key= functionc                   P    e Zd Zd Z fdZ fdZ fdZ fdZ fdZ fdZ	y)	cmp_to_key.<locals>.Kc                     || _         y r   obj)r   r  r  s      r   r   zcmp_to_key.<locals>.K.__init__P	  s	    DHr   c                 D     | j                   |j                         dk  S r   r  r   othermycmps     r   __lt__zcmp_to_key.<locals>.K.__lt__R	      599-11r   c                 D     | j                   |j                         dkD  S r   r  r  s     r   __gt__zcmp_to_key.<locals>.K.__gt__T	  r  r   c                 D     | j                   |j                         dk(  S r   r  r  s     r   __eq__zcmp_to_key.<locals>.K.__eq__V	      599-22r   c                 D     | j                   |j                         dk  S r   r  r  s     r   __le__zcmp_to_key.<locals>.K.__le__X	  r  r   c                 D     | j                   |j                         dk\  S r   r  r  s     r   __ge__zcmp_to_key.<locals>.K.__ge__Z	  r  r   c                 D     | j                   |j                         dk7  S r   r  r  s     r   __ne__zcmp_to_key.<locals>.K.__ne__\	  r  r   N)
r   r   r   r   r  r  r  r  r   r  )r  s   r   Kr  O	  s&    		2	2	3	3	3	3r   r  )object)r  r  s   ` r   
cmp_to_keyr  M	  s    3F 3 Hr   c                 b    | d   |d   kD  | d   |d   k  z
  xs | d   |d   kD  | d   |d   k  z
  S )Nr   r%   r   r  s     r   	levelsCmpr  a	  sG    aD1Q4KAaD1Q4K(IQqTAaD[QqTAaD[,IIr   c                     t        dt        t              dz   t        t              z   z        r%dt        t              dz   t        t              z   z  S t        dt        t              z        rdt        t              z  S t        dt        t              z        rdt        t              z  S t        dt        t              dz   t        t              z   z        r%dt        t              dz   t        t              z   z  S t        dt        t              z        rdt        t              z  S t        d      ryt        j                  dt        z         y)zfDetermine the pip command syntax available for a particular distro.
    since it varies across distroszpip-%srQ   zpip%szpip-python%sz
pip-pythonzEpython pip command not found. Please install '%s' package(s) manuallyN)r6  rs   MAJ_VERMIN_VERrB   rZ   depends_to_install_using_pipr   r   r   find_pipr  e	  s     Xs7|C'G456Wc)#g,677	xG$	%G$$	ws7|#	$s7|##	wGS(W56	7GS(W566	~c'l*	+c'l**	|			YZvvwr   c                      	 t        j                   t         j                  t         j                        } | j                  d       | j	                          y# t         j
                  $ r Y yw xY w)N)z1.2.3.48   TF)socketAF_INET
SOCK_DGRAMconnectr=   rZ   r   s    r   	check_lanr  y	  sO    MM&..&*;*;<			/"		<< s   AA A,+A,c                    | j                  d      r| j                  d      }| |dz   d  } | dd dk7  rVd}d}|rN| j                  d      }t        | d|dz    d	      }|| |d
z   |d
z   |z    z   }| |d
z   |z   d
z   t        |        } |rN|} | S )Nr  r  r   r   r  r  r+   r  r   r$   )r  r   rg   )r   r   sizer
  s       r   extract_xml_chunkr  	  s    yy		*%E!GH~AayCIIf%EtAeAg+D$uQwuQwt|44DaQs4y1D	 
 Kr   c                      	 dd l } y# t        $ r}t        j                  |       Y d }~nd }~ww xY w	 dd l}y# t        $ r)}t        j                  |       Y d }~t        d      d }~ww xY w)Nr   r  r  z-GUI Modules PyQt4 and PyQt5 are not installed)r  rq  rB   rC   r  )r  r~  r  s      r   r}  r}  	  s^     		! 		!
E
FFs%    	/*/8 	A*A%%A*c                      d} 	 t               } t        j                  d| z         | S # t        $ r}t        j	                  |       Y d }~y d }~ww xY w)Nr+   zUsing GUI Module %s)r}  rB   r  rq  rZ   )
_ui_statusr~  s     r   	ui_statusr  	  sI    J&(
&34 		!s   #( 	AAAc                    | dk(  r 	 ddl m} t        j                  d       |dfS | dk(  r 	 ddlm} t        j                  d       |d	fS y # t        $ r4}t        j                  |       t        j                  d       Y d }~y d }~ww xY w# t        $ r4}t        j                  |       t        j                  d       Y d }~y d }~ww xY w)
Nr  r   )QApplicationzUsing PyQt4r  r   r  zUsing PyQt5r  )	PyQt4.QtGuir  rB   rC   rq  rZ   r  exitPyQt5.QtWidgets)
ui_toolkitr  r~  s      r   import_dialogr!  	  s    U	0IIm$!5)) 
u			4IIm$ %((	 
  	IIaLHHQKK	  	IIaLHHQKK	s.   A B 	B	*BB		C	*CC	c                 j    | j                  d      }t        |       }|dd  D ]  }t        ||      } |S )NrQ   r   )r:   
__import__getattr)mod_name_as_str
componentsmodcomps       r   dyn_import_modr)  	  sB     &&s+J
_
%C12 !c4 !Jr   c                     	 t        j                  |       S # t        $ rJ dd l}t        j
                  j                  |j                  d             t        j                  |       cY S w xY w)Nr   platlib)	importlibimport_modulerq  	sysconfigr  rV   r   get_path)ext_namer.  s     r   
import_extr1  	  sV    1&&x00 1	**956&&x001s    AA*)A*c                 *   t         j                  d       d\  }}d}t               }	 dd l}	  |j                         d   j                         } |j                         d   }|sd}t         j                  d       nd}t         j                  d	       |r
|dk(  s|dk(  rot        dd      }|rat         j                  d       t        |dz   |       \  }}|s8|r6t        |dz   |       \  }}|s"|r |j                         j                         }d}|s	 t        dd      j                         j                         j                         }d}|j!                         D ]7  }	|	}
d|	v r#dj#                  |	j!                  d      d d       }
	 t%        |
      }9 	 d|v rd}|s}	 t        dd      }|D ]j  }|j                         j-                  d      r|j!                  d      d   }|j                         j-                  d      r|j!                  d      d   }d}l 	 |r|j                         j                         }t         j                  d|z         |j/                  d      dkD  s|j/                  d      dkD  rd}t         j                  d|z         |dk(  r|d   d k(  r|d   dk(  rd!}n|dk(  r|d   d"k(  r
|d   dk(  rd#}d$|v rd%}|d&d' }d(|j                         v r:|j!                  d      }|d   dz   |d   z   }nt         j1                  d)       d*\  }}t         j                  d+t        |      d,t        |             ||fS # t        $ rM dd l}|j                         d   j                         }|j                         d   }|j                  d      }Y =w xY w# t        $ r d}t         j                  d
       Y 3w xY w# t&        $ r" 	 t)        |
      }n# t&        $ r d}Y nw xY wY w xY w# t*        $ r d}Y rw xY w#  d}Y xY w)-NzDetermining distro...)r+   0.0Fr   r   rD   zNot able to detect distroTzAble to detect distroz&Not able to detect distro using pythonredhatarchlsb_releasez/Using 'lsb_release -is/-rs' to determine distroz -isz -rsz
/etc/issuer  rQ   r$   r3  welcomez/etc/os-releasezname=rr   zversion=zDistro name=%sredhatenterpriser  rhelzDistro version=%s5z5.06z6.0MXmxlinuxr%      manjaroz%Failed to get the distro information.)r   r3  zdistro=z, distro_version=)rB   rC   rs   r  distr   r  distrolinux_distributiondistro_release_attrrq  r6  ro  r+  r-   r8   r:   rY   r  r   r   r.   r  r  ry  )r  rD   verfounddistro_release_namer  rA  lsb_relrr  r}   r  
os_releaser   r  s                 r   get_distro_namerI  	  s   II%&ID#E%<	E 8==?1%++-D(--/!$C EII12EII-. DH$t,IIGHw/=LFDd!'F"2K@#))+++-C E 	$c*//1779??AD
 EZZ\ $!8bq!12A$(C$ D		/5J" ::<**73::c?1-D::<**:6**S/!,C zz|!!#		"T)*99'(2-81Dr1ID		%+,6>c!fmA#CV^A##a&C-C&&D%a*C

$iinG!*c/'!*,C 	89	cIIs4ySBC:q  	E,,.q1779D++-a0C"("<"<V"D		E  <		:;<D " $$!!f% $#$$  	E	8	Es   N$ 6M #1N$ 6O9 OA;P AN!N$  N!!N$ $ OO	O6O! O6!O/,O6.O//O65O69PPPc                  @   	 dd l } ddlm} d} | j                  d      }	  |d      j                  }||v rd}|S d}	 |S # t
        $ r7 	  |d      j                  }n #  t        j                  d       |cY cY S xY wY Lw xY w#  t        j                  d       Y S xY w)	Nr   )getgrnamr  USERwheelr  z can not get user group zunable to determine auth_type )r1   r/   rK  r/  gr_memr  rB   ry  )r1   rK  authTypeusermemberss        r   readAuthTyperR  6
  s    3 ryy 	 w'..G 7?H
 O H O  	  "6*11 35 	 312OsV   B A  B B  	B 
AB A:6B 8B :B =B ?B  B Br   )r|   )TFFr   N)r+   r+   r+   F)Tr   )r,   )Nr+   TTr   )Nr%   rZ  )r   r+   r+   r+   )NF)r+   r   r+   r+   )r  r1   r   r   r   r/   r   r"  r  r}  selecttimerE   errnor2   ri   r  r6   datetimer  r  sixext.movesr   r   r	   r
   sixextr   r   r   r   r   r   r+   r   r,  xml.parsers.expatparsersr5  r4  rq  r  r  dbusr   r   r   r  r   r   r!   codesr#   r  r  r  RMr  rI  HTTP_CHECK_TARGETPING_CHECK_TARGET
ERROR_NONEERROR_FILE_CHECKSUMERROR_UNABLE_TO_RECV_KEYSERROR_DIGITAL_SIGN_BADversion_infor	  r
  EOFTIMEOUTEXPECT_WORD_LISTr  r   r  r  r4  r   r  r@   rL   rO   r`   rp   ru   r   r   r   r   r   r   r   r   r   r   r  r  r   mkstempr+  r  r6  r  r8  rs  r{  r  rz  r  r  r  rO  r  r  rh   rj   r  rc   r  encoder  r  r  r  r  r  r  r  r  r  r  r>  r\  rk  
hexversionro  rt  rr  rx  rs   r  r  r+  r  r  r  ro  r  r  r  r  r  r  r  r  USAGE_OPTIONSUSAGE_LOGGING1USAGE_LOGGING2USAGE_LOGGING3USAGE_LOGGING_PLAIN
USAGE_ARGSUSAGE_ARGS2USAGE_DEVICEUSAGE_PRINTER
USAGE_BUS1
USAGE_BUS2
USAGE_HELPUSAGE_SPACEUSAGE_EXAMPLESUSAGE_NOTESUSAGE_STD_NOTES1USAGE_STD_NOTES2USAGE_SEEALSOUSAGE_LANGUAGEUSAGE_LANGUAGE2
USAGE_MODEUSAGE_NON_INTERACTIVE_MODEUSAGE_GUI_MODEUSAGE_INTERACTIVE_MODEsys_confr   USAGE_USE_QT3USAGE_USE_QT4USAGE_USE_QT5r  r  r+  r/  r4  r:  r  rG  rT  r]  rf  rt  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r<   r  r  r  r  r  r}  r  r!  r)  r1  rI  rR  r   r   r   <module>r     so  6  	 " 
            	    V V a a a  %%ON44J
&+    

&A'   
   


1



1
 KKOO $ 	 ABJJq"$$ 	1*: !$r):=QSCT[_ *G
 F$( (:(4 (4X * E    ,; ;*?3V*0%%NBD6 DPv ,0f
.A<L	H sC(H$$Xv/?/?/F/Fw/OPKv2&H$$Xv/?/?@K.    
 H%"2S^mop
5*((M M`; ;z$ $P"
 >>J5
E jjGjjGYYF)K/^'T6H&H$C& C&L& 4^`XH ;
1gec
 N
G
&4. Y g 3 ] C,
i X] <<\51U:GM=M=M\\+|U3u<=MGM=M\\+|U3u<=M=MGM =aH"'+6(	 9x /3 12*` *$`&B. "3@Q &>/(Jx( G ,1cJCP  O  N  J  &&&r  1d  000b	  <, ,"JT J2Q< Q<]<s~   ;Q Q Q# Q1 R	R! 4R1 QQQ Q #Q.-Q.1R RRR!	R.-R.1$SS