Mini Shell
3
V]�_YD � @ s� d dl Z d dlmZmZ d dlmZ d dlmZ d dlm Z d dl
mZ d dlm
Z
mZ d dlmZmZ d dlZejd d
� d dlmZ e je�Zdd
dgZG dd� de�ZG dd
� d
ed�ZG dd� de�ZdS )� N)�ABCMeta�abstractmethod)�partial)�ErrorMapper)�Signal)�get_xml)�DBusSpecification�DBusSpecificationError)�get_variant�unwrap_variant�Gioz2.0)r �
GLibServer�AbstractServerObjectHandler�ServerObjectHandlerc @ s^ e Zd ZdZeddd��Zef fdd��Zedd� �Zed d
� �Zedd� �Z ed
d� �Z
dS )r
z0The low-level DBus server library based on GLib.Nc C s |j |||||� dS )zEmit a DBus signal.N)�emit_signal)�cls�
connection�object_path�interface_name�signal_name�
parametersZdestination� r �/usr/lib/python3.6/handler.pyr / s zGLibServer.emit_signalc C sj t jj|�}t| j||fd�}g }|js0td��x*|jD ] } |j|| |dd�}
|j|
� q8W t| j ||�S )zRegister an object on DBus.)� user_dataz$No DBus interfaces for registration.N)
r ZDBusNodeInfoZnew_for_xmlr �_object_callbackZ
interfacesr �register_object�append�_unregister_object)r r r Z
object_xml�callback�
callback_argsZ node_infoZmethod_call_closure�
registrationsZinterface_info�registration_idr r r r ; s* zGLibServer.register_objectc C s x|D ]}|j |� qW dS )zUnregister an object from DBus.N)Zunregister_object)r r r r! r r r r ] s
zGLibServer._unregister_objectc C s |\} }
| ||||f|
�� d S )Nr )r r Zsenderr r �method_namer �
invocationr r r r r r r c s zGLibServer._object_callbackc C s |j ||� dS )z�Set the error of the DBus call.
:param invocation: an invocation of a DBus call
:param error_name: a DBus name of the error
:param error_message: an error message
N)Zreturn_dbus_error)r r# �
error_nameZ
error_messager r r �set_call_errors s zGLibServer.set_call_errorc C s&