
    =	fq                     l    d dl Z d dlZd dlZd dlZddl ddlmZmZmZ d Z	dZ
dZdZdZ G d d	e      Zy)
    N   )*)tuiutilsdevice      Fc                       e Zd Z	 	 	 ddZ	 	 ddZ	 	 	 	 ddZd ZddZddZdde	j                  e	j                  ddfd	Ze	j                  e	j                  dfd
ZddZd Zy)ModuleNc                    || _         || _        || _        || _        || _        t        j                  d       t        j                  |       g | _	        |	| _
        |
| _        d | _        d| _        t        j                  d   t         _        t        j$                  d      rt        j'                  d       || _        |"|| _        t-        | j*                        | _        ng | _        d| _        t0        j3                  ddd      | _        d| _        g | _        t;        j<                  t0        j3                  dd	d
            r4| j8                  j?                  t@               | xj6                  dz  c_        t;        j<                  t0        j3                  ddd
            r4| j8                  j?                  tB               | xj6                  dz  c_        t;        j<                  t0        j3                  ddd
            r4| j8                  j?                  tD               | xj6                  dz  c_        tF        | _$        d| _%        | j(                  tL        | j(                  v r1t         jN                  r!| j8                  r| xjJ                  dz  c_%        tF        | j(                  v r| xjJ                  dz  c_%        tP        | j(                  v r| xjJ                  dz  c_%        | j(                  ;tF        | j(                  v rtF        | _$        ntP        | j(                  v rtP        | _$        | j*                  t         jN                  r| j8                  r| j4                  d	k(  rJtB        | j*                  v r8t@        | j*                  vr&tF        | j(                  v rtF        | _$        d| _        nYtB        | j*                  v r!| j4                  dk(  rtB        | j8                  v sft@        | j*                  v r!| j4                  d	k(  rt@        | j8                  v s3tD        | j*                  v r.| j4                  dk(  rtD        | j8                  v rtL        | _$        n| j4                  d	k(  rt@        | j*                  vrtB        | j*                  v r$tB        | j8                  v rd| _        tL        | _$        tD        | j*                  v r&tD        | j8                  v rd| _        tL        | _$        n$tF        | j(                  v rtF        | _$        ntP        | j(                  v rtP        | _$        nt        jS                  d| j                   z         d| _        n| j4                  dk(  rtB        | j*                  vrt@        | j*                  v r%t@        | j8                  v rd	| _        tL        | _$        netF        | j(                  v rtF        | _$        nGtP        | j(                  v rtP        | _$        n)t        jS                  d| j                   z         d| _        | jH                  | _*        t        jV                         dk(  r|st        jY                  d|z         y y y )N   Fr   HPLIP_DEBUGdebug	configurez
ui-toolkitqt4qt30r   qt5nonez#%s cannot be run using Qt3 toolkit.Tz#%s cannot be run using Qt4 toolkit.z'%s should not be run as root/superuser.)-modtitleversiondoc
usage_dataosumasklog
set_moduleargsquiet
deprecated	lock_filehelp_only_supportsysargvpropproggetenv	set_levelavail_modessupported_ui_toolkitslennum_supported_ui_toolkitssys_confgetdefault_ui_toolkitnum_installed_ui_toolkitsinstalled_ui_toolkitsr   to_boolappendUI_TOOLKIT_QT3UI_TOOLKIT_QT4UI_TOOLKIT_QT5INTERACTIVE_MODEdefault_modenum_valid_modesGUI_MODE	gui_buildNON_INTERACTIVE_MODEerrormodegetuidwarn)selfr   r   r   r   r   r*   r+   run_as_root_okr    r!   s              /usr/share/hplip/base/module.py__init__zModule.__init__(   s   
 
$
s	
$!&HHQK	99]#MM'"& ,)>D&-01K1K-LD*)+D&-.D*"*,,{L%"P)*&%'"==k5#>?&&--n=**a/*==k5#>?&&--n=**a/*==k5#>?&&--n=**a/*, '4+++4C]C]$$)$4#3#33$$)$#t'7'77$$)$'4#3#33$4!%)9)99$8!%%1dnnIcIc&&%/NdF`F`4`d&@&@@EUY]YiYiEi %5!*0' D$>$>>4CZCZ^cCchvz~  {U  {U  iU D$>$>>4CZCZ^cCchvz~  {U  {U  iU D$>$>>4CZCZ^cCchvz~  {U  {U  iU$,!((E1nDLfLf6f!T%?%??NVZVpVpDp.3D+(0D%!T%?%??NVZVpVpDp.3D+(0D%%)9)99(8D%)T-=-==(<D% IICdhhNO-1D*((E1nDLfLf6f!T%?%??NVZVpVpDp.3D+(0D%%)9)99(8D%)T-=-==(<D% IICdhhNO-1D* %%	
 99;!NHH>DE %3    c                 F
   | j                   r| j                   dddfg| _        ng | _        d| j                  g}g }g }|t        z  t        k(  rn|j	                  d       |j	                  t
        j                         |j	                  t
        j                         |j	                  t
        j                         | j                  | j                  dkD  r|j	                  d       |j	                  t
        j                         |j	                  t
        j                         | j                  dkD  rAt        | j                  v r/t        j                   r|j	                  t
        j"                         t$        | j                  v r|j	                  t
        j&                         t(        | j                  v r|j	                  t
        j*                         |j	                  d       |j	                  t
        j                         |j	                  t
        j,                         | j                  t        | j                  v r| j.                  | j0                  dkD  rt        j                   r| j                  dkD  rt2        | j.                  v r1t2        | j4                  v r|j	                  t
        j6                         t8        | j.                  v r1t8        | j4                  v r|j	                  t
        j:                         t<        | j.                  v r1t<        | j4                  v r|j	                  t
        j>                         |j	                  t
        j@                         |j	                  t
        jB                         |tD        z  tD        k7  r|j	                  t
        jF                         |j	                  t
        jH                         ||D ]  }|j	                  |        |tJ        z  r|j	                  d	       ||rp|j	                  t
        j                         |j	                  t
        jL                         |D ]  }	|j	                  |	        ||D ]  }	|j	                  |	        |Z|j	                  t
        j                         |j	                  t
        jN                         |D ]  }
|j	                  |
dd
df        |jQ                  ddjS                  |      dddf       |D ]  }| j                  j	                  |        y )N nameTzUsage:z[DEVICE_URI|PRINTER_NAME]r   z[MODE]z	[OPTIONS]z[FILES]seealsoF summary)*r   r   r   USAGE_FLAG_DEVICE_ARGSr4   r   
USAGE_ARGSUSAGE_DEVICEUSAGE_PRINTERr*   r:   USAGE_SPACE
USAGE_MODEr1   r;   r&   r<   USAGE_GUI_MODEr8   USAGE_INTERACTIVE_MODEr=   USAGE_NON_INTERACTIVE_MODEUSAGE_OPTIONSr+   r-   r5   r2   USAGE_USE_QT3r6   USAGE_USE_QT4r7   USAGE_USE_QT5USAGE_LOGGING1USAGE_LOGGING2USAGE_FLAG_SUPRESS_G_DEBUG_FLAGUSAGE_LOGGING3
USAGE_HELPUSAGE_FLAG_FILE_ARGSUSAGE_NOTESUSAGE_SEEALSOinsertjoin)rB   include_flagsextra_optionsextra_notessee_also_listrL   contentnotesenscs               rD   setUsagezModule.setUsage   s    88 $"fd;<DO DOTXX&115KKNN67NN5++,NN5--.NN5../'D,@,@1,DNN8$NN5,,-NN5++,--1t///DNNNN5#7#784#3#33u;;<#t'7'77u??@ 	{#u(()u**+'H8H8H,H&&2t7U7UXY7YNNt==A!;!;;RVRlRl@lu223!;!;;RVRlRl@lu223!;!;;RVRlRl@lu223 	u++,u++,::>]]NN5//0 	u''($" "q!" //NN9% "eNN5,,-NN5,,- "q!" &$ &ANN1%& $NN5,,-NN5../" :2y%89: 	q388G,b)TBC 	&AOO""1%	&rF   Tc                    d}|sdj                  |dg      }g d}|r&dj                  |dg      }|j                  g d       | j                  dkD  rt        | j                  v r6t
        j                  r&dj                  |dg      }|j                  d	d
g       t        | j                  v r&dj                  |dg      }|j                  ddg       t        | j                  v r&dj                  |dg      }|j                  g d       | j                  | j                  dk\  rt
        j                  r| j                  t        | j                  v rt        | j                  v r%t        | j                  v r|j                  ddg       t        | j                  v r%t        | j                  v r|j                  ddg       t        | j                  v r%t        | j                  v r|j                  ddg       |dj                  ||g      }||j                  |       d }d }d }	d }
d}g }| j                  }t
        j                  r| j                   }nd}d }	 t#        j"                  t$        j&                  dd  ||      \  }| _        |D ]  \  }}|dv r|}	|dv r|}
|dv r7|j+                         j-                         }t.        j1                  |      rMd}P|dv rt.        j1                  d       j|dv rS| j                  5t        | j                  v r#| j                  t
        j                  rt        }|j3                  d       |d v r)| j                  t        | j                  v st        }d}|d!v r+| j                  t        | j                  v st        }d}|d"v rd}%|d#k(  rd$}.|d%k(  rd&}7|d'k(  rd(}@|d)k(  rd*}I|d+v r| j                  [t        | j                  v so| j                  >t        | j                  v r,t
        j                  rt        | j                  v r
t        }d}|j3                  d,| j4                  z         |d-v r| j                  t        | j                  v s| j                  >t        | j                  v r,t
        j                  rt        | j                  v r
t        }d}I|j3                  d.| j4                  z         i|d/v so| j                  }t        | j                  v s| j                  >t        | j                  v r,t
        j                  rt        | j                  v r
t        }d}|j3                  d.| j4                  z          	 |rd}| j:                  rT|s|r|dk(  rb| j=                  ||       nOt.        j?                  t.        jA                  d0| j4                  z               d}n|dk(  r| j=                  ||       |t%        jB                  d       || _"        ||	|
|||fS # t"        j6                  $ r}|j8                  g}Y d }~d }~ww xY w)1Nzl:hrH   g)zlogging=helpz	help-restzhelp-manz	help-descr   dbgzd:p:P:)zdevice=zdevice-uri=zprinter=zprinter-namer   uguiuiiinteractivetextrk   )noninteractiveznon-interactivebatchr   r   zuse-qt3r   zuse-qt4r   zuse-qt5Fr   )z-dz--devicez--device-uri)z-Pz-pz	--printerz--printer-name)z-lz	--logging)z-gz--debugz--dbgr   )z-uz--guiz--uizUnable to enter GUI mode.)z-iz--interactivez--text)z-nz--non-interactivez--batch)z-hz--helpz--help-restrestz
--help-manmanz--help-descdescz--uiscanT)z--qt3z	--use-qt3z2%s does not support Qt3. Unable to enter GUI mode.)z--qt4z	--use-qt4z2%s does not support Qt4. Unable to enter GUI mode.)z--qt5z	--use-qt5z
Please check usage '%s --help')#rc   extendr:   r;   r*   r&   r<   r8   r=   r+   r-   r5   r2   r6   r7   r9   r0   getoptr$   r%   r   lowerstripr   r)   r4   r   GetoptErrormsgr#   usageinfoboldexitr?   )rB   extra_paramsextra_long_paramshandle_device_printersupress_g_debug_flagparamslong_paramsopts
show_usage
device_uriprinter_nameuiscan	error_msgr?   
ui_toolkitlangoa	log_levelrj   s                       rD   parseStdOptszModule.parseStdOpts  s   
 #WWfc]+F'
 !WWfh/0FUV!#4+++&#/""E4=14#3#33&#/""M6#:;#t'7'77&#/""#QR%%1**a/DNN(X9I9I-I!;!;;RVRlRl@l""E9#56!;!;;RVRlRl@l""E9#56!;!;;RVRlRl@l""E9#56#WWfl34F(01

	  >>00JJT	n$mmCHHQRL&+NOD$)
  Nn1::!"JEE#$L-- !	 1I==3%+
44MM'*11''3DDTDT8T22>4>>'!(()DE;;''38HDL\L\8\/%+
@@''38LPTP`P`8`3%+
**!'J-'!'J,&!&J-'!'J*_!F00''3DDTDT8T55A*d.H.HHT^^*d.H.HH#+D).J%,,-adhdldl-lm00''3DDTDT8T55A*d.H.HHT^^*d.H.HH#+D).J%,,-adhdldl-lm00''3DDTDT8T55A*d.H.HHT^^*d.H.HH#+D).J%,,-adhdldl-lm]Nnr J!!YU?JJz95"DTXX"MNO#


:y1!HHQK	ZtZEE_ !! 	 I	 s   0X+ +Y>YYc           	          t        j                         }d|_        t        t        j                               D ]-  \  }}|j                  |d   dj                  |dd        f       / |j                          y )N)zLanguage CodezAlternate Name(s)r   , r   )	r   	Formatterheaderlistsupported_localesitemsaddrc   output)rB   floclls       rD   showLanguageszModule.showLanguages  se    MMO9-3356 	.GCEE2a5$))BqrF+,-	. 	

rF   c                    || j                   s| j                          y |dk(  r$| j                          t        j                          |dk(  rt	        | j
                         y t        j                  | j                  || j                  | j                  | j                         |r1|D ]  }t        j                  |        t        j                  d       t        j                  d       |dk(  rt        j                  d       y y )Nrx   r}   r   r   )r    	showTitler   r   printr   r   format_textr   r   r   r   r>   r$   r   )rB   r   r   rj   s       rD   r   zModule.usage  s    :: NNHHJ$((O dooz4::txxQUQ]Q]^" !AIIaL! HHQKV# $rF   c                 >   | j                   st        j                  d       |r:t        j                  t        j                  dt        j
                  z               n(t        j                  t        j                  d             t        j                  t        j                  | j                  d| j
                               t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       | j                  rKt        j                  t        j                  d	| j                  z               t        j                  d       y y y )
NrH   z.HP Linux Imaging and Printing System (ver. %s)z$HP Linux Imaging and Printing Systemz ver. z0Copyright (c) 2001-18 HP Development Company, LPz0This software comes with ABSOLUTELY NO WARRANTY.z;This is free software, and you are welcome to distribute itz<under certain conditions. See COPYING file for more details.zZ%s support is deprecated. Feature can be used as is. Fixes or updates will not be provided)	r    r   r   r   r&   r   r   r!   rA   )rB   show_vers     rD   r   zModule.showTitle  s   zzHHRL#((#SVZVbVb#bcd #((#IJK HHSXXdjj$,,GHIHHRLHHGHHHGHHHRSHHSTHHRL"~  AE  AK  AK  #K  L  M % rF   c                    t         j                  d|d|d|d|d|d       t         j                  d| j                  z         d}d|v rd}d}d}	d	}
|Et        j                  ||      }t         j                  |       |s|rt         j                  d
       y	|$||v rd}n|rt         j                  d|z         y	d}|t         j                  |       |D ]  }t         j                  |       t        j                  |      \	  }}}}}}}}}t         j                  d|d|d|d|d|d|d|d|d|       ||   }|j                         |D cg c]  }|j                          c}v sd}	|x}}d} |	durt         j                  d|z         d	}|ry	|||r|}
ny|0|.|rs|	rq|k(  r|}
nit         j                  d|d|d       d\  }}nG|||	rt        j                  ||      }
n*t        |      dk(  rt        |j                               d   }
|
Qt        |      rF| j                  t        k(  rt        j                  ||      }
nt        |j                               d   }
|
t        j!                  dd|
       |
S | j                  t        t"        fv r*t         j                  d       t%        j&                  d       |
S c c}w )aD   Validate passed in parameters, and, if in text mode, have user select desired device to use.
            Used for tools that are device-centric and accept -d (and maybe also -p).
            Use the filter(s) to restrict what constitute valid devices.

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

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

            Returns:
                device_uri|None
                (returns None if passed in device_uri is invalid or printer_name doesn't correspond to device_uri)
        zgetDeviceUri(r   z, , )Mode=%sFhpaioTN*No device found that support this feature.@'%s' device doesn't support this feature (or) Invalid device URIz	back_end=z, is_hp=z, bb=z, model=z	, serial=z, dev_file=z, host=z, zc=z, port= B'%s' device doesn't support this feature (or) Invalid printer namezPrinter name z and device URI z refer to different devices.)NNr   r   	last_usedr   zANo device selected/specified or that supports this functionality.)r   r   r?   r   getSupportedCUPSDevicesr>   parseDeviceURIr   getDeviceURIByPrinterNamer,   r   keysr8   r   device_table	user_confsetr=   r$   r   )rB   r   r   back_end_filterfilterdevicesrestrict_to_installed_devicesscan_uri_flagdevice_uri_okprinter_name_okdevice_uri_returiback_endis_hpbbmodelserialdev_filehostzcportcups_printermprinter_name_device_uris                           rD   getDeviceUrizModule.getDeviceUri  s   $ 			@]_ 	`		)dii'(o% M?44_fMGIIg<		FG!W$ $.		\_iij !%#IIg 	(yy~"11#6 LxE68T2tyyw  BG  IK  MR  TZ  \d  fj  ln  pt  u  v%cl|$$&l*K1779*KK%)?:==*Z#'=	( d*yy]`llm"|/ !l&:}'N#(@!88%/NIIamoyz{1;.L,L$<#==lMZN\Q!',,.1!4N!c'lyy,,!$!1!1'=!I!%glln!5a!8%MM+|^D  yy-/CDD		]^ [ +Ls   Kc                 j   t         j                  d|d|d|d|d	       t         j                  d| j                  z         d}d}d}d}	t        j                  ||      }
t         j                  |
       |
st         j                  d       y|<t        j                  ||      }||v rd	}|}	nt         j                  d
|z         d}|ry||dk(  r3ddlm} |j                         }||}n{t         j                  d       d}nc|j                         |
D cg c]  }|j                          c}v rd	}t        j                  |      }	nt         j                  d|z         d}|ry|||rt        |         dk(  rK||   d   }nB|$|"|r<|r:||	k(  r|}n2t         j                  d       n|||r|}nt        |
      dk(  r|
d   }|8| j                  t        t        fv r t        |
      rt        j                   |
      }||	t        j                  |      }	|	t"        j%                  dd|	       |t"        j%                  dd|       nX| j                  t        t        fv r+t         j                  d       t'        j(                  d       nt         j                  d       d	||	fS c c}w )a   Validate passed in parameters, and, if in text mode, have user select desired printer to use.
            Used for tools that are printer queue-centric and accept -p (and maybe also -d).
            Use the filter(s) to restrict what constitute valid printers.

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

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

            Returns:
                (printer_name|None, device_uri|None) (tuple)
                (returns None if passed in printer_name is invalid or device_uri doesn't correspond to printer_name)
        zgetPrinterName(r   r   r   FNr   )FNNTr   r   r   )cupszCUPS default printer not setr   r   z7Printer name and device URI refer to different devices.r   r   r   zBNo printer selected/specified or that supports this functionality.zNo printer selected/specified)r   r   r?   r   getSupportedCUPSPrinterNamesr>   r   prntr   getDefaultPrinterr   r   r,   r8   r=   r   printer_tabler   r   r$   r   )rB   r   r   r   r   r   r   r   printer_name_retr   printersr   r   default_printerps                  rD   getPrinterNamezModule.getPrinterName`  s   $ 			j,P_aghi		)dii'(66O		(IIBC$!44_fMGW$ $!+		\_iij!
0,#s"%"&"8"8":".'6$II<=#'L  %%'x+H!AGGI+HH&*O%+%E%El%SNIIbeqqr#'L40!l&:}7:&'1,#*:#6q#9 #(@/'3$IIWXL$<+]a'{#		6FH\5](]befnbo"00:'N,B#==>NON%MM+|^D'MM+~7GH yy-/CDD		^_		9:%~55[ ,Is   J0c                     |r:t        j                  dj                  | j                  |g      |      \  }| _        n(t        j                  | j                  |      \  }| _        |st        j                  d       y y )N-r   )r   lock_apprc   r   r"   r$   r   )rB   suffixsuppress_erroroks       rD   lockInstancezModule.lockInstance  s\    !&$((F9K0L^!\B!&!HBHHQK rF   c                 \    | j                    t        j                  | j                          y y )N)r"   r   unlock)rB   s    rD   unlockInstancezModule.unlockInstance  s!    >>%LL( &rF   )NNNFFF)r   NNN)NNTF)rx   N)T)rH   F)__name__
__module____qualname__rE   rn   r   r   r   r   r   DEFAULT_BE_FILTERDEFAULT_FILTERr   r   r   r    rF   rD   r   r   '   s    .2'+?D|F~ 7;15]&@ )-'++/*/pFf80 '+vOgOg"114_cfR HNG_G_$33SWd6N)rF   r   )r$   rer   r   rp   rH   r   r   r   USAGE_FLAG_NONErM   r\   r_   r   objectr   r   rF   rD   <module>r      sJ   .  	  	      "&   l
)V l
)rF   