
    QDbJ                         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m	Z	 ddl
mZ ddl
mZ dgZdZd Z G d	 d
ej                         Z G d d      Zd Zy)    N)XML   )Device_debugprintOpenPrintingg      .@c                     | j                         }|j                  dd      }|j                  d      }|dk7  r)|j                  dd      }|j                  d      }|dk7  r)|S )N
 z  )stripreplacefind)textresultis      :/usr/lib/python3/dist-packages/cupshelpers/openprinting.py_normalize_spacer       s`    ZZ]F^^T3'FTA
r's+KK r' M    c                        e Zd ZddZd Zd Zy)_QueryThreadNc                     t         j                  j                  |        || _        || _        || _        || _        d| _        | j                  d       t        d| z         y )Nr   T+%s)
	threadingThread__init__parent
parameterscallback	user_datar   	setDaemonr   )selfr   r   r   r    s        r   r   z_QueryThread.__init__*   sQ    !!4($ "UT\"r   c                      t        d| z         y Nz-%sr   r"   s    r   __del__z_QueryThread.__del__5       UT\"r   c                    d}ddd}t         j                  j                  | j                        d| j                  j
                  d   d| j                  j
                  d   }d| j                  j                  |d	|| _        d
| _        d}	 t         j                  j                  | j                  |      }t         j                  j                  |t              5 }|j                         | _        d}d d d        t!        d| z         | j"                  (| j#                  || j$                  | j                         y y # 1 sw Y   LxY w#  t        j                         | _        Y lxY w)Nz
/query.cgiz!application/x-www-form-urlencodedz
text/plain)zContent-typeAcceptz&uilanguage=r   z&locale=zhttps://?r   r   )headerstimeoutz%s: query complete)urllibparse	urlencoder   r   languagebase_urlurlr   requestRequesturlopenHTTPS_TIMEOUTreadsysexc_infor   r   r    )r"   query_commandr+   paramsstatusreqresps          r   runz_QueryThread.run8   s+    %#F)+ <<))4??;;;''*;;''*, )-(<(<mVT	)..((7(CC'']'C t"iik 	)D01==$MM64>>4;;? % 	),,.DKs%   AE $E<E EE E0N)__name__
__module____qualname__r   r&   r@    r   r   r   r   )   s    	##@r   r   c                   8    e Zd ZddZd Zd ZddZddZd	dZy)
r   Nc                 .   | ddl }	 |j                  |j                        }|| _        d| _        d| _        d| _        t        d| j                  d| j                  d| j                         t        d| z         y# |j                  $ r d}Y pw xY w)	z
        @param language: language, as given by the first element of
        locale.setlocale().
        @type language: string
        Nr   Czwww.openprinting.orgr   zOpenPrinting: Init r   r   )	locale	getlocaleLC_MESSAGESErrorr1   r2   onlyfreeonlymanufacturerr   )r"   r1   rI   s      r   r   zOpenPrinting.__init__T   s     !++F,>,>? ! /  !dmmT]]TXTiTijkUT\" << s   B   BBc                      t        d| z         y r$   r   r%   s    r   r&   zOpenPrinting.__del__l   r'   r   c                 "    	 d|_         y#  Y yxY w)zU
        Cancel an operation.

        @param handle: query/operation handle
        N)r   )r"   handles     r   cancelOperationzOpenPrinting.cancelOperationo   s    	"FO	s   
 c                 B    t        | |||      }|j                          |S )ad  
        Run a web query for a driver.

        @type parameters: dict
        @param parameters: URL parameters
        @type callback: function
        @param callback: callback function, taking (integer, user_data, string)
        parameters with the first parameter being the status code, zero for
        success
        @return: query handle
        )r   start)r"   r   r   r    
the_threads        r   webQueryzOpenPrinting.webQuery{   s&     "4XyI
r   c                 l    d }d|dd}t        dt        |      z         | j                  ||||f      S )an  
        Search for printers using a search term.

        @type searchterm: string
        @param searchterm: search term
        @type callback: function
        @param callback: callback function, taking (integer, user_data, string)
        parameters with the first parameter being the status code, zero for
        success
        @return: query handle
        c                 P   |\  }}| dk7  r || ||       y d} i }	 t        |      }|j                  d      D ]v  }|j                  d      }|j                  d      }	|j                  d      }
|9|	<|
?|j                  }|	j                  }|
j                  }|sf|si|sl|dz   |z   ||<   x 	 t        dt        |      z         	  || ||       y #  d} t	        j
                         }Y =xY w#  t	        j
                         \  }}}t        j                  |d 	      }t        |      r|d t        |      dz
   }t        j                  ||      }t        j                  |      D ]  }t        |j                                 t        |d   j                                Y y xY w)
Nr   printeridmakemodelr   r   z5searchPrinters/parse_result: OpenPrinting entries: %s)limit)r   findallr   r   r9   r:   r   repr	traceback
extract_tblenformat_exception_only	format_tbprintr   )r=   datar   r   r    printersrootrY   rZ   r[   r\   idtxtmaketxtmodeltxttypevaluetbtblastextxtlines                       r   parse_resultz1OpenPrinting.searchPrinters.<locals>.parse_result   s   $(!Xy{&)V4FH+F|  $||Y7 	GG t,B"<<0D#LL'2E~$*:u?P ""&))#(:: W.5mh.FHUO	G PSWX`Saab
*&)X6+<<?
*$'LLO!ub"--r><#$5S&\A%56F!77uE%//3 *D4::=)*uQx~~()s=   AC 0C 3C 6&C C  C #C 	
C1 C.1B2F%rg   xml)rl   rY   formatz)searchPrinters: Querying OpenPrinting: %s)r   r_   rV   )r"   
searchtermr   r    rr   r<   s         r   searchPrinterszOpenPrinting.searchPrinters   sF    &	*R &("% 	@4<OP}}V\Hi3HIIr   c                    d }t        |t              r|j                  }t        j                         }|dk(  rt        j
                         d   dk(  rd}dddd|dt        | j                        t        | j                        |dd	
}|r|j                  |       t        d
t        |      z         | j                  ||||f      S )ah  
        Obtain a list of printer drivers.

        @type model: string or cupshelpers.Device
        @param model: foomatic printer model string or a cupshelpers.Device
        object
        @type callback: function
        @param callback: callback function, taking (integer, user_data, string)
        parameters with the first parameter being the status code, zero for
        success
        @type extra_options: string -> string dictionary
        @param extra_options: Additional search options, see
        http://www.linuxfoundation.org/en/OpenPrinting/Database/Query
        @return: query handle
        c           	      D   |\  }}| dk7  r
 || ||       	 |j                  dd      j                  d      }t        |      }i }|j                  d      D ]w  }|j                  j                  d      }|"i }	dD ];  }
|j                  |
      }||j                  $t        |j                        |	|
<   = |j                  d      }||j                  |j                  |	d<   d|	vs|	d   r|j                  d	      }|_|j                  }|Q	 t        j                  j                  |t        
      5 }|j                         j                  d      |	d<   d d d        dD ]  }|j                  |      d u|	|<    |	d    |	d<   g }|j                  d      }||j                  d      D ]{  }i }|j                  t        |j                        |d<   nd|d<   |j                  j                  d      |d<   |j                  j                  d      |d<   |j                  |       } |r||	d<   d|	vsd|	vr|j                  d      }|=i }dD ]%  }
|j                  |
      }||j                  ||
<   ' |r||	|j                   <   i }|j                  d      }|t#        |      D ]  }i }|j                  d      D ]  }i }dD ]%  }
|j                  |
      }||j                  ||
<   ' |j                  d      }|9t#        |      D ]+  }|j                  |j%                  di       |j                   <   - |||j                  d   <    |||j                   <    |r||	d<   g }|j                  d      }|+t#        |      D ]  }|j                  |j                          |r||	d<   |	||<   t        dt'        |      z         z  |d||       y # 1 sw Y   xY w#  t        d|z         Y xY w#   |d|t)        j*                                Y y xY w) Nr   zUTF-8r   )errorsdriverrZ   )namer3   supplierlicenseshortdescriptionlicensetextlicenselinkr,   zutf-8zCannot retrieve %s)nonfreesoftwarerecommendedpatentsthirdpartysuppliedmanufacturersuppliedr   freesoftwaresupportcontactssupportcontactr{    r3   levelfunctionality)r   lineartgraphicsphotospeedpackagespackage)realversionversionreleaser3   pkgsysfingerprintrepositoriesfileppdsz2listDrivers/parse_result: OpenPrinting entries: %sr   )decodeencoder   r^   attribgetr   r   r   r.   r4   r6   r7   r8   r   appendtaglist
setdefaultr_   r9   r:   )r=   rf   r   r   r    rh   driversrz   rZ   dict	attributeelementlicense_urlr?   booleanr   	containerscr   r   r   archrpmsr   rpmr   r   r   eachs                                r   rr   z.OpenPrinting.listDrivers.<locals>.parse_result   s   $(!Xy{&)V4Z9wyAHHQF|V #llH5 hgF**D1Bz D&; N	"(++y"9".7<<3K.>.MDO	N %kk=9G*w||/G.5ll]+(D0M*2"(++}"=".*1,,K*6!=)/)?)?Ub)?)c %Zgk>Biik>P>PQX>Y](;%Z$< J )/W(=T(IWJ 044E/F+FD(&(O &-> ?I ,"+"3"35E"F 	DB-/N!ww2$4bgg$> !/v 6 :<v 646IIMM54IN5168iimmW6MN73+22NC	D '2A./T)U$->  &_ =I ,(**< HI&/nni&@G&2;B<<i 8	H
 )2?D/!H &Z 8I ,$(O 6D#%D+/<<+C C&(2A !FI /6llI.FG'.':9@I!F 07||^/L#/#;26|2D %eY_YdYd~r(J6::(V%e @CW^^F%; <C 26HTXX.#6&  +3Z(D &V 4I ,$(O 4D KK34 '+V"&GBK!UX\]dXe!efQhgR !Y0g%Z %Z!=$/0D0;1< %=b9!Y8sX   A<O? O?  A2O? %O)8#OO)#DO? ,A5O? "C9O? O&	!O))O<9O? ?Px86_64r   32biti386r   1rs   )
rl   moreinfoshowprinteridonlynewestdriverpackagesarchitecturesnoobsoletesrM   rN   rY   rt   z&listDrivers: Querying OpenPrinting: %s)
isinstancer   rZ   platformmachinearchitecturestrrM   rN   updater   r_   rV   )r"   r\   r   r    extra_optionsrr   r   r<   s           r   listDriverszOpenPrinting.listDrivers   s    "_	9B eV$HHE'')
 8#(=(=(?(Bg(M!L$"$'/2$0"%"DMM2'*D,A,A'B#"	$ MM-(=VLM}}V\Hi3HIIr   rA   )NN)	rB   rC   rD   r   r&   rR   rV   rv   r   rE   r   r   r   r   S   s$    #0#
 :JxJJr   c                      ddl m ddl m dd lj	                           G fdd      }  |        }j                          y )Nr   )Gdk)Gtkc                   B    e Zd ZfdZfdZ fdZ fdZ fdZy)_simple_gui.<locals>.QueryAppc                    t               | _        j                  dd d      | _        | j                  j	                  j
                  j                  j                  dddd       | j                  j                  d       | j                  j                  j                  d	       j                  j                  d
d      }| j                  j                  j                  |ddd       |j                  d       j                         | _        |j                  | j                  d
d
d       j!                         }j#                         | _        |j'                  | j$                         |j                  |ddd       | j                  j)                  d| j*                         | j                  j-                          y )NzOpenPrinting query applicationT)titletransient_formodalSearch
   List         Fr   response)r   openprintingDialogmainadd_buttonsSTOCK_CLOSEResponseTypeCLOSEset_border_widthvboxset_spacingVBoxnew
pack_startEntryentryScrolledWindowTextViewtvaddconnectr   show_all)r"   r   swr   s      r   r   z&_simple_gui.<locals>.QueryApp.__init__  sK    ,D

*J26d # DDIII!!3??C4D4D4J4J#+R#)2/ II&&*IINN&&*88<<*DIINN%%tT4;!!1%DJOOTZZq9##&BlloDGFFDGGOORtQ/IIz4==9II!r   c                    |j                   j                  k(  s|j                   j                  k(  rj                          |dk(  r>| j                  j                  | j                  j                         | j                         |dk(  r?| j                  j                  | j                  j                         | j                         y y )Nr   r   )r   r   DELETE_EVENT	main_quitr   rv   r   get_textsearch_printers_callbackr   list_drivers_callback)r"   dialogr   r   s      r   r   z&_simple_gui.<locals>.QueryApp.response  s    C,,222C,,999 2~!!00$**2E2E2H262O2OQ 2~!!--tzz/B/B/E/3/I/IK r   c                     |dk7  r|d   d}|j                         D ]
  }||dz   z  } j                          | j                  j                         j	                  |       j                          y )Nr   r   r   r
   )valuesthreads_enterr   
get_bufferset_textthreads_leave)r"   r=   r    rg   r   rY   r   s         r   r   z6_simple_gui.<locals>.QueryApp.search_printers_callback  sp    {qk!D#??- '$&' GG!**D1 r   c                     |dk7  r|d   j                  |      }j                          | j                  j                         j	                  |       j                          y )Nr   r   )pformatr   r   r   r   r   )r"   r=   r    r   r   r   pprints        r   r   z3_simple_gui.<locals>.QueryApp.list_drivers_callback  sU    {aj >>7+D GG!**D1 r   c                     j                          | j                  j                         j                  t	        |             t        dd      j                  t	        |             j                          y )Nz
result.xmlw)r   r   r   r   r   openwriter   )r"   r=   r    r   r   s       r   query_callbackz,_simple_gui.<locals>.QueryApp.query_callback  sS     GG!**CL9,$**CL9 r   N)rB   rC   rD   r   r   r   r   r   )r   r   r   s   r   QueryAppr     s    	"*	K		!	!	!r   r   )gi.repositoryr   r   r   threads_initr   )r   qr   r   r   s     @@@r   _simple_guir     s5    !!<! <!| 	
AHHKr   )urllib.requestr.   urllib.parseurllib.errorr   r   r`   r9   xml.etree.ElementTreer   r   r   r   __all__r7   r   r   r   r   r   rE   r   r   <module>r     sY   , R Q Q 
 %  
(@I$$ (@T~J ~J@
Dr   