3
NZ8              D   @   s  d dl Z d dlZd dlZddlmZ ddlmZ d dlZd dlZd dl	Z	d dl
Z
ddlT ddlmZ ddlmZ ddlmZ ered	Zd
d Zejd	ejjejjZejd dZdZdZd ZdrddZG dd deZe ZG dd de Z!G dd de!Z"G dd de!Z#G dd de!Z$ej%d e" Z&e# Z'e$ Z(yej) \e_e_*W n" e+k
rr   de_de_*Y nX e&j,dd d!e_-e
j.d"e
j/g  Z0Z1xBej-j2d#dd D ]*Z3e0j4e3Z5e5dk	re1j6e5j7d qW d#j8e1e_9y e:d	j8d$d% e1D d&e_;W n e+k
r$   d e_;Y nX e&j,d'd(ej<j=ej<j>ej? e_@ejAejB d  e_CejDejCZEeEd) e_Fd*e_Gej<j8ej@d+e_Hej<j8ej@d+d,e_Iej<j8ej@d+d-e_Jej<j8ej@d+d.e_Kej<j8ej@d+d/e_Ld0e_Md1e_Nd2e_Od3e_Pd4e_Qd5e_Rd6e_See&j,d7d8d9e_Tee&j,d7d:d9e_Uee&j,d7d;d9e_Vd<e_Wee&j,d7d=d9e_Xee&j,d7d>d9e_Yee&j,d7d?d9e_Zee&j,d7d@d9e_[ee&j,d7dAd9e_\ee&j,d7dBd9e_]ee&j,d7dCd9e_^dDa_d a`d<aadsdEdFZbdGdH ZcdIdJ ZddKdL ZedMdN ZfegdOehdPeidQejdRekdSeldTemdUendVeodWepdXeqdYerdZesd[etd\eud]evd^ewd_exd`eydaezdbe{dce|dde}dee~dfedgedhiZG didj djeZddtiZdS )u    N   )PY3)configparser)*)logger)os_utils)
to_unicode c             C   s   | |k| |k  S )N )abr
   r
   /usr/share/hplip/base/g.pycmp+   s    r   info      Fc             C   sJ   t | tr8| r8| d j d
kr"dS | d j dkrFd	S nt | trF| S |S )Nr   1tyT0fnF)r   r   r   )r   r   r   )
isinstancestrlowerbool)sdefaultr
   r
   r   to_bool9   s    
r   c               @   s   e Zd Zdd Zdd ZdS )
Propertiesc             C   s"   |t | j kr| j|S dS d S )Nr	   )listkeys__getitem__)selfattrr
   r
   r   __getattr__H   s    
zProperties.__getattr__c             C   s   | j || d S )N)__setitem__)r#   r$   valr
   r
   r   __setattr__N   s    zProperties.__setattr__N)__name__
__module____qualname__r%   r(   r
   r
   r
   r   r   F   s   r   c               @   s`   e Zd Zdd ZedfddZdd Zdd	 Zd
d Zdd Z	e	Z
dd Zdd Zdd ZdS )
ConfigBasec             C   s   || _ tj | _| j  d S )N)filenamer   ConfigParserconfread)r#   r-   r
   r
   r   __init__V   s    
zConfigBase.__init__r	   c             C   s0   y| j j||S  tjtjfk
r*   |S X d S )N)r/   getr   NoOptionErrorNoSectionError)r#   sectionkeyr   r
   r
   r   r2   \   s    zConfigBase.getc             C   s4   | j j|s| j j| | j j||| | j  d S )N)r/   has_sectionZadd_sectionsetwrite)r#   r5   r6   valuer
   r
   r   r8   c   s    zConfigBase.setc             C   s
   | j j S )N)r/   sections)r#   r
   r
   r   r;   k   s    zConfigBase.sectionsc             C   s   | j j|S )N)r/   r7   )r#   r5   r
   r
   r   r7   o   s    zConfigBase.has_sectionc             C   s   | j j|S )N)r/   options)r#   r5   r
   r
   r   r<   s   s    zConfigBase.optionsc             C   s   | j d k	r| j }|jdr.tjd| j   d S yt| j d}zpy| jj| W nZ tjk
r|   t	d tjd| j   Y n. tj
k
r   tjd| j   | j  Y nX W d |j  X W n, tttjfk
r   tjd| j   Y nX d S )Nz/root/zattempted to read from '%s'rr	   zIFound No Section in %s. Please set the http proxy for root and try again.zFound Duplicate Entery in %sz#Unable to open file %s for reading.)r-   
startswithlogerroropenr/   Zreadfpr   ZMissingSectionHeaderErrorprintZDuplicateOptionErrorwarnCheckDuplicateEntriescloseOSErrorIOErrordebug)r#   r-   fpr
   r
   r   r0   x   s$    

zConfigBase.readc             C   s   | j d k	r| j }|jds$|jdr8tjd| j   d S y$t| j d}| jj| |j  W n( tt	fk
r   tj
d| j   Y nX d S )Nz/root/z/etc/zattempted to write to '%s'wz#Unable to open file %s for writing.)r-   r>   r?   r@   rA   r/   r9   rE   rF   rG   rH   )r#   r-   rI   r
   r
   r   r9      s    
zConfigBase.writec             C   s   y t | jd}|j }|j  W n tk
r8   d}Y nX d}x*|j D ]}| sZ||krH|d | }qHW dd l}|j \}| _t | jd}|j| |j  | j  t	j
| j d S )Nr=   r	   
r   rJ   )rA   r-   r0   rE   rG   
splitlinestempfileZmkstempr9   osunlink)r#   r   dataZ
final_datar   rM   fdr
   r
   r   rD      s"    

z ConfigBase.CheckDuplicateEntriesN)r)   r*   r+   r1   r   r2   r8   r;   r7   r<   r!   r0   r9   rD   r
   r
   r
   r   r,   U   s   r,   c               @   s   e Zd Zdd ZdS )	SysConfigc             C   s   t j| d d S )Nz/etc/hp/hplip.conf)r,   r1   )r#   r
   r
   r   r1      s    zSysConfig.__init__N)r)   r*   r+   r1   r
   r
   r
   r   rR      s   rR   c               @   s   e Zd Zdd ZdS )Statec             C   sB   t jjd r2t j dkr2t jd d}tj| tj| d d S )Nz/var/lib/hp/r   zchmod 755 /var/lib/hp/z/var/lib/hp/hplip.state)	rN   pathexistsgeteuidmakedirsr   Zexecuter,   r1   )r#   cmdr
   r
   r   r1      s
    

zState.__init__N)r)   r*   r+   r1   r
   r
   r
   r   rS      s   rS   c               @   s$   e Zd Zdd Zdd Zdd ZdS )
UserConfigc             C   s   t j \}t_tj dkstjjtjdt_tjj	tjsyDt
tjdj  tjtjjtj}tjtj|tj |tj  W n tk
r   Y nX tj| tj nd t_tj| d  d S )Nr   z
hplip.confrJ   )r   ZgetHPLIPDirpropZuser_dirrN   rV   rT   joinZuser_config_filerU   rA   rE   statdirnamechownST_UIDST_GIDrG   r,   r1   )r#   stsr   r
   r
   r   r1      s     zUserConfig.__init__c             C   sZ   | j ddtjjd}y|jd}W n" tk
rF   tjd|  Y nX tjd|  |S )N	last_usedworking_dir~zutf-8zInvalid unicode: %szworking directory: %s)	r2   rN   rT   
expanduserdecodeUnicodeErrorr?   r@   rH   )r#   r   r
   r
   r   workingDirectory   s    zUserConfig.workingDirectoryc             C   s,   | j dd|jd tjd|jd  d S )Nrb   rc   zutf-8zworking directory: %s)r8   encoder?   rH   )r#   r   r
   r
   r   setWorkingDirectory   s    zUserConfig.setWorkingDirectoryN)r)   r*   r+   r1   rh   rj   r
   r
   r
   r   rY      s   
rY      Zen_USZUTF8Zhplipversionz0.0.0z(\d\w*).c             C   s   g | ]}d t | qS )z%02x)int).0_yr
   r
   r   
<listcomp>  s    rq      dirshome   2   rP   ZimagesZxmlZmodelsZlocalizationi    i   Z   zP/usr/share;/usr/local/share;/usr/lib;/usr/local/lib;/usr/libexec;/opt;/usr/lib64z
HP-*.ppd.*z,http://www.linuxprinting.org/ppd-o-matic.cgiz
-hpijs.ppdZ	configurez	gui-buildr   znetwork-buildzpp-buildTzscanner-buildz	fax-buildz	doc-buildzfoomatic-xml-installzfoomatic-ppd-installzhpcups-installzhpijs-installz\|/-\|/-c             C   s   | a d S )N)enable_spinner)enabler
   r
   r   change_spinner_state4  s    rz   c               C   sF   t rBtj  rBtjj rBtjjdtt   td d atjj	  d S )Nr      )
rx   r?   is_debugsysstdoutisattyr9   spinnerspinposflushr
   r
   r
   r   update_spinner8  s    r   c               C   s2   t r.tj  r.tjj r.tjjd tjj  d S )Nz )rx   r?   r}   r~   r   r   r9   r   r
   r
   r
   r   cleanup_spinner?  s    r   c          	   C   s*   ydd | j dD }W n   Y nX |S )Nc             S   s   g | ]}t |qS r
   )rn   )ro   xr
   r
   r   rq   H  s    zxint.<locals>.<listcomp>rm   )split)verlr
   r
   r   xintF  s
    r   c             C   s   d}| d }t tjjdd }|d dkr2d}nd}x(tjdD ]\}}}||krB|}d}qBW |dkrtjd|   tjd t	j
d	|}t |jd}	|	d dkrd}
nd}
||
krtjd
|   tjd tjd d S )Nr   z.so r      z	/usr/lib/r   z6%s not present in the system. Please re-install HPLIP.zpython(\d(\.\d){0,2})z2%s Extension module is missing from Python's path.zMTo fix this issue, please refer to this 'http://hplipopensource.com/node/372')r   r~   rl   r   rN   walkr?   r@   exitresearchgroupr   )Zext_modflagZ
ext_mod_soZ
python_verdirpathr]   	filenamesZext_pathmZext_verr   r
   r
   r   check_extension_module_envN  s,    

r   zNo errorzUnknown errorzDevice not foundzUnknown/invalid device-id fieldz Unknown/invalid device-uri fieldzData length exceeds maximumzDevice I/O errorzNo probed devices foundzDevice busyzDeviceStatus not availablezInvalid service namez!Invalid channel-id (service name)zChannel busyz!Device does not support operationzDevice open failedzInvalid device nodezInvalid hostname ip addresszInvalid JetDirect port numberzNo CUPS queue found for device.zDAT file errorzInvalid timeoutzI/O timeoutzIncompatible fax optionszInvalid fax filezFax file not foundzUnknown internal errorc               @   s   e Zd ZefddZdS )Errorc             C   s@   || _ tj|tt | _tjd|| jf  tj| | j| d S )NzException: %d (%s))	optERROR_STRINGSr2   ERROR_INTERNALmsgr?   rH   	Exceptionr1   )r#   r   r
   r
   r   r1     s    zError.__init__N)r)   r*   r+   r   r1   r
   r
   r
   r   r     s   r   usenen_usamericanamericausaenglish)F)T)r   r   r   r   r   r   r   )r~   rN   os.pathZsixextr   Zsixext.movesr   Zlocalepwdr\   r   Zcodesr	   r   r   r   typeZQStringr   ZLoggerZLOG_LEVEL_INFOZLOG_TO_CONSOLEr?   Z	set_levelZMINIMUM_PYQT_MAJOR_VERZMINIMUM_PYQT_MINOR_VERZMINIMUM_QT_MAJOR_VERZMINIMUM_QT_MINOR_VERr   dictr   rZ   objectr,   rR   rS   rY   umaskZsys_confZ	sys_stateZ	user_confZgetdefaultlocaleencoding
ValueErrorr2   rl   compileIZ_pZ_xr   rp   matchZ_zappendr   r[   Zinstalled_versionrn   Zinstalled_version_intrT   realpathnormpathgetcwdZhome_dirgetpwuidgetuidZusernamegetpwnamZpdbuserhomeZhistory_sizeZdata_dirZ	image_dirZxml_dirZ
models_dirZlocalization_dirZmax_message_lenZmax_message_readZread_timeoutZppd_search_pathZppd_search_patternZppd_download_urlZppd_file_suffixZ	gui_buildZ	net_buildZ	par_buildZ	usb_buildZ
scan_buildZ	fax_buildZ	doc_buildZfoomatic_xml_installZfoomatic_ppd_installZhpcups_buildZhpijs_buildr   r   rx   rz   r   r   r   r   ZERROR_SUCCESSZERROR_UNKNOWN_ERRORZERROR_DEVICE_NOT_FOUNDZERROR_INVALID_DEVICE_IDZERROR_INVALID_DEVICE_URIZERROR_DATA_LENGTH_EXCEEDS_MAXZERROR_DEVICE_IO_ERRORZERROR_NO_PROBED_DEVICES_FOUNDZERROR_DEVICE_BUSYZ!ERROR_DEVICE_STATUS_NOT_AVAILABLEZERROR_INVALID_SERVICE_NAMEZERROR_ERROR_INVALID_CHANNEL_IDZERROR_CHANNEL_BUSYZ'ERROR_DEVICE_DOES_NOT_SUPPORT_OPERATIONZERROR_DEVICEOPEN_FAILEDZERROR_INVALID_DEVNODEZERROR_INVALID_HOSTNAMEZERROR_INVALID_PORT_NUMBERZ$ERROR_NO_CUPS_QUEUE_FOUND_FOR_DEVICEZERROR_DATFILE_ERRORZERROR_INVALID_TIMEOUTZERROR_IO_TIMEOUTZERROR_FAX_INCOMPATIBLE_OPTIONSZERROR_FAX_INVALID_FAX_FILEZERROR_FAX_FILE_NOT_FOUNDr   r   r   r   Zsupported_localesr
   r
   r
   r   <module>   s   

a	(


 $

$