509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ˆuAc   ã               @   s¸   d Z ddlm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	d
dgZdadd„ Zeadd„ Zdd„ Zdd„ Zdadadd„ ZG dd
„ d
ejjƒZG dd	„ d	eeejjƒƒZdS )zMThis module contains convenience functions for using dbus-activated services.é    )Úabsolute_importN)Úwith_metaclassé   )Ú_glibé   )ÚpolkitÚObjectÚInterfaceTypeÚset_mainloopc               C   s   t jƒ  d S )N)Ú__mainloop__Úquit© r   r   ú/usr/lib/python3.6/service.pyÚ__glib_quit_cb__)   s    r   c             C   s   | a d S )N)r   )Zmainloopr   r   r   r
   4   s    c             C   s   | a d S )N)Ú__quit_cb__)Úquit_cbr   r   r   Úset_quit_cb9   s    r   c               C   s
   t ƒ  d S )N)r   r   r   r   r   r   >   s    r   Z__slip_dbus_service_sender__Ú__slip_dbus_service_reply_cb__Ú__slip_dbus_service_error_cb__c                s²   ˆj d k	rˆj ‰d‰nt‰d‰ˆjd k	r4ˆj‰ d‰nt‰ d‰ˆ ‰‡ ‡‡‡‡‡fdd„}xLdd„ tˆƒD ƒD ]6}|dkr€ˆ|_ ql|dkr�ˆ |_qlt||tˆ|ƒƒ qlW ˆj|_|S )	NFTc                sÒ   ˆj ˆƒ}|d k	rVˆˆd  ‰ˆˆd  ‰ˆr4ˆˆ= ˆrLˆˆd = ˆˆd = ˆj|ƒ tˆ	dtˆdd ƒƒ‰ |d k	r²ˆ r²‡ ‡‡‡	‡
‡‡‡fdd„}‡‡fdd„}tj|ˆ ||d	� nˆ	ˆfˆžˆŽ}ˆjƒ  |S d S )
Nr   r   Z_slip_polkit_auth_requiredÚdefault_polkit_auth_requiredc                sœ   | r‚ˆrˆˆfˆžˆŽ q�d }yˆˆfˆžˆŽ}W n& t k
rX } z
|}W Y d d }~X nX |rhˆ|ƒ q�|d krxˆƒ  q�ˆ|ƒ nˆtjˆ ƒƒ ˆjƒ  d S )N)Ú	Exceptionr   ZNotAuthorizedExceptionÚtimeout_restart)Zis_authÚerrorÚresultÚe)Ú	action_idÚerror_cbÚkÚmethodÚmethod_is_asyncÚpÚreply_cbÚselfr   r   Úreply_handlerq   s    

z:wrap_method.<locals>.wrapped_method.<locals>.reply_handlerc                s   ˆ | ƒ ˆj ƒ  d S )N)r   )r   )r   r"   r   r   Úerror_handler“   s    z:wrap_method.<locals>.wrapped_method.<locals>.error_handler)r#   r$   )ÚgetÚsender_seenÚgetattrr   ZIsSystemBusNameAuthorizedAsyncr   )r"   r    r   Úsenderr#   r$   Zretval)Úasync_callbacksÚhide_async_callbacksÚhide_sender_keywordr   r   Úsender_keyword)r   r   r   r    r!   r"   r   Úwrapped_method[   s,    



"z#wrap_method.<locals>.wrapped_methodc             s   s"   | ]}|d d… dkr|V  qd S )Né   Z_dbus_r   )Ú.0Úxr   r   r   ú	<genexpr>    s    zwrap_method.<locals>.<genexpr>Ú_dbus_sender_keywordÚ_dbus_async_callbacks)r2   ÚSENDER_KEYWORDr3   ÚASYNC_CALLBACKSÚdirÚsetattrr'   Ú__name__)r   r-   Úattrr   )r)   r*   r+   r   r   r,   r   Úwrap_methodH   s(    

Er:   c                   s   e Zd Z‡ fdd„Z‡  ZS )r	   c                sD   x,|j ƒ D ] \}}t|ddƒr
t|ƒ||< q
W tt| ƒj| |||ƒS )NZ_dbus_is_methodF)Úitemsr'   r:   Úsuperr	   Ú__new__)ÚclsÚnameÚbasesZdctZattrnamer9   )Ú	__class__r   r   r=   ±   s    zInterfaceType.__new__)r8   Ú
__module__Ú__qualname__r=   Ú__classcell__r   r   )rA   r   r	   ¯   s   c                   sb   e Zd ZdZdZeZdZeƒ Zi Z	i Z
dZd‡ fdd„	Zdd„ Zdd	„ Zdd
d„Zdd„ Z‡  ZS )r   Fé   Nc                s2   t t| ƒj|||ƒ |d kr(| jj| _n|| _d S )N)r<   r   Ú__init__rA   Ú
persistent)r"   ÚconnZobject_pathZbus_namerG   )rA   r   r   rF   É   s    zObject.__init__c             C   s2   | j  r ttjƒdkr tƒ  dS d t_| jt_dS )Nr   F)rG   Úlenr   Úsendersr   Úcurrent_sourceÚdefault_durationÚduration)r"   r   r   r   Ú_timeout_cbÒ   s    zObject._timeout_cbc             C   s”   | j }| r�||ftjkr�tjj||fƒ tj| j|ƒ ttj| ƒdkrjtj| jƒ  tj|= tj|= | j r�ttjƒdkr�tjd kr�t	ƒ  d S )Nr   )
Ú
connectionr   rJ   ÚremoveÚconnections_sendersrI   Úconnections_smobjsrG   rK   r   )r"   r?   Z	old_ownerZ	new_ownerrH   r   r   r   Ú_name_owner_changedÜ   s    
zObject._name_owner_changedc             C   sf   |s| j j}tj s|tjkr$|t_| j s:ttjƒdkrbtjrLtj	tjƒ tj
tjd | jƒt_d S )Nr   iè  )rA   rL   r   rM   rG   rI   rJ   rK   ÚGLibZsource_removeZtimeout_addrN   )r"   rM   r   r   r   r   í   s    zObject.timeout_restartc             C   sp   || j ftjkrltjj|| j fƒ | j tjkrZtƒ tj| j < | j j| jdd|d�tj| j < tj| j  j|ƒ d S )NZNameOwnerChangedzorg.freedesktop.DBus)Zhandler_functionZsignal_nameZdbus_interfaceZarg1)	rO   r   rJ   ÚaddrQ   ÚsetZadd_signal_receiverrS   rR   )r"   r(   r   r   r   r&   ù   s    zObject.sender_seen)NNNN)N)r8   rB   rC   rG   rL   rM   rK   rV   rJ   rQ   rR   r   rF   rN   rS   r   r&   rD   r   r   )rA   r   r   ¹   s   

)r   r   )Ú__doc__Z
__future__r   ZdbusZdbus.serviceZsixr   Z	_wrappersr   rT   Ú r   Ú__all__r   r   r   r
   r   r   r4   r5   r:   Zservicer	   r   r   r   r   r   Ú<module>   s&   
 g
