3
NZ/                @   sZ  d dl Z d dlZddlmZmZmZmZmZ ddlT d dl	j
jZd dlZd dlZyd dlmZ dZW nF ek
r   yd dlmZ dZW n ek
r   dZY nX dZY nX ddlT ddlT dd	lmZmZ d dlZd ZdZd
ZdZdZdZdZ e!e"e#e$e%e&e'e(e)e*e+e,e-e.e/e0e1e2e3e4e5e6dZ7e8e9e:e;e<e9e:e;e<d	Z=e g e>dZ?ededededediZ@ededededediZAededededediZBdddZCdd ZDdd ZEdd  ZFeGeGeHe:e;e<e9eIeJeKeLeMeNeOePd!ZQejReSejTeSejUeVejWeSejXeYejZe[ej\e[ej]eSej^e_ej`eSejaeSejbeSejceSejdeSejeefejgeSejheSejieSejjeSejkelejmeVejneSejoepiZqd"d# Zrd$d% Zsdates  d&d' Zuevewexeyezd(Z{e|e}e~eee|d)Zde|dededededede~de}iZd7d8 Zd9d: Zd;d< Zd e"de"de&dedede!de!dede!de*de/de*de!de*de*de3dededede/de/de/de/de/de/de/de/de/de/de/de/de3d ededededede3de3de3de3d	e3d
e3dede"dede3de"dede!de!dede!de!de!de!de!de&de%de%de3de!dede/d e/d!e/d"e3d#e!d$e!d%e3d&e!d'e!d(e!d)e!d*ed+e/d,e3d-e3d.e!d/e!d0e!d1e!d2e!d3e3d4e!d5e!d6ed7e/d8e!d9e!d:e!d;e!d<e!d=e!d>e!d?e!d@e!dAe!dBe!dCe!dDe!dEe!dFe!dGe!dHe!dIe!dJe!dKe!dLe!dMe!dNe!dOe!dPe!dQe!dRe!dSe!dTe!dUe!dVe!iwZdd Ze"eee!e!ee&eee!e%e!e!e%e!e!e!e!e%e#eee!e/e%e#e!e!e!ee&e#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"ee"e/ee/eedPZdZdZdWddZejdejZdd ZeYe[eeVeVdZeee;e:e<e9dZe|ee}e}e}edZeveyeyedZdd ZdXddÄZddń ZddǄ ZddɄ Zdd˄ ZdZdZd6ZeYeYeeVeVeVefeYd̜Ze;e:e<e9e9e;e:e<e8d͜	Ze|ee}e}e}dΜZeveyeydϜZe"e*e/e$eeeeee*eeeeeeeedМZdd҄ ZddԄ Zddք ZdS (Y      N   )BytesIOto_bytes_utf8to_bytes_latinto_string_latinto_long)*)ElementTreeT)XMLF)pmlutils               )ZbusyZidleZprntZofffZrprtZcnclZiostZdrywZpencZoopaZbnejZbnmzZphmzZdpmzZpajmZcarsZpapsZpenfZerroZpwdnZfptsZclno)	r   r   r   r   r               )revisionagentszstatus-code         r          c             C   s  d}g }t }t}t}t}t}t}	t}
t}d}yg }t|dkr|jd}xB|D ]:}t|dkrP|d d dkrP|dd  }dd |D }qPW d	d | D }|d
 }t	|  kot
kn  stt|d td@ |d  td
@ }t|d td@ |d  td
@ }t|d td@ |d  td
@ }t|d d@ |d  d
@ }|tkrt|d td@ |d  td
@ }	t|d td@ |d  td
@ }
n(t|d td@ }	t|d td@ }
t|d td@ |d td
@  t|d td@ d
>  }t| }|| d> }|dkr6|| d> ||d
   }|t }i t| d
 d  }}}|t|  }d}t| }tjd|  xt|D ]}t| |||  d}||d< |dkrPtjt|td@ td? d|d< ||d k rt|d< nt|d< t|td@ td? |d< t|td@ td? |d< t|td@ |d< d |d!< n|dkrt|td"@ t|td#@ td
>  |d< t|td$@ td%? |d< t|d&@ td'? |d!< t|td(@ td? |d< t|td)@ td*? |d< t|td+@ |d< n
tjd, t|dkryt||d
 |d  d|d-< t||d  td@ |d.< t||d  td@ |d/< t||d  td@ |d0< t||d  td
@ |d1< W n> tk
r   d|d-< d|d.< d|d/< d|d0< d|d1< Y nX tjd2||f  |d
7 }|j| i }||7 }||7 }qW W n< tttfk
rn } ztj d3t!|  W Y d d }~X nX ||||||||	|
|d4
S )5Nr   r   r   ,r   Z05c             S   s   g | ]}t |d qS )r   )int).0x r"   /usr/share/hplip/base/status.py
<listcomp>   s    z parseSStatus.<locals>.<listcomp>c             S   s   g | ]}t |d qS )r   )r   )r    r!   r"   r"   r#   r$      s    r   r   r   r      r   r   r   0   znum_pens = %dr   indexi   typekindi   	   zlevel-triggeri  health   level   idl        i   @i   ?   i      i   i   r   r   zPen data size errorZdvcZvirginzhp-inkZknownZackz	pen %d %szStatus parsing error: %s)
r   r   ztop-doorzstatus-codezsupply-doorduplexerz
photo-trayzin-tray1zin-tray2z
media-path)"TOP_DOOR_NOT_PRESENTSTATUS_UNKNOWNSUPPLY_DOOR_NOT_PRESENTDUPLEXER_NOT_PRESENTPHOTO_TRAY_NOT_PRESENTIN_TRAY_NOT_PRESENTMEDIA_PATH_NOT_PRESENTlensplitSTATUS_REV_00STATUS_REV_04AssertionErrorboolr   STATUS_REV_02
STATUS_POSZSTATUS_PRINTER_BASENUM_PEN_POSPEN_DATA_SIZElogdebugranger   REVISION_2_TYPE_MAPgetAGENT_KIND_HEADAGENT_KIND_SUPPLYerror
IndexErrorappend
ValueError	TypeErrorwarnstr)szr   penstop_doorstatsupply_doorr2   Z
photo_trayZin_tray1Zin_tray2Z
media_pathZZ_SIZEZz1Zz_fieldsZz_fieldZz1ss1Z
status_posZstatus_bytepencdZnum_pensr'   Zpen_data_sizepinfoer"   r"   r#   parseSStatus   s    

$$$
$&<

$


,
 
$r_   c             C   s  g i d  }}}| j d}tj| |d }t|dkr<nt|dkrx|D ]}|dkrj|d7 }qR|dkr|dkrtt |d< |d	< |d7 }qR|d
krt|d< t|d	< |dkrt|d< n@|dkrt	|d< n.|dkrt
|d< n|d krtt |d< |d< |d7 }qR|dkrR|dkr(d|d< nd|d< d|d< d}xy|| }W n tk
rb   P Y nlX |d d
 dkr|d tkrt|d
d  |d< n4|d d
 dkr|d t	krt|d
d  |d< |d7 }q>W |j| i }d}qRW n y|d
  W n tk
r   d}	Y nX |d
 dkr0d}	nd
}	ytj|d j t}
W n tk
rf   t}
Y nX t||	|
ttttttd
S )!Nr   r   r   r   r   aAr(   r)   r   r+   bBrZ   Cr[   DuUr   0stater-   ZKPZCPZDN)
r   r   ztop-doorzstatus-codezsupply-doorr2   z
photo-trayzin-tray1zin-tray2z
media-path)r`   ra   )rb   rc   )rZ   rd   )r[   re   )rf   rg   )r;   rD   rE   r:   AGENT_TYPE_NONEAGENT_KIND_NONEAGENT_HEALTH_OKAGENT_KIND_HEAD_AND_SUPPLYAGENT_TYPE_BLACKAGENT_TYPE_CMYAGENT_TYPE_KCMAGENT_HEALTH_MISINSTALLEDrL   r   rM   vstatus_xlaterH   lowerSTATUS_PRINTER_IDLESTATUS_REV_Vr5   r6   r7   r8   ZMEDIA_PATH_CUT_SHEET)rR   rT   rY   rZ   ZfieldsZf0r\   ifZtop_lidrV   r"   r"   r#   parseVStatus  s    




 
 
 

 

 
  



rx   c             C   s:   d| krt | d S d| kr2t| d | jddS tS d S )NZVSTATUSSZr   )rx   r_   rH   STATUS_BLOCK_UNKNOWN)ZDeviceIDr"   r"   r#   parseStatus]  s
    r|   c             C   s   t }| tjtjfkr|tj@ r0|tj@  r0t}q|tj@ r@t}q|tj@ rPt	}q|tj
@ r`t}q|tj@ rpt}q|tj@ rt}q|tjkrt}q|tj@ rt}n.|tjkrt }n|tjkrt}n|tjkrt}|S )N)rt   r   ZDEVICE_STATUS_WARNINGZDEVICE_STATUS_DOWNZ#DETECTED_ERROR_STATE_LOW_PAPER_MASKZ"DETECTED_ERROR_STATE_NO_PAPER_MASKZSTATUS_PRINTER_LOW_PAPERSTATUS_PRINTER_OUT_OF_PAPERZ#DETECTED_ERROR_STATE_DOOR_OPEN_MASKSTATUS_PRINTER_DOOR_OPENZ DETECTED_ERROR_STATE_JAMMED_MASKSTATUS_PRINTER_MEDIA_JAMZ"DETECTED_ERROR_STATE_OUT_CART_MASKSTATUS_PRINTER_NO_TONERZ"DETECTED_ERROR_STATE_LOW_CART_MASKSTATUS_PRINTER_LOW_TONERZ)DETECTED_ERROR_STATE_SERVICE_REQUEST_MASKSTATUS_PRINTER_SERVICE_REQUEST!DETECTED_ERROR_STATE_OFFLINE_MASKSTATUS_PRINTER_OFFLINEZPRINTER_STATUS_IDLEZPRINTER_STATUS_PRINTINGSTATUS_PRINTER_PRINTINGZPRINTER_STATUS_WARMUPSTATUS_PRINTER_WARMING_UP)device_statusprinter_statusdetected_error_staterV   r"   r"   r#   #LaserJetDeviceStatusToPrinterStatuse  s4    










r   )otherunknownZblueZcyanZmagentaZyellowZblackZ
photoblackZ
matteblackZ	lightgrayZgrayZdarkgrayZ	lightcyanZlightmagentaZredc             C   sj  yX| j   | jtjtj\}}| jtjtj\}}| jtjtj\}}| jtj\}}W n2 tk
r   | j	  t
g dtddddddd
S X ytjdt|d d }W n ttfk
r   tj}Y nX g d }}	xtjdd|	d f  tjd|	  tj|	 tjf}
| j|
tj\}}|tks.|d kr:tjd	 P x&tD ]}||kr@t| }P q@W t}tjd
|	  tj|	 tjf}
| j|
\}}|tkrtjd P tjd|	|f  tjd|	  tj|	 tjf}
| j|
\}}|dkrd}|tkrtjd P tjd|	|f  tjd|	  tj|	 tjf}
| j|
\}}|tkr`tjd t}n\tjd|  tjd|	  tj | tj!f}
| j|
\}}|tkrtjd t}|t"t#t$t%fkrt&}nt}|tkrntjd|	  tj'|	 tj(f}
| j|
\}}|tkrtjd P |d k	rtjd|  |j) j* }x|t+D ] }|j,|dkrDt+| }P qDW t}nN|d k	rtjd|  |j) j* }t+j-|t}|t.kr|t/krt}nt&}tjd|	  tj0|	 tj1f}
| j|
\}}|tkrtjd t2}t3}nXt2}|d krt3}nD|tj4kr,t3}n2|tj5kr>t6}n |tj7tj8fkrZt3}t9}nt3}t:t;|| d }tjd|	|||||f  |j<|||||d |	d7 }	|	dkrP qW |pt=}tjd|  |ptj>}tjd|  |ptj?}tjd|  |ptj@}tjd||f  tA|||}tjd|  |tBkrLd}nd}t
||||dddddd
S )!Nr   r   )
r   r   ztop-doorzstatus-codezsupply-doorr2   z
photo-trayzin-tray1zin-tray2z
media-pathrc   z%s Agent: %d %sr   
   zOID_MARKER_SUPPLIES_TYPE_%d:zEnd of supply information.zOID_MARKER_SUPPLIES_LEVEL_%d:ZFailedzagent%d-level: %dzOID_MARKER_SUPPLIES_MAX_%d:zagent%d-max: %dz&OID_MARKER_SUPPLIES_COLORANT_INDEX_%d:zColorant index: %dzOID_MARKER_COLORANT_VALUE_%dzFailed. Defaulting to black.z#OID_MARKER_SUPPLIES_DESCRIPTION_%d:zcolorant value: %szOID_MARKER_STATUS_%d:d   z@agent%d: kind=%d, type=%d, health=%d, level=%d, level-trigger=%d)r)   r(   r+   r-   zlevel-triggerr   zprinter_status=%dzdevice_status=%dzcover_status=%dzdetected_error_state=%d (0x%x)zPrinter status=%dz
**********z
**********)CopenPMLgetPMLr   ZOID_PRINTER_STATUSZINT_SIZE_BYTEZOID_DEVICE_STATUSZOID_COVER_STATUSZOID_DETECTED_ERROR_STATEErrorclosePMLSTATUS_REV_UNKNOWNr4   structZunpackr   rL   rO   r   rD   rE   ZOID_MARKER_SUPPLIES_TYPE_xZOID_MARKER_SUPPLIES_TYPE_x_TYPEERROR_SUCCESS%MARKER_SUPPLES_TYPE_TO_AGENT_KIND_MAPAGENT_KIND_UNKNOWNZOID_MARKER_SUPPLIES_LEVEL_xZ OID_MARKER_SUPPLIES_LEVEL_x_TYPEZOID_MARKER_SUPPLIES_MAX_xZOID_MARKER_SUPPLIES_MAX_x_TYPEZ$OID_MARKER_SUPPLIES_COLORANT_INDEX_xZ)OID_MARKER_SUPPLIES_COLORANT_INDEX_x_TYPErn   ZOID_MARKER_COLORANT_VALUE_xZ OID_MARKER_COLORANT_VALUE_x_TYPEAGENT_KIND_MAINT_KITAGENT_KIND_ADF_KITAGENT_KIND_DRUM_KITAGENT_KIND_TRANSFER_KITAGENT_TYPE_UNSPECIFIEDZ!OID_MARKER_SUPPLIES_DESCRIPTION_xZ&OID_MARKER_SUPPLIES_DESCRIPTION_x_TYPErs   strip COLORANT_INDEX_TO_AGENT_TYPE_MAPfindrH   rj   AGENT_KIND_TONER_CARTRIDGEZOID_MARKER_STATUS_xZOID_MARKER_STATUS_x_TYPE AGENT_LEVEL_TRIGGER_SUFFICIENT_0rl   ZOID_MARKER_STATUS_OKZOID_MARKER_STATUS_MISINSTALLEDrq   Z OID_MARKER_STATUS_LOW_TONER_CONTZ OID_MARKER_STATUS_LOW_TONER_STOPAGENT_LEVEL_TRIGGER_MAY_BE_LOWr   floatrM   rt   ZDEVICE_STATUS_RUNNINGZCOVER_STATUS_CLOSEDZDETECTED_ERROR_STATE_NO_ERRORr   r~   )devZparsedIDresult_coder   r   Zcover_statusvaluer   r   r!   Zoidr`   Z
agent_kindZagent_levelZ	agent_maxZcolorant_indexZ
agent_typeZcolorant_valuerZ   Zagent_statusZagent_triggeragent_healthrV   rW   r"   r"   r#   StatusType3  s"   







 



















r   c              C   s   t d} i }x6dd tddD D ]}|| kr8|||< q"d||< q"W |jddd	dddd
d
d
dddd tdtd }}t |j }|j  x<|D ]4}tdj|t|g}tdj|t|| g}qW tj||a	d S )Nz_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~c             S   s   g | ]}t |qS r"   )chr)r    r!   r"   r"   r#   r$     s    z*setup_panel_translator.<locals>.<listcomp>r          «   »   £r   ?)                   =r   )
listrF   updater   keyssortjoinr   Z
TranslatorPANEL_TRANSLATOR_FUNC)Z
printablesmapr!   ZfrmZtoZmap_keysr"   r"   r#   setup_panel_translator  s4    


r   c             C   s  t dd }}| jttfkry| j  W n tk
r<   Y nX tjtjftj	tj
fg}x|D ]\}}| j|\}}|tjk r\t|jdj }t d|kr|jt dd\}}P | j|\}}|tjk r\t|jdj }P q\W t|p||pt d|p t dfS )Nr   zutf-8
r   )r   io_modeIO_MODE_RAWIO_MODE_UNIr   r   r   ZOID_HP_LINE1ZOID_HP_LINE2ZOID_SPM_LINE1ZOID_SPM_LINE2r   ERROR_MAX_OKr   encoderstripr;   r?   )r   Zline1Zline2ZoidsZoid1Zoid2resultr"   r"   r#   
PanelCheck  s(    


r   )r   r   r   r   r   )r   r   r   r   r   r   r   P   O   <   ;   (   '         r1   r   r*   r   c          !   C   sP  d}zy| j   W n, tk
r@   |tkr:tjd d}Y nLX |tkr| jtj\}}|tj	kr|d j
tttdtd d S |d j
ttt|td d S n| jtj\}}| jtj\}}|d k	o|d k	r|tj@ o|dkrhx8tD ]0}|d |  ko|d kn  rt| }P qW |tj@ r4t}	n|tj@ rFt}	nt}	|d j
tt|	||d d S |d j
tttdtd d S nd}W d | j  X |tkr2|r2zzyD| jd}
| jd	}| jd
}|d j
ttt|
 |t| d W n0 tk
r    |d j
tttdtd Y nX W d | j  X n|d j
tttdtd d S )NFz3PML channel open failed. Trying dynamic counters...Tr   r   )r)   r(   r+   r-   zlevel-triggerr            )r   r   ZSTATUS_BATTERY_CHECK_STDrD   rE   ZSTATUS_BATTERY_CHECK_PMLr   r   ZOID_BATTERY_LEVEL_2r   rM   ZAGENT_KIND_INT_BATTERYr   AGENT_HEALTH_UNKNOWNr   rl   ZOID_BATTERY_LEVELZOID_POWER_MODEZPOWER_MODE_BATTERY_LEVEL_KNOWNBATTERY_PML_TRIGGER_MAPZPOWER_MODE_CHARGINGAGENT_HEALTH_CHARGINGZPOWER_MODE_DISCHARGINGZAGENT_HEALTH_DISCHARGINGr   ZgetDynamicCounterBATTERY_HEALTH_MAPBATTERY_TRIGGER_MAP
closePrint)r   status_blockZbattery_checkZtry_dynamic_countersr   Zbattery_levelZ
power_moder!   Zbattery_trigger_levelr   Zbattery_healthr"   r"   r#   BatteryCheck  s    







"






r   c             C   s   dd | d D }t j|dd r&tS t|krdt|kr:tS t|krFtS t|krRt	S t
|kr^tS tS n@t|krxt|krxtS t|krt|krtS t|krt
|krtS tS d S )Nc             S   s   g | ]}|d  qS )r(   r"   )r    r\   r"   r"   r#   r$   p  s    z'getPenConfiguration.<locals>.<listcomp>r   c             S   s   | t kS )N)rj   )r!   r"   r"   r#   <lambda>r  s    z%getPenConfiguration.<locals>.<lambda>)r   allZAGENT_CONFIG_NONErj   rn   ZAGENT_CONFIG_BLACK_ONLYro   ZAGENT_CONFIG_COLOR_ONLYrp   ZAGENT_CONFIG_PHOTO_ONLYZAGENT_TYPE_GGKZAGENT_CONFIG_GREY_ONLYZAGENT_CONFIG_INVALIDZAGENT_CONFIG_COLOR_AND_BLACKZAGENT_CONFIG_COLOR_AND_PHOTOZAGENT_CONFIG_COLOR_AND_GREY)rR   rT   r"   r"   r#   getPenConfigurationo  s(    r   c          
   C   s   d\}}| j ttfkrzl| j  | jtj\}}|tkrP|rP|tjtj	fkrPd}| jtj
\}}|tkr|r|tjtjfkrd}W d | j  X ||fS )NFT)FF)r   r   r   r   r   r   ZOID_FAXJOB_TX_STATUSr   ZFAXJOB_TX_STATUS_IDLEZFAXJOB_TX_STATUS_DONEZOID_FAXJOB_RX_STATUSZFAXJOB_RX_STATUS_IDLEZFAXJOB_RX_STATUS_DONEr   )r   Z	tx_activeZ	rx_activer   Ztx_stateZrx_stater"   r"   r#   getFaxStatus  s    
r   iM  i3J  i6F  i5F  i1J  iF  iM  iL  iL  iAF  iM  iJ  iM  iM  iM  i@F  iL  i0J  iL  iL  iL  iL  iL  iL  iL  iI  iI  iI  iL  iHF  iL  iLF  i?F  i>F  i=F  i3F  iKF  iJF  iIF  i2J  iBF  iM  iL  iL  iL  iL  iL  i(M  iM  iL  iM  iM  iM  iM  i.  i.  iM  iM  iM  iM  iM  i.  i.  i.  i.  i.  i.  iw:  iM  ir:  i{:  i}:  i|:  iv:  i~:  iy:  ix:  i2  i2  i2  i2  i2  i2  i2  i2  i2  i2  i#6  i"6  i,6  i+6  i!6  i 6  i6  i6  i6  i6  i6  i6  i6  i6  i6  i6  i6  i6  i6  i6  i6  i(6  i'6  i)6  i&6  i6  i%6  i*6  i6  i6  i6  c          "   C   s  t  }t  }y| jd| | jd| W n   tjd Y nX |j }|j }i }i }|ry,tjdt| tj j	|}tj
| W n$ tjk
r   tjd i }Y nX |ry,tjdt| tj j	|}tj
| W n& tjk
r   tjd i }Y nX |jdd	}|s&|jdd	}|jd
d	}|jdd	}g }|jttd	|d	d | jtkr|jdd	}	|jttd	|	d	d |jdd	}
|jttd	|
d	d |jdd	}|jttd	|d	d t|d	d	dd	dddtj|td
S )Nz!/hp/device/info_device_status.xmlz/hp/device/info_ssp.xmlz'Failed to get Device status informationinfo_device_statuszDevice Status XML parse errorZinfo_sppzSSP XML parse errorz6devicestatuspage-devicestatus-statuslist-status-code-0r   z<devicestatuspage-suppliesstatus-blacksupply-percentremainingz)suppliesstatuspage-blacksupply-lowreached)r)   r(   r+   r-   zlevel-triggerz;devicestatuspage-suppliesstatus-cyansupply-percentremainingz>devicestatuspage-suppliesstatus-magentasupply-percentremainingz=devicestatuspage-suppliesstatus-yellowsupply-percentremainingr   )
r   r   ztop-doorzsupply-doorr2   z
photo-trayzin-tray1zin-tray2z
media-pathzstatus-code)r   Z	getEWSUrlrD   rP   getvaluedebug_blockr   r   ZXMLToDictParserZparseXMLrE   expat
ExpatErrorrK   rH   rM   r   rn   	tech_typeTECH_TYPE_COLOR_LASERAGENT_TYPE_CYANAGENT_TYPE_MAGENTAAGENT_TYPE_YELLOWr   TYPE6_STATUS_CODE_MAPrt   )r   r   Zinfo_sspr   Zsspstatus_codeZblack_supply_levelZblack_supply_lowr   Zcyan_supply_levelZmagenta_supply_levelZyellow_supply_levelr"   r"   r#   StatusType6(  s    








r   )Pi'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i '  i!'  i"'  i#'  i$'  i%'  i&'  i''  i('  i)'  i*'  i+'  i,'  i-'  i.'  i/'  i0'  i1'  i2'  i3'  i4'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i'  i<(  i=(  i>(  i?(  i@(  iA(  iB(  iC(  iD(  iE(  iF(  iG(  iH(  iI(  iJ(  iK(  iL(  iM(  iN(  i(  i(  i(  i(  iu  iU  iV  if  i  i'  c             C   s  | t k rtS |d krt| }t|dk r,tS tj| d }|d krt}d|   k oXdk n  rt|d }t|dd  }tjd|  tjd|  nBd|   k od	k n  rt|d }t|dd  }tjd
|  tjd|  nd|   k odk n  r<t|dd }t|d }tjd|  t	}nd|   k oPdk n  r`t
}n|d|   k otdk n  rtjd|   t}nJd|   k odk n  rt
}n&d|   k odk n  rt
}nd|   k odk n  r4t|d }t|dd  }tjd|  tjd|  t}nd|   k oHdk n  rVt}nd|   k ojdk n  rxt
}ndd |   k od!k n  rt}nBd"|   k od#k n  rt}n d$|   k od%k n  rt}tjd&| |f  |S )'Nr   i*  i.  r   r   z%Background paper loading for tray #%dzMedia code = %di.  i2  z)Background paper tray status for tray #%dzStatus code = %di:  i>  r   zOutput bin full for bin #%diN  i`m  i/u  iy  zAuto continuation condition #%di  i  i?  i(  i'  i  z%Foreground paper loading for tray #%di  i  i  i  i߫  iȯ  iO  i8  i  i  z*Mapped PJL error code %d to status code %d)MIN_PJL_ERROR_CODESTATUS_PRINTER_BUSYrQ   r:   PJL_STATUS_MAPrH   r   rD   rE   STATUS_PRINTER_OUTPUT_BIN_FULLr   r}   r   STATUS_PRINTER_HARD_ERROR)
error_codestr_coder   ZtrayZmediaZstatusbinr"   r"   r#   MapPJLErrorCode  sf    
r   z^CODE\s*=\s*(\d.*)$c          /   C   s  y| j   W n4 tk
r@ } ztj|j t}W Y d d }~X nX zy| jtd | jdddd}| j	  tj
dt| d}x<|j D ]0}|j }tj|jd}|d k	r|jd	}P qW tjd
|  yt|}W n tk
r   t}Y nX tjd|  t||}W n tk
r&   t}Y nX W d y| j  W n tk
rN   Y nX X g }|ttfkrrt}	t}
d}n$|tkrt}	t}
d}nt}	t}
d}tjd|	||
f  |j t!t"|	||
d | j#t$krd}t}
|t%krd}t}
tjd|	||
f  |j t!t&t||
d d}t}
|t'kr*d}t}
tjd|	||
f  |j t!t(t||
d d}t}
|t)krnd}t}
tjd|	||
f  |j t!t*t||
d |dkrd}nd	}tjd|  t+|||ddd	d	d	|d
S )Nz%%-12345X@PJL INFO STATUS 
%-12345Xi   r   T)ZtimeoutZallow_short_readzPJL return:Z10001zutf-8r   z	Code = %szError code = %dr   r   z&Agent: health=%d, level=%d, trigger=%d)r)   r(   r+   r-   zlevel-triggeriU  zStatus code = %d)
r   r   ztop-doorzsupply-doorr2   z
photo-trayzin-tray1zin-tray2z
media-pathzstatus-code),Z	openPrintr   rD   rP   msgr   Z
writePrintr   Z	readPrintcloser   r   
splitlinesr   pjl_code_patmatchdecodegrouprE   r   rN   DEFAULT_PJL_ERROR_CODEr   r   r   r   STATUS_PRINTER_LOW_BLACK_TONERrl   r   r   rq   r   rM   r   rn   r   r   STATUS_PRINTER_LOW_CYAN_TONERr    STATUS_PRINTER_LOW_MAGENTA_TONERr   STATUS_PRINTER_LOW_YELLOW_TONERr   r   )r   r^   r   Z
pjl_returnr   liner   r   r   r+   Zlevel_triggerr-   rU   r"   r"   r#   StatusType8:  s    










r  )inkinkCartridge	printheadtonertonerCartridge)ZpKZCMYMrd   YK)oklowoutemptymissingr   )r  misinstalledr  r   c             C   s   | dd dkrd}t d}xd|r| jt d}t| d|d  d}|| |d |d |   }| |d | d t|  } qW |} | S )	Nr   r      <r   z
r   r   )r   r   r   r:   )datasizeZtempr'   r"   r"   r#   ExtractXMLData  s     r  c             C   sr   t  }|r| |||}nV| ||}|rnx:|jtddkr`|jtddd }|jtds(P q(W |rnt|}|S )Nz

r   ZHTTPr  )r   r   r   r;   
startswithr  )funcZurlZfooterZdata_fpr  r"   r"   r#   StatusType10FetchUrl  s    
r  c             C   sl   t g ttttttttd
}t r4t r4t	j
d |S t| }i }t| }|j| i }t| }|j| |S )N)
r   r   ztop-doorzsupply-doorr2   z
photo-trayzin-tray1zin-tray2z
media-pathzstatus-codez=cannot get status for printer. please load ElementTree module)r   r3   r6   r7   r8   r9   rt   etree_loadedelementtree_loadedrD   rK   StatusType10AgentsStatusType10Mediar   StatusType10Status)r  r   Ztemp_status_blockr"   r"   r#   StatusType10  s*    


r#  c          &   C   sd  i }t | d}|s|S |jtdtdjtdtd}g }ytrPtj|}t rbtrbt|}|jd}x|D ]}t}d}d}	y|j	dj
}
|j	dj
}|j	d	j
}|
d
ks|
dks|
dks|
dkrJ|j	dj
}|dkrjyPt|j	dj
}|dkr|dkrd}n|dkr"d}n|dkr0d}d}	W n   d}Y nX n |
dkrXwtnd}|dkrjd}y|j	dj
}	W n*   y|j	dj
}	W n   Y nX Y nX tjd|
||||	f  tj|
ttj|ttj|tt|tj|t|	d}tjd|  |j| W qt tk
r.   tjd Y qtX qtW W n  tjtfk
rV   g }Y nX ||d< |S ) Nz /DevMgmt/ConsumableConfigDyn.xmlzccdyn:r   zdd:ZConsumableInfor   ZConsumableTypeEnumz#ConsumableLifeState/ConsumableStatez)ConsumableLifeState/MeasuredQuantityStater  r	  r  r  ZConsumableLabelCoder  Z"ConsumablePercentageLevelRemainingr   r  r   r  ZUnknownr
  r  r   ZProductNumberZConsumableSelectibilityNumberz>type '%s' state '%s' ink_type '%s' ink_level %d agent_sku = %s)r)   r(   r+   r-   zlevel-triggerz	agent-skuz%szno value found for attributer   )r  replacer   r  r	   r
   r  findallrl   r   textr   rD   rE   element_type10_xlaterH   rk   pen_type10_xlaterj   pen_health10_xlatepen_level10_xlater   rM   AttributeErrorr   r   UnboundLocalError)r  r   r  r   treeelementsr^   r+   Z	ink_levelZ	agent_skur(   ri   ZquantityStateZink_typeentryr"   r"   r#   r     sz    
$


"









r   c             C   s&  i }t | d}|s|S |jtdtdjtdtd}y.trJtj|}t r\tr\t|}|jd}W n tj	t
fk
r   g }Y nX xL|D ]D}|jdj}|dkrt|d< q|d	krt|d
< q|dkrt|d< qW y|jd}W n t
k
r   g }Y nX x"|D ]}|jdkrt|d< qW |S )Nz/DevMgmt/MediaHandlingDyn.xmlzmhdyn:r   zdd:Z	InputTrayZInputBinZTray1zin-tray1ZTray2zin-tray2Z	PhotoTrayz
photo-trayz+Accessories/MediaHandlingDeviceFunctionTypeZautoDuplexorr2   )r  r$  r   r  r	   r
   r  r%  r   r   r,  r   r&  ZIN_TRAY_PRESENTZPHOTO_TRAY_ENGAGEDZDUPLEXER_DOOR_CLOSED)r  r   r  r-  r.  r^   Zbin_namer"   r"   r#   r!  i  s:    
$







r!  c             C   s  i }t | d}|s|S |jtdtdjtdtd}|jtdtdjtdtdjtdtd}y.tr~tj|}t rtrt|}|jd}W n tj	t
fk
r   g }Y nX x|D ]}|jd	krt|d
< q|jdkrt|d
< q|jdkrt|d
< q|jdkrt|d
< q|jdkr4t|d
< q|jdkrJt|d
< q|jdkr`t|d
< q|jdkrvt|d
< q|jdkrt|d
< q|jdks|jdkrt|d
< q|jdkrt|d
< q|jdkrt|d
< q|jdkrt|d
< q|jdkrt|d
< q|jdkrt|d
< q|jdkr2t|d
< q|jdkrHt|d
< q|jdkr^t|d
< q|jdkrtt|d
< q|jdkrt|d
< q|jdkrt |d
< q|jd krt!|d
< q|jd!krt"|d
< q|jd"krt#|d
< q|jd#krt$|d
< q|jd$krt%|d
< q|jd%kr$t&|d
< q|jd&kr:t'|d
< q|jd'krPt(|d
< q|jd(krft)|d
< q|jd)kr|t*|d
< q|jd*krt+|d
< q|jd+krt,|d
< q|jd,krt-|d
< q|jd-krt.|d
< q|jd.krt/|d
< q|jd/kr t0|d
< q|jd0krt1|d
< q|jd1kr,t2|d
< q|jd2krBt3|d
< q|jd3krXt4|d
< q|jd4krnt5|d
< q|jd5krt5|d
< q|jd6krt6|d
< q|jd7krt7|d
< q|jd8krt8|d
< qt9|d
< qW |S )9Nz/DevMgmt/ProductStatusDyn.xmlzpsdyn:r   zlocid:zpscat:zdd:zad:zStatus/StatusCategoryZ
processingzstatus-codeZreadyZcloseDoorOrCoverZshuttingDownZ	cancelJobZtrayEmptyOrOpenZjamInPrinterZ	hardErrorZoutputBinFullZunexpectedSizeInTrayZsizeMismatchInTrayZinsertOrCloseTray2ZscannerErrorZscanProcessingZscannerAdfLoadedZscanToDestinationNotSetZscanWaitingForPCZscannerAdfJamZscannerAdfDoorOpenZfaxProcessingZ
faxSendingZfaxReceivingZ
faxDialingZfaxConnectingZfaxSendErrorZfaxErrorStorageFullZfaxReceiveErrorZfaxBlockingZinPowerSaveZincorrectCartridgeZcartridgeMissingZmissingPrintHeadZscannerADFMispickZmediaTooShortToAutoDuplexZinsertOrCloseTrayZinkTooLowToPrimeZcartridgeVeryLowZwasteMarkerCollectorAlmostFullZwasteMarkerCollectorFullZwasteMarkerCollectorFullPromptZmissingDuplexerZprintBarStallZoutputBinClosedZoutputBinOpenedZreseatDuplexerZunexpectedTypeInTrayZmanuallyFeed):r  r$  r   r  r	   r
   r  r%  r   r   r,  r&  r   rt   r~   STATUS_PRINTER_TURNING_OFFSTATUS_PRINTER_CANCELINGr}   r   r   r   Z"STATUS_PRINTER_MEDIA_SIZE_MISMATCHSTATUS_PRINTER_TRAY_2_MISSINGZEVENT_SCANNER_FAILZEVENT_START_SCAN_JOBZEVENT_SCAN_ADF_LOADEDZ EVENT_SCAN_TO_DESTINATION_NOTSETZEVENT_SCAN_WAITING_FOR_PCZEVENT_SCAN_ADF_JAMZEVENT_SCAN_ADF_DOOR_OPENZEVENT_START_FAX_JOBZSTATUS_FAX_TX_ACTIVEZSTATUS_FAX_RX_ACTIVEZEVENT_FAX_DIALINGZEVENT_FAX_CONNECTINGZEVENT_FAX_SEND_ERRORZEVENT_FAX_ERROR_STORAGE_FULLZEVENT_FAX_RECV_ERRORZEVENT_FAX_BLOCKINGZSTATUS_PRINTER_POWER_SAVEZSTATUS_PRINTER_CARTRIDGE_WRONGZ STATUS_PRINTER_CARTRIDGE_MISSINGZ STATUS_PRINTER_PRINTHEAD_MISSINGZSTATUS_SCANNER_ADF_MISPICKZ,STATUS_PRINTER_PAPER_TOO_SHORT_TO_AUTODUPLEX!STATUS_PRINTER_TRAY_2_3_DOOR_OPENZ#STATUS_PRINTER_INK_TOO_LOW_TO_PRIMESTATUS_PRINTER_VERY_LOW_ON_INKZ0STATUS_PRINTER_SERVICE_INK_CONTAINER_ALMOST_FULLZ)STATUS_PRINTER_SERVICE_INK_CONTAINER_FULLZ0STATUS_PRINTER_SERVICE_INK_CONTAINER_FULL_PROMPTZ$STATUS_PRINTER_DUPLEX_MODULE_MISSINGZSTATUS_PRINTER_PRINTHEAD_JAM STATUS_PRINTER_CLEAR_OUTPUT_AREAZSTATUS_PRINTER_RESEAT_DUPLEXERZ"STATUS_PRINTER_MEDIA_TYPE_MISMATCHZSTATUS_MANUALLY_FEEDSTATUS_UNKNOWN_CODE)r  r   r  r-  r.  r^   r"   r"   r#   r"    s    
$4


















































r"  )r  r	  r
  r  r  ztoner-cartridgemaintenanceKitzink-cartridge)	zmagenta inkzcyan inkz
yellow inkz	black inkzBlack CartridgezMagenta CartridgezCyan CartridgezYellow CartridgezMaintenance Kit)r  r  r  r  r  )r  r  r  )Znonezmedia-neededz	media-jamZshutdownz	toner-lowztoner-emptyz
cover-openz	door-openzinput-tray-missingz	media-lowzmedia-emptyzoutput-tray-missingzoutput-area-almost-fullzoutput-area-fullzmarker-supply-lowzmarker-supply-emptyZpausedr   c             C   s   i }| s|S yt| d d }| d d }|t kr8t|d< nF|tkrJt|d< n4|jdd}|jdd}|jdd}tj|t|d< W n: tk
r } ztj	d	|j
d   i }W Y d d }~X nX |S )
Nzprinter-stater   zprinter-state-reasonszstatus-codez-errorr   z-warningz-reportz3Exception occured while updating printer-state [%s])IPP_PRINTER_STATE_IDLErt   IPP_PRINTER_STATE_PROCESSINGr   r$  printer_state_reasons_xlaterH   	ExceptionrD   rE   args)attrsr   Zprinter_stateZprinter_state_reasonsr^   r"   r"   r#   StatusTypeIPPStatusO  s$    

r>  c                s"  i }g } s|S d xyЈt  d kr,P  d  dkrFd w d   d  krdd}nd	} fd
dtj D }tj d  tt |dkr|d ndtj|t d  tj|t	dd}t
jd|  |j| W n  tk
r   t
jd g S X d qW ||d< |S )Nr   zmarker-nameszmarker-typesr7  r   zmarker-levelszmarker-low-levelsr  r  c                s&   g | ]\}} d   j |r|qS )zmarker-names)r  )r    kv)r=  loopcntrr"   r#   r$     s    z'StatusTypeIPPAgents.<locals>.<listcomp>r   )r)   r(   r+   r-   zlevel-triggerz	agent-skuz%szno value found for attributer   )r:   marker_type_xlateitemsmarker_kind_xlaterH   rk   marker_state_xlaterl   marker_leveltrigger_xlater   rD   rE   rM   r+  rK   )r=  r   r   ri   Zmtyper/  r"   )r=  rA  r#   StatusTypeIPPAgentsj  s<    



rG  c             C   sH   t g ttttttttd
}tj| }|rD|j	t
| |j	t| |S )N)
r   r   ztop-doorzsupply-doorr2   z
photo-trayzin-tray1zin-tray2z
media-pathzstatus-code)r   r3   r6   r7   r8   r9   rt   cupsextZgetStatusAttributesr   rG  r>  )Z
device_urir   Zstatus_attrsr"   r"   r#   StatusTypeIPP  s    
rI  )r   )r   r   )r   r   )r   r   )r   r   )r   r   )r1   r   )r*   r   r  )r   r  i(i͵iʹi˹iϵiii"iiiiiii#iiiеiiieiiiii`iaibiiiiii¹iùi͹iiiiεii@iici:iiiزii	ii)i$i%i+i%iiii"i&i*i!i i"i.i&ii8iiiiiiiii<i>i?iAi=i;iBi:i8i9iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii)N)r   )r   ioZsixextr   r   r   r   r   gZxml.parsers.expatZparsersr   rerH  Z	xml.etreer	   r  ImportErrorZelementtree.ElementTreer
   r  Zcodesr   r   r   Zhpmudextr<   ZSTATUS_REV_01r@   ZSTATUS_REV_03r=   ru   r   r   rt   r   r0  ZSTATUS_PRINTER_REPORT_PRINTINGr1  ZSTATUS_PRINTER_IO_STALLZSTATUS_PRINTER_DRY_WAIT_TIMEZSTATUS_PRINTER_PEN_CHANGEr}   ZSTATUS_PRINTER_BANNER_EJECTZSTATUS_PRINTER_BANNER_MISMATCHZSTATUS_PRINTER_PHOTO_MISMATCHZSTATUS_PRINTER_DUPLEX_MISMATCHr   ZSTATUS_PRINTER_CARRIAGE_STALLZSTATUS_PRINTER_PAPER_STALLZSTATUS_PRINTER_PEN_FAILUREr   ZSTATUS_PRINTER_POWER_DOWNZSTATUS_PRINTER_FRONT_PANEL_TESTZ%STATUS_PRINTER_CLEAN_OUT_TRAY_MISSINGrr   rj   rn   r   r   r   rG   r4   r{   rB   rC   rA   r_   rx   r|   r   r   ZAGENT_TYPE_BLUEZAGENT_TYPE_PHOTO_BLACKZAGENT_TYPE_MATTE_BLACKZAGENT_TYPE_LGZAGENT_TYPE_GZAGENT_TYPE_DGZAGENT_TYPE_LCZAGENT_TYPE_LMZAGENT_TYPE_REDr   ZOID_MARKER_SUPPLIES_TYPE_OTHERr   Z OID_MARKER_SUPPLIES_TYPE_UNKNOWNZOID_MARKER_SUPPLIES_TYPE_TONERr   Z$OID_MARKER_SUPPLIES_TYPE_WASTE_TONERZOID_MARKER_SUPPLIES_TYPE_INKrJ   Z!OID_MARKER_SUPPLIES_TYPE_INK_CARTrm   Z#OID_MARKER_SUPPLIES_TYPE_INK_RIBBONZ"OID_MARKER_SUPPLIES_TYPE_WASTE_INKZOID_MARKER_SUPPLIES_TYPE_OPCr   Z"OID_MARKER_SUPPLIES_TYPE_DEVELOPERZ"OID_MARKER_SUPPLIES_TYPE_FUSER_OILZ"OID_MARKER_SUPPLIES_TYPE_SOLID_WAXZ#OID_MARKER_SUPPLIES_TYPE_RIBBON_WAXZ"OID_MARKER_SUPPLIES_TYPE_WASTE_WAXZOID_MARKER_SUPPLIES_TYPE_FUSERr   Z$OID_MARKER_SUPPLIES_TYPE_CORONA_WIREZ'OID_MARKER_SUPPLIES_TYPE_FUSER_OIL_WICKZ%OID_MARKER_SUPPLIES_TYPE_CLEANER_UNITZ+OID_MARKER_SUPPLIES_TYPE_FUSER_CLEANING_PADZ&OID_MARKER_SUPPLIES_TYPE_TRANSFER_UNITr   Z#OID_MARKER_SUPPLIES_TYPE_TONER_CARTZ$OID_MARKER_SUPPLIES_TYPE_FUSER_OILERZ&OID_MARKER_SUPPLIES_TYPE_ADF_MAINT_KITr   r   r   r   r   r   rl   ZAGENT_HEALTH_OVERTEMPr   rq   ZAGENT_HEALTH_FAILEDr   r   Z)AGENT_LEVEL_TRIGGER_ALMOST_DEFINITELY_OUTZ AGENT_LEVEL_TRIGGER_PROBABLY_OUTZ AGENT_LEVEL_TRIGGER_SUFFICIENT_4Z AGENT_LEVEL_TRIGGER_SUFFICIENT_2r   Z AGENT_LEVEL_TRIGGER_SUFFICIENT_1Z AGENT_LEVEL_TRIGGER_SUFFICIENT_3r   r   r   r   r   r   ZSTATUS_PRINTER_PEN_CLEANINGZ"STATUS_PRINTER_MANUAL_DUPLEX_BLOCKr~   Z"STATUS_PRINTER_MANUAL_FEED_BLOCKEDZSTATUS_PRINTER_FUSER_ERRORZSTATUS_PRINTER_NON_HP_INKr   r   r   r   r   r   r  r  r  r  r   r   r  r   compile
IGNORECASEr   r  rI   r'  ZAGENT_TYPE_PGro   r(  ZAGENT_LEVEL_UNKNOWNr*  r   r)  r  r  r#  r   r!  r"  r8  r9  ZIPP_PRINTER_STATE_STOPPEDrD  rB  rF  rE  ZSTATUS_PRINTER_EMPTY_TONERr3  Z STATUS_PRINTER_MEDIA_EMPTY_ERRORr2  r5  r4  ZSTATUS_PRINTER_PAUSEDr6  r:  r>  rG  rI  r"   r"   r"   r#   <module>   sZ  


~P-
 Q$!|%
Y	P 
L$ 
.