
    @iasD                        d Z dZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# d	ed
ededZ$	 dZ% ejL                  d      Z' G d de(      Z) G d de      Z*y))BusConnectionreStructuredText    N)BUS_DAEMON_IFACEBUS_DAEMON_NAMEBUS_DAEMON_PATHBUS_SESSIONBUS_STARTER
BUS_SYSTEM DBUS_START_REPLY_ALREADY_RUNNINGDBUS_START_REPLY_SUCCESSNAME_FLAG_ALLOW_REPLACEMENTNAME_FLAG_DO_NOT_QUEUENAME_FLAG_REPLACE_EXISTINGRELEASE_NAME_REPLY_NON_EXISTENTRELEASE_NAME_REPLY_NOT_OWNERRELEASE_NAME_REPLY_RELEASED REQUEST_NAME_REPLY_ALREADY_OWNERREQUEST_NAME_REPLY_EXISTSREQUEST_NAME_REPLY_IN_QUEUE REQUEST_NAME_REPLY_PRIMARY_OWNERvalidate_bus_namevalidate_error_namevalidate_interface_namevalidate_member_namevalidate_object_path)
Connection)DBusException)HANDLER_RESULT_NOT_YET_HANDLED)is_py2ztype='signal',sender='z',interface='z"',member='NameOwnerChanged',path='z',arg0='%s'z)org.freedesktop.DBus.Error.NameHasNoOwnerzdbus.busc                       e Zd ZdZd Zd Zy)NameOwnerWatch)_match_pending_callc           
          t               fd}fd}|j                  |dt        t        t              | _        |j                  t        t        t        ddf|      | _        y )Nc                      |       y N )owned	old_owner	new_ownercallbacks      */usr/lib/python3/dist-packages/dbus/bus.py	signal_cbz*NameOwnerWatch.__init__.<locals>.signal_cbB   s    Y    c                     | j                         t        k(  r	 d       y t        j                          t        j                  d| j                  | d f       y )N zGetNameOwner(%s) failed:)exc_info)get_dbus_name_NAME_HAS_NO_OWNERloggingbasicConfig_loggerdebug	__class__)ebus_namer+   s    r,   error_cbz)NameOwnerWatch.__init__.<locals>.error_cbE   sJ     $66##%8(()Q'=  ?r.   NameOwnerChanged)arg0GetNameOwners)r   add_signal_receiverr   r   r   r"   
call_asyncr#   )selfbus_connr:   r+   r-   r;   s     ``  r,   __init__zNameOwnerWatch.__init__?   sm    (#	 	? 2293E3C3B3B8@ 3 B &001@1A1?14xk198Er.   c                     | j                   | j                   j                          | j                  | j                  j                          d | _         d | _        y r&   )r"   remover#   cancelrB   s    r,   rG   zNameOwnerWatch.cancelZ   sI    ;;"KK )%%'!r.   N)__name__
__module____qualname__	__slots__rD   rG   r'   r.   r,   r!   r!   <   s    +IE6"r.   r!   c                        e Zd ZdZeZ	 eZ	 eZ		 e
ZeZedfdZ	 	 	 d fd	Zd Zd Z	 	 ddZd Zdd	Zdd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZ S )r   zxA connection to a D-Bus daemon that implements the
    ``org.freedesktop.DBus`` pseudo-service.

    :Since: 0.81.0
    Nc                 n    | j                  ||      }t        j                         |_        i |_        	 |S )N)mainloop)_new_for_busweakrefWeakValueDictionary
_bus_names_signal_sender_matches)clsaddress_or_typerO   buss       r,   __new__zBusConnection.__new__w   s9    B !446%'"5
r.   c                 j   |j                  dd       }|$|t        d      |}ddlm}  |dt        d       t        t        |   |||||fi ||D|t        k7  r;|d d d	k(  rfd
}	nj                  }	| j                  ||	      }
|
| j                  <   | j                  t                     S )Nnamed_service3bus_name and named_service cannot both be specifiedr   warnzrPassing the named_service parameter to add_signal_receiver by name is deprecated: please use positional parameters   
stacklevel   :c                 2    | dk(  rj                          y y )Nr0   )rF   )r*   matchs    r,   r+   z3BusConnection.add_signal_receiver.<locals>.callback   s     B 'r.   )pop	TypeErrorwarningsr]   DeprecationWarningsuperr   r@   r   set_sender_name_ownerwatch_name_ownerrT   add_match_stringstr)rB   handler_functionsignal_namedbus_interfacer:   pathkeywordsrZ   r]   r+   watchrd   r8   s              @r,   r@   z!BusConnection.add_signal_receiver   s     !_d;$# !, - -$H% K#3 mT> +~x" "  X%@|s"' !66))(H=E16D''.c%j)r.   c                     | j                  t        |             | j                  j                  |d       }||j	                          y y r&   ) remove_match_string_non_blockingrm   rT   re   rG   )rB   rd   rs   s      r,   _clean_up_signal_matchz$BusConnection._clean_up_signal_match   s@    --c%j9++//t<LLN r.   c                     |#|d d dk7  r|t         k7  r	 | j                  |      S |S # t        $ rD}|j                         t        k7  r | j                  |       | j                  |      cY d }~S d }~ww xY w)Nra   rb   )r   get_name_ownerr   r2   r3   start_service_by_name)rB   r:   r9   s      r,   activate_name_ownerz!BusConnection.activate_name_owner   s~     Xbq\S%8O+5**844 O ! 5??$(::**84**8445s   ( 	A59A0*A50A5c                    |r| j                          |j                  dd      }|$|t        d      ddlm}  |dt
        d       |}|r+t        d	d
j                  |j                               z        | j                  | ||||      S )aJ  Return a local proxy for the given remote object.

        Method calls on the proxy are translated into method calls on the
        remote object.

        :Parameters:
            `bus_name` : str
                A bus name (either the unique name or a well-known name)
                of the application owning the object. The keyword argument
                named_service is a deprecated alias for this.
            `object_path` : str
                The object path of the desired 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 the object path is a well-known name and this parameter
                is false (default), resolve the well-known name to the unique
                name of its current owner and bind to that instead; if the
                ownership of the well-known name changes in future,
                keep communicating with the original owner.
                This is necessary if the D-Bus API used is stateful.

                If the object path is a well-known name and this parameter
                is true, whenever the well-known name changes ownership in
                future, bind to the new owner, if any.

                If the given object path is a unique name, this parameter
                has no effect.

        :Returns: a `dbus.proxies.ProxyObject`
        :Raises `DBusException`: if resolving the well-known name to a
            unique name fails
        rZ   Nr[   r   r\   ziPassing the named_service parameter to get_object by name is deprecated: please use positional parametersr^   r_   z4get_object does not take these keyword arguments: %sz, )
introspectfollow_name_owner_changes)	_require_main_loopre   rf   rg   r]   rh   joinkeysProxyObjectClass)rB   r:   object_pathr|   r}   kwargsrZ   r]   s           r,   
get_objectzBusConnection.get_object   s    H %##%

?D9$# !/ 0 0% C#3 %H ,.2ii.FG H H $$T8[0:?X % Z 	Zr.   c                 ^    t        |       | j                  t        t        t        dd|f      S )zGet the numeric uid of the process owning the given bus name.

        :Parameters:
            `bus_name` : str
                A bus name, either unique or well-known
        :Returns: a `dbus.UInt32`
        :Since: 0.80.0
        GetConnectionUnixUserr?   r   call_blockingr   r   r   rB   r:   s     r,   get_unix_userzBusConnection.get_unix_user   s0     	(#!!/?"24K"%{4 	4r.   c           
      d    t        |       d| j                  t        t        t        dd||f      fS )a?  Start a service which will implement the given bus name on this Bus.

        :Parameters:
            `bus_name` : str
                The well-known bus name to be activated.
            `flags` : dbus.UInt32
                Flags to pass to StartServiceByName (currently none are
                defined)

        :Returns: A tuple of 2 elements. The first is always True, the
            second is either START_REPLY_SUCCESS or
            START_REPLY_ALREADY_RUNNING.

        :Raises `DBusException`: if the service could not be started.
        :Since: 0.80.0
        TStartServiceByNamesur   )rB   r:   flagss      r,   ry   z#BusConnection.start_service_by_name   s=    " 	(#d((/)9)=)-%/@B C 	Cr.   c           	      d    t        |d       | j                  t        t        t        dd||f      S )a  Request a bus name.

        :Parameters:
            `name` : str
                The well-known name to be requested
            `flags` : dbus.UInt32
                A bitwise-OR of 0 or more of the flags
                `NAME_FLAG_ALLOW_REPLACEMENT`,
                `NAME_FLAG_REPLACE_EXISTING`
                and `NAME_FLAG_DO_NOT_QUEUE`
        :Returns: `REQUEST_NAME_REPLY_PRIMARY_OWNER`,
            `REQUEST_NAME_REPLY_IN_QUEUE`,
            `REQUEST_NAME_REPLY_EXISTS` or
            `REQUEST_NAME_REPLY_ALREADY_OWNER`
        :Raises `DBusException`: if the bus daemon cannot be contacted or
            returns an error.
        Fallow_uniqueRequestNamer   r   )rB   namer   s      r,   request_namezBusConnection.request_name  s3    $ 	$U3!!/?"2M"&u7 	7r.   c                 b    t        |d       | j                  t        t        t        dd|f      S )as  Release a bus name.

        :Parameters:
            `name` : str
                The well-known name to be released
        :Returns: `RELEASE_NAME_REPLY_RELEASED`,
            `RELEASE_NAME_REPLY_NON_EXISTENT`
            or `RELEASE_NAME_REPLY_NOT_OWNER`
        :Raises `DBusException`: if the bus daemon cannot be contacted or
            returns an error.
        Fr   ReleaseNamer?   r   )rB   r   s     r,   release_namezBusConnection.release_name/  s1     	$U3!!/?"2M"%w0 	0r.   c                 F    | j                  t        t        t        ddd      S )zReturn a list of all currently-owned names on the bus.

        :Returns: a dbus.Array of dbus.UTF8String
        :Since: 0.81.0
        	ListNamesr0   r'   r   r   r   r   rH   s    r,   
list_nameszBusConnection.list_names@  s%     !!/?"2K"$b* 	*r.   c                 F    | j                  t        t        t        ddd      S )zReturn a list of all names that can be activated on the bus.

        :Returns: a dbus.Array of dbus.UTF8String
        :Since: 0.81.0
        ListActivatableNamesr0   r'   r   rH   s    r,   list_activatable_namesz$BusConnection.list_activatable_namesJ  s&     !!/?"24J"$b* 	*r.   c                 b    t        |d       | j                  t        t        t        dd|f      S )zReturn the unique connection name of the primary owner of the
        given name.

        :Raises `DBusException`: if the `bus_name` has no owner
        :Since: 0.81.0
        Fr   r>   r?   r   r   s     r,   rx   zBusConnection.get_name_ownerT  s1     	(7!!/?"2N"%{4 	4r.   c                     t        | ||      S )a  Watch the unique connection name of the primary owner of the
        given name.

        `callback` will be called with one argument, which is either the
        unique connection name, or the empty string (meaning the name is
        not owned).

        :Since: 0.81.0
        )r!   )rB   r:   r+   s      r,   rk   zBusConnection.watch_name_owner`  s     dHh77r.   c           
      Z    t        | j                  t        t        t        dd|f            S )zReturn True iff the given bus name has an owner on this bus.

        :Parameters:
            `bus_name` : str
                The bus name to look up
        :Returns: a `bool`
        NameHasOwnerr?   )boolr   r   r   r   r   s     r,   name_has_ownerzBusConnection.name_has_ownerl  s.     D&&'7'*XK9 : 	:r.   c                 J    | j                  t        t        t        dd|f       y)  Arrange for this application to receive messages on the bus that
        match the given rule. This version will block.

        :Parameters:
            `rule` : str
                The match rule
        :Raises `DBusException`: on error.
        :Since: 0.80.0
        AddMatchr?   Nr   rB   rules     r,   rl   zBusConnection.add_match_stringx  s"     	?O+Ztg	Gr.   c           
      N    | j                  t        t        t        dd|fdd       y)=  Arrange for this application to receive messages on the bus that
        match the given rule. This version will not block, but any errors
        will be ignored.


        :Parameters:
            `rule` : str
                The match rule
        :Raises `DBusException`: on error.
        :Since: 0.80.0
        r   r?   NrA   r   r   r   r   s     r,   add_match_string_non_blockingz+BusConnection.add_match_string_non_blocking  s$     	(*cD7d	$r.   c                 J    | j                  t        t        t        dd|f       y)r   RemoveMatchr?   Nr   r   s     r,   remove_match_stringz!BusConnection.remove_match_string  s"     	?O+]C$	Jr.   c           
      N    | j                  t        t        t        dd|fdd       y)r   r   r?   Nr   r   s     r,   ru   z.BusConnection.remove_match_string_non_blocking  s$     	(-tgd	$r.   )NNNN)TF)r   )!rI   rJ   rK   __doc__r   TYPE_SESSIONr
   TYPE_SYSTEMr	   TYPE_STARTERr   START_REPLY_SUCCESSr   START_REPLY_ALREADY_RUNNINGrX   r@   rv   rz   r   r   ry   r   r   r   r   rx   rk   r   rl   r   r   ru   __classcell__)r8   s   @r,   r   r   c   s     "LH KHL$ 3"B%1D 	 AE:>!%@ <@-27Zr4C27.0"**
4
8
:G$ J$r.   r   )+__all____docformat__r4   rQ   _dbus_bindingsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   dbus.connectionr   dbus.exceptionsr   dbus.lowlevelr   dbus._compatr   _NAME_OWNER_CHANGE_MATCHr3   	getLoggerr6   objectr!   r   r'   r.   r,   <module>r      s   2 "  	I 	I 	I 	I 	I 	I 	I ' ) 8   /0@.	0 
 A 
'

J
'$"V $"NO$J O$r.   