
    Hfd&                     d   d dl Z d dlZd dl d dlZ G d de      Z G d d      Z G d de      Zed	k(  rzd d
lm	Z	  e
d        G d d      Z ed      Z e	j                         Zej                          ej!                           ed      Zej                          ej#                          yy)    N)*c                   $    e Zd Zd Zd Zd Zd Zy)SemanticOperationsc                     g | _         y N)_operation_stackselfs    -/usr/share/system-config-printer/asyncconn.py__init__zSemanticOperations.__init__   s
     "    c                 :    | j                   j                  |       y r   )r   append)r
   	operations     r   _begin_operationz#SemanticOperations._begin_operation"   s    $$i0r   c                 8    | j                   j                          y r   )r   popr	   s    r   _end_operationz!SemanticOperations._end_operation%   s    !!$r   c                 @    	 | j                   d   S # t        $ r Y y w xY w)Nr   )r   
IndexErrorr	   s    r   current_operationz$SemanticOperations.current_operation(   s*    	((++ 		s    	N)__name__
__module____qualname__r   r   r   r    r   r   r   r      s    #1%r   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	_AsyncMethodCallc                 f    || _         || _        || _        || _        d| _        t        d| z         y )NF+%s)_fn_reply_handler_error_handler_auth_handler
_destroyed
debugprint)r
   fnreply_handlererror_handlerauth_handlers        r   r   z_AsyncMethodCall.__init__3   s4    ++)EDL!r   c                      t        d| z         y Nz-%s)r%   r	   s    r   __del__z_AsyncMethodCall.__del__;   s    EDL!r   c                     | j                   ry t        d| z         d| _         d | _        d | _        d | _        d | _        d | _        d | _        y NDESTROY: %sT)r$   r%   r!   r"   r#   _reply_data_error_data
_auth_datar	   s    r   destroyz_AsyncMethodCall.destroy>   sO    ??MD()""!r   c                 :   |j                  d      | _        |j                  d      | _        |j                  d      | _        | j                  |d<   | j
                  |d<   | j                  |d<   t        | d| j                          | j                  |i | y )Nr'   r(   r)   z
: calling )	getr0   r1   r2   r'   r(   r)   r%   r    )r
   argskwdss      r   runz_AsyncMethodCall.runK   s    88_588_5((N3 $ 2 2_ $ 2 2_#00^dhh784 4 r   c                     | j                   s9t        | d| j                          | j                  | | j                  g|  y y )Nz: to reply_handler at )r$   r%   r!   r0   r
   r6   s     r   r'   z_AsyncMethodCall.reply_handlerU   E    8<8K8KM NDt'7'7?$? r   c                     | j                   s9t        | d| j                          | j                  | | j                  g|  y y )Nz: to error_handler at )r$   r%   r"   r1   r:   s     r   r(   z_AsyncMethodCall.error_handler[   r;   r   c                     | j                   s9t        | d| j                          | j                  | | j                  g|  y y )Nz: to auth_handler at )r$   r%   r#   	auth_datar:   s     r   r)   z_AsyncMethodCall.auth_handlera   sC    t7;7I7IK LDdnn<t< r   N)
r   r   r   r   r,   r3   r8   r'   r(   r)   r   r   r   r   r   2   s'    ""!@@=r   r   c                   V     e Zd Z	 	 	 d
 fd	Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
Connectionc
                     t         t                   d _        |t	        j
                         }|j                  d      xs |dk(  xr t        j                         dk7  }
 fd} fd} fd}|
r0|r.t        d       dd l
}|j                  ||||||	      }| _        n1t        d
       dd l}|j                  |||||||||	 
      }| _        t         j                  j                         }t         j                  j"                        }g }t%         j                        D ]  }|j                  d      rt'         j                  |      }t        |      |k7  rt        |      |k7  rHt)         |      rUt+         | j-                  |             |j/                  |        | _        g  _        t        d z         y )NF/	localhostr   c                 ,    j                  d |       y r   )_subst_reply_handler)connreplyr'   r
   s     r   subst_reply_handlerz0Connection.__init__.<locals>.subst_reply_handlerz   s    %%t]EBr   c                 ,    j                  d |       y r   )_subst_error_handler)rF   excr(   r
   s     r   subst_error_handlerz0Connection.__init__.<locals>.subst_error_handler}   s    %%t]C@r   c                 0    j                  d | ||       y r   )_subst_auth_handler)promptrF   methodresourcer)   r
   s       r   subst_auth_handlerz/Connection.__init__.<locals>.subst_auth_handler   s    $$dL&&(Sr   zUsing polkit-1 connection class)r'   r(   hostport
encryptionparentzUsing IPP connection class)
r'   r(   r)   rS   rT   rU   rV   try_as_rootprompt_allowedsemantic_r   )superr@   r   r$   cups	getServer
startswithosgetuidr%   asyncpk1PK1Connection_connasyncippIPPAuthConnectiontypegetPrinters
getDevicesdirgetattrhasattrsetattr_make_bindingr   	_bindings_methodcalls)r
   r'   r(   r)   rS   rT   rU   rV   rW   rX   use_pkrH   rL   rR   ra   crd   
methodtypeinstancemethodtypebindingsfnamer&   	__class__s   ````                  r   r   zConnection.__init__m   s    	z4), <>>#D??C(?DK,? $)),!# 		C	A	T k9:&&6I6I-13=/5	 ' 7A
 DJ45**:M:M9K15D7A398C;I59 + ;A DJ4::112
!4::#8#89$**% 	(E%$**e,BRyJ&498J+JD%(ud&8&8"&=>'	( "EDL!r   c                 4    t        j                  d| z         y r+   debugr%   r	   s    r   r,   zConnection.__del__   s    %$,'r   c                     t        d| z         d| _        	 | j                  j                          | j
                  D ]  }|j                           | j                  D ]  }t        | |        y # t        $ r Y Jw xY wr.   )r%   r$   rc   r3   AttributeErrorro   rn   delattr)r
   
methodcallbindings      r   r3   zConnection.destroy   s    MD()	JJ! ++ 	"J!	" ~~ 	$GT7#	$  		s   A0 0	A<;A<c                       fdS )Nc                  0     j                   g| i |S r   )_call_function)r6   r7   r&   r
   s     r   <lambda>z*Connection._make_binding.<locals>.<lambda>   s    %8T%8%8"%Lt%Lt%L r   r   )r
   r&   s   ``r   rm   zConnection._make_binding   s	    LLr   c                     t        || j                  | j                  | j                        }| j                  j                  |        |j                  |i | y r   )r   rE   rJ   rN   ro   r   r8   )r
   r&   r6   r7   r}   s        r   r   zConnection._call_function   sS    %r'+'@'@'+'@'@'+'?'?A
 	  *-
&&r   c                     |r=|j                          | j                  j                  |      }| j                  |= |dd  }|r'| j                  st	        | d|        || g|  y y y N   : chaining up to r3   ro   indexr$   r%   )r
   r}   r'   r6   is        r   rE   zConnection._subst_reply_handler   j    !!!''4A!!!$8D4GH4'$' "1=r   c                     |r=|j                          | j                  j                  |      }| j                  |= |dd  }|r'| j                  st	        | d|        || g|  y y y r   r   )r
   r}   r(   r6   r   s        r   rJ   zConnection._subst_error_handler   r   r   c                     |r8|j                          | j                  j                  |      }| j                  |= |r)| j                  st	        | d|        ||| ||       y y y )Nr   r   )r
   r}   r)   rO   rP   rQ   r   s          r   rN   zConnection._subst_auth_handler   s`    !!!''4A!!!$4FG&$9 !0<r   c                 :    | j                   j                  |       y)z*Call this from your auth_handler function.N)threadset_auth_info)r
   passwords     r   r   zConnection.set_auth_info   s    !!8,r   )	NNNNNNNTT)r   r   r   r   r,   r3   rm   r   rE   rJ   rN   r   __classcell__)rv   s   @r   r@   r@   l   s;    :>FJ@D<"|($M'((:-r   r@   __main__)GObjectTc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Testc                 L    t               | _        || _        t        d| z         y )Nr   )r@   rc   _quitr%   )r
   quits     r   r   zTest.__init__   s    #DJDJ%r   c                 4    t        j                  d| z         y r+   rx   r	   s    r   r,   zTest.__del__   s    edl+r   c                     t        d| z         | j                  j                          | j                  rt        j                          y y )Nr/   )r%   rc   r3   r   loopr   r	   s    r   r3   zTest.destroy   s4    ,-JJ!zz		 r   c                 f    | j                   j                  | j                  | j                         y )N)r'   r(   )rc   rh   getDevices_replygetDevices_errorr	   s    r   rh   zTest.getDevices   s+    JJ!!1F1F151F1F " Hr   c                 <    t        ||       | j                          y r   )printr3   )r
   rF   results      r   r   zTest.getDevices_reply   s    4 LLOr   c                 L    t        t        |             | j                          y r   )r   reprr3   )r
   rF   rK   s      r   r   zTest.getDevices_error  s    4:LLOr   N)	r   r   r   r   r,   r3   rh   r   r   r   r   r   r   r      s!    	&
	,		H		r   r   F)r\   r_   ry   objectr   r   r@   r   gi.repositoryr   set_debuggingr   tMainLoopr   rh   r3   r8   r   r   r   <module>r      s   *  	   (3= 3=tz-# z-x z%4 6 	eA7DLLOIILdALLOHHKO r   