
    V#gd                        S SK r  S SKJr  S SKrS SKJr  S SKJ	r	J
r
JrJr  Sr\ R                  " S5      rS SKJrJrJrJrJr  S SKJr   " S	 S
5      r " S S5      r " S S\5      r " S S\5      rg! \ a	    S SKJr   Nwf = f)    N)RLock)process_introspection_data)DBusExceptionIntrospectionParserExceptionMissingErrorHandlerExceptionMissingReplyHandlerExceptionrestructuredtextzdbus.proxies)BUS_DAEMON_IFACEBUS_DAEMON_NAMEBUS_DAEMON_PATHINTROSPECTABLE_IFACE
LOCAL_PATH)is_py2c                   *    \ rS rSrSrS rS rS rSrg)_DeferredMethod4   zPA proxy method which will only get called once we have its
introspection reply.
c                 J    Xl         UR                  U l        X l        X0l        g N)_proxy_method_method_name_append_block)selfproxy_methodappendblocks       ./usr/lib/python3/dist-packages/dbus/proxies.py__init___DeferredMethod.__init__8   s     )(55    c                     SU;   d  UR                  SS5      (       a  U R                  U R                  X5        g U R                  5         U R                  " U0 UD6$ )Nreply_handlerignore_replyF)getr   r   r   r   argskeywordss      r   __call___DeferredMethod.__call__?   sS    x'LL//LL++T< KKM%%t8x88r    c                 <    U R                  U R                  X5        g r   )r   r   r%   s      r   
call_async_DeferredMethod.call_asyncJ   s    T''8r    )r   r   r   r   N	__name__
__module____qualname____firstlineno____doc__r   r(   r+   __static_attributes__ r    r   r   r   4   s    	99r    r   c                   *    \ rS rSrSrS rS rS rSrg)_ProxyMethodN   zA proxy method.

Typically a member of a ProxyObject. Calls to the
method produce messages that travel over the Bus and are routed
to a specific named Service.
c                     U[         :X  a  [        S[         -  5      eXl        X l        X0l        X@l        [        R                  " U5        XPl        Ub  [        R                  " U5        X`l
        g )Nz1Methods may not be called on the reserved path %s)r   r   _proxy_connection_named_service_object_path_dbus_bindingsvalidate_member_namer   validate_interface_name_dbus_interface)r   proxy
connectionbus_nameobject_pathmethod_nameifaces          r   r   _ProxyMethod.__init__U   sk    *$ !*,6!7 8 8  %)'*++K8*2259$r    c           
         UR                  SS 5      nUR                  SS 5      nUR                  SS5      nUR                  SS 5      nUc  Ub,  Uc
  [        5       eUc
  [        5       eU(       a  [        S5      eUR                  SU R                  5      nUcH  Uc  U R
                  nOUS-   U R
                  -   nU R                  R                  R                  US 5      nU(       d  UbC  U R                  R                  " U R                  U R                  UU R
                  UUUU40 UD6  g U R                  R                  " U R                  U R                  UU R
                  UU40 UD6$ )	Nr"   error_handlerr#   F	signaturez6ignore_reply and reply_handler cannot be used togetherdbus_interface.)popr   r   	TypeErrorr@   r   r9   _introspect_method_mapr$   r:   r+   r;   r<   call_blocking)	r   r&   r'   r"   rI   r#   rJ   rK   keys	            r   r(   _ProxyMethod.__call__i   sx    _d; _d;||NE:LLd3	$(A$244&244 !0 1 1 "&68L8LM%''$s*T->->>::>>sDII=4''(;(;(,(9(9(6(,(9(9(1(,(5(54 +34 ##11$2E2E262C2C2@262C2C2;26> 5=> >r    c           
         UR                  SS 5      nUR                  SS 5      nUR                  SS 5      nUR                  SU R                  5      nUcL  U(       a  US-   U R                  -   nOU R                  nU R                  R                  R                  US 5      nU R                  R                  " U R                  U R                  UU R                  UUUU40 UD6  g )Nr"   rI   rJ   rK   rL   )
rM   r@   r   r9   rO   r$   r:   r+   r;   r<   )r   r&   r'   r"   rI   rJ   rK   rQ   s           r   r+   _ProxyMethod.call_async   s     _d; _d;LLd3	!&68L8LM$s*T->->>''::>>sDII##D$7$7$($5$5$2$($5$5$-$($1$1	0 '/	0r    )r:   r@   r   r;   r<   r9   Nr-   r4   r    r   r6   r6   N   s    %(*>X0r    r6   c                       \ rS rSrSr\r\rSr	Sr
Sr  SS jr\" S SSS	5      r\" S
 SSS5      r\" S SSS5      rSS jrS rS rS rS rS rS rS rSS jrS r\rSrg)ProxyObject   zA proxy to the remote Object.

A ProxyObject is provided by the Bus. ProxyObjects
have member functions, and can be called like normal Python objects.
r         Nc                 ,   UR                  SS5      nUb"  Ub  [        S5      eUnSSKJn  U" S[        SS9  UR                  S	S5      n	U	b"  Ub  [        S
5      eU	nSSKJn  U" S[        SS9  U(       a+  [        SSR                  UR                  5       5      -  5      eU(       a  UR                  5         Xl        Ub  [        R                  " U5        U=U l        U l        [        R                  " U5        X0l        U(       d  UR                  U5      U l        SU l        / U l        0 U l        ['        5       U l        U(       a  U R                  [*        :X  a  U R,                  U l        gU R0                  U l        U R3                  5       U l        g)ah  Initialize the proxy object.

:Parameters:
    `conn` : `dbus.connection.Connection`
        The bus or connection on which to find this object.
        The keyword argument `bus` is a deprecated alias for this.
    `bus_name` : str
        A bus name for the application owning the object, to be used
        as the destination for method calls and the sender for
        signal matches. The keyword argument ``named_service`` is a
        deprecated alias for this.
    `object_path` : str
        The object path at which the application exports the object
    `introspect` : bool
        If true (default), attempt to introspect the remote
        object to find out supported methods and their signatures
    `follow_name_owner_changes` : bool
        If true (default is false) and the `bus_name` is a
        well-known name, follow ownership changes for that name
busNz%conn and bus cannot both be specifiedr   )warnz`Passing the bus parameter to ProxyObject by name is deprecated: please use positional parametersrY   )
stacklevelnamed_servicez3bus_name and named_service cannot both be specifiedzjPassing the named_service parameter to ProxyObject by name is deprecated: please use positional parametersz>ProxyObject.__init__ does not take these keyword arguments: %sz, )rM   rN   warningsr\   DeprecationWarningjoinkeys_require_main_loop_busr=   validate_bus_namer;   _requested_bus_namevalidate_object_path__dbus_object_path__activate_name_owner_pending_introspect_pending_introspect_queuerO   r   _introspect_lockr    INTROSPECT_STATE_DONT_INTROSPECT_introspect_state'INTROSPECT_STATE_INTROSPECT_IN_PROGRESS_Introspect)
r   connrC   rD   
introspectfollow_name_owner_changeskwargsr[   r\   r^   s
             r   r   ProxyObject.__init__   s   , jj%? GHHD% @#3 

?D9$# !, - -$H% C#3  4"ii67 8 8 % ##%	,,X6 :BAd6++K8$/!("&":":8"DD $( )+&&(# !&T66*D%)%J%JD"%)%Q%QD"'+'7'7'9D$r    c                     U R                   $ r   )r;   r   s    r   <lambda>ProxyObject.<lambda>  s
    T%8%8r    a  The bus name to which this proxy is bound. (Read-only,
            may change.)

            If the proxy was instantiated using a unique name, this property
            is that unique name.

            If the proxy was instantiated with a well-known name and with
            ``follow_name_owner_changes`` set false (the default), this
            property is the unique name of the connection that owned that
            well-known name when the proxy was instantiated, which might
            not actually own the requested well-known name any more.

            If the proxy was instantiated with a well-known name and with
            ``follow_name_owner_changes`` set true, this property is that
            well-known name.
            c                     U R                   $ r   )rf   rw   s    r   rx   ry      s
    t/G/Gr    z[The bus name which was requested when this proxy was
            instantiated.
            c                     U R                   $ r   )rh   rw   s    r   rx   ry   &  s
    (A(Ar    zThe object-path of this proxy.c                 n    U R                   R                  " U4UUU R                  U R                  S.UD6$ )a:  Arrange for the given function to be called when the given signal
is received.

:Parameters:
    `signal_name` : str
        The name of the signal
    `handler_function` : callable
        A function to be called when the signal is emitted by
        the remote object. Its positional arguments will be the
        arguments of the signal; optionally, it may be given
        keyword arguments as described below.
    `dbus_interface` : str
        Optional interface with which to qualify the signal name.
        If None (the default) the handler will be called whenever a
        signal of the given member name is received, whatever
        its interface.
:Keywords:
    `utf8_strings` : bool
        If True, the handler function will receive any string
        arguments as dbus.UTF8String objects (a subclass of str
        guaranteed to be UTF-8). If False (default) it will receive
        any string arguments as dbus.String objects (a subclass of
        unicode).
    `byte_arrays` : bool
        If True, the handler function will receive any byte-array
        arguments as dbus.ByteArray objects (a subclass of str).
        If False (default) it will receive any byte-array
        arguments as a dbus.Array of dbus.Byte (subclasses of:
        a list of ints).
    `sender_keyword` : str
        If not None (the default), the handler function will receive
        the unique name of the sending endpoint as a keyword
        argument with this name
    `destination_keyword` : str
        If not None (the default), the handler function will receive
        the bus name of the destination (or None if the signal is a
        broadcast, as is usual) as a keyword argument with this name.
    `interface_keyword` : str
        If not None (the default), the handler function will receive
        the signal interface as a keyword argument with this name.
    `member_keyword` : str
        If not None (the default), the handler function will receive
        the signal name as a keyword argument with this name.
    `path_keyword` : str
        If not None (the default), the handler function will receive
        the object-path of the sending object as a keyword argument
        with this name
    `message_keyword` : str
        If not None (the default), the handler function will receive
        the `dbus.lowlevel.SignalMessage` as a keyword argument with
        this name.
    `arg...` : unicode or UTF-8 str
        If there are additional keyword parameters of the form
        ``arg``\ *n*, match only signals where the *n*\ th argument
        is the value given for that keyword parameter. As of this time
        only string arguments can be matched (in particular,
        object paths and signatures can't).
    `arg0namespace` : str
        If not None (the default) match only signals where the first
        argument is a string that either is equal to the
        keyword parameter, or starts with the keyword parameter
        followed by a dot (and optionally more text).
    `arg...path`: str
        If there are additional keyword parameters of the form
        ``arg``\ *n* ``path``, match only signals where the *n*\ th
        argument is either equal or matches in a path-like manner.
        A path-like comparison matches when either the keyword or the
        argument ends with a '/' and is a prefix of the other. An
        example argument path match is arg0path='/aa/bb/'. This would
        match messages with first arguments of '/', '/aa/', '/aa/bb/',
        '/aa/bb/cc/' and '/aa/bb/cc'. It would not match messages with
        first arguments of '/aa/b', '/aa' or even '/aa/bb'.
)signal_namerK   rC   path)rd   add_signal_receiverr;   rh   r   r}   handler_functionrK   r'   s        r   connect_to_signalProxyObject.connect_to_signal2  sF    V 			%%&6 	22=5C/3/B/B+/+D+D		2
 )1	2	2r    c           
          0 nU R                   R                  " U R                  U R                  [        SSSU R
                  U R                  4SS0UD6$ )N
Introspect r4   require_main_loopF)rd   r+   r;   rh   r   _introspect_reply_handler_introspect_error_handler)r   rt   s     r   rp   ProxyObject._Introspect  sd    yy##D$7$7$($=$=$8,B$($B$B$($B$B	G
 7<G
 @FG 	Gr    c                 N    U R                    H  u  pnU" U0 UD6  M     / U l         g r   )rk   )r   r   r&   r'   s       r   _introspect_execute_queue%ProxyObject._introspect_execute_queue  s/     /3.L.L*\$+(+ /M)+&r    c                    U R                   R                  5           [        U5      U l        U R                  U l        S U l	        U R                  5         U R                   R                  5         g ! [         a5  nU R                  U5         S nAU R                   R                  5         g S nAff = f! U R                   R                  5         f = fr   )rl   acquirer   rO   r   r   release INTROSPECT_STATE_INTROSPECT_DONErn   rj   r   )r   dataes      r   r   %ProxyObject._introspect_reply_handler  s    %%'	,.H.N+
 &*%J%JD"'+D$**,!!))+ 0 ..q1 !!))+ !!))+s.   A0 (B2 0
B/:B*B2 *B//B2 2Cc                    [         R                  " 5         [        R                  SU R                  U R
                  UR                  R                  UR                  R                  U5        U R                  R                  5          [        R                  S5        U R                  U l        S U l        U R                  5         U R                  R!                  5         g ! U R                  R!                  5         f = f)Nz$Introspect error on %s:%s: %s.%s: %sz'Executing introspect queue due to error)loggingbasicConfig_loggererrorr;   rh   	__class__r/   r.   rl   r   debugrm   rn   rj   r   r   )r   r   s     r   r   %ProxyObject._introspect_error_handler  s    <))4+D+Doo00%//2J2J	 	%%'	,MMCD%)%J%JD"'+D$**,!!))+D!!))+s   =C C;c                     U R                   R                  5          U R                  b  U R                  R                  5         U R                   R	                  5         g ! U R                   R	                  5         f = fr   )rl   r   rj   r   r   rw   s    r   _introspect_blockProxyObject._introspect_block  s^    %%'	,''3((..0 !!))+D!!))+s   'A A:c                 ,   U R                   R                  5          U R                  U R                  :X  a  U R                  R                  XU45        OU" U0 UD6  U R                   R                  5         g ! U R                   R                  5         f = fr   )rl   r   rn   ro   rk   r   r   )r   callbackr&   rt   s       r   _introspect_add_to_queue$ProxyObject._introspect_add_to_queue  sz    %%'	,%%)U)UU..55xv6NO $)&)!!))+D!!))+s   A A7 7Bc                     UR                  S5      (       a!  UR                  S5      (       a  [        U5      eU R                  U5      $ N__)
startswithendswithAttributeErrorget_dbus_methodr   members     r   __getattr__ProxyObject.__getattr__  s=    T""vt'<'< ((''//r    c                     U R                  X R                  U R                  U R                  UU5      nU R                  U R
                  :X  a&  U R                  X0R                  U R                  5      nU$ )a  Return a proxy method representing the given D-Bus method. The
returned proxy method can be called in the usual way. For instance, ::

    proxy.get_dbus_method("Foo", dbus_interface='com.example.Bar')(123)

is equivalent to::

    proxy.Foo(123, dbus_interface='com.example.Bar')

or even::

    getattr(proxy, "Foo")(123, dbus_interface='com.example.Bar')

However, using `get_dbus_method` is the only way to call D-Bus
methods with certain awkward names - if the author of a service
implements a method called ``connect_to_signal`` or even
``__getattr__``, you'll need to use `get_dbus_method` to call them.

For services which follow the D-Bus convention of CamelCaseMethodNames
this won't be a problem.
)	ProxyMethodClassrd   r;   rh   rn   ro   DeferredMethodClassr   r   )r   r   rK   rets       r   r   ProxyObject.get_dbus_method  sp    . ##D))$($7$7$($=$=v$24 !!T%Q%QQ**30M0M+/+A+ACC 
r    c                 b    SU R                   U R                  U R                  [        U 5      4-  $ )Nz&<ProxyObject wrapping %s %s %s at %#x>)rd   r;   rh   idrw   s    r   __repr__ProxyObject.__repr__  s4    7IIt**D,E,Er$x9Q Q 	Qr    )	rh   rd   rl   rO   rn   r;   rj   rk   rf   )NNNTFr   )r.   r/   r0   r1   r2   r6   r   r   r   rm   ro   r   r   propertyrC   requested_bus_namerD   r   rp   r   r   r   r   r   r   r   r   __str__r3   r4   r    r   rV   rV      s    
 $)'($./+'($=A<AQ:f 8$H$ ""G$ A$02KP2dG,,,,
,0$LQ Gr    rV   c                       \ rS rSrSrS r\" S SSS5      r\r\" S SSS5      r	\" S	 SSS
5      r
\" S SSS5      r\" S SSS5      r SS jrS rSS jrS r\rSrg)	Interfacei  zAn interface into a remote object.

An Interface can be used to wrap ProxyObjects
so that calls can be routed to their correct
D-Bus interface.
c                 j    [        U[        5      (       a  UR                  U l        OXl        X l        g)a
  Construct a proxy for the given interface on the given object.

:Parameters:
    `object` : `dbus.proxies.ProxyObject` or `dbus.Interface`
        The remote object or another of its interfaces
    `dbus_interface` : str
        An interface the `object` implements
N)
isinstancer   proxy_object_objr@   )r   objectrK   s      r   r   Interface.__init__  s)     fi((++DII-r    c                 .    U R                   R                  $ r   )r   rD   rw   s    r   rx   Interface.<lambda>  s    )>)>r    Nz.The D-Bus object path of the underlying objectc                 .    U R                   R                  $ r   )r   rC   rw   s    r   rx   r     s    dii&8&8r    z:The bus name to which the underlying proxy object is boundc                 .    U R                   R                  $ r   )r   r   rw   s    r   rx   r     s    		0L0Lr    zGThe bus name which was requested when the underlying object was createdc                     U R                   $ r   )r   rw   s    r   rx   r     s    $))r    zThe underlying proxy objectc                     U R                   $ r   )r@   rw   s    r   rx   r     s
    D,@,@r    zThe D-Bus interface representedc                 d    U(       d  U R                   nU R                  R                  " XU40 UD6$ )a1  Arrange for a function to be called when the given signal is
emitted.

The parameters and keyword arguments are the same as for
`dbus.proxies.ProxyObject.connect_to_signal`, except that if
`dbus_interface` is None (the default), the D-Bus interface that
was passed to the `Interface` constructor is used.
)r@   r   r   r   s        r   r   Interface.connect_to_signal!  s9     !11Nyy**;+9G=EG 	Gr    c                     UR                  S5      (       a!  UR                  S5      (       a  [        U5      eU R                  R	                  XR
                  5      $ r   )r   r   r   r   r   r@   r   s     r   r   Interface.__getattr__1  sG    T""vt'<'< ((99,,V5I5IJJr    c                 V    Uc  U R                   nU R                  R                  X5      $ )zReturn a proxy method representing the given D-Bus method.

This is the same as `dbus.proxies.ProxyObject.get_dbus_method`
except that if `dbus_interface` is None (the default),
the D-Bus interface that was passed to the `Interface` constructor
is used.
)r@   r   r   )r   r   rK   s      r   r   Interface.get_dbus_method7  s*     !!11Nyy((@@r    c                 L    SU R                   U R                  [        U 5      4-  $ )Nz%<Interface %r implementing %r at %#x>)r   r@   r   rw   s    r   r   Interface.__repr__C  s)    6		4''D83 3 	3r    )r@   r   r   )r.   r/   r0   r1   r2   r   r   rD   rh   rC   r   r   rK   r   r   r   r   r   r3   r4   r    r   r   r     s    . >dLNK&8$$%H "#L#'$CD 3T4>@L@$DFN *.G K
A3 Gr    r   )r   	threadingr   ImportErrordummy_threadingr=   dbus._expat_introspect_parserr   dbus.exceptionsr   r   r   r   __docformat__	getLoggerr   r
   r   r   r   r   dbus._compatr   r   r6   r   rV   r   r4   r    r   <module>r      s   8 &  D" " # 

N
+   9 94]0 ]0@J& JZ
K Kw  &%&s   A5 5BB