Your IP : 216.73.216.213
B
;��]� � @ s� d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z ddl
mZ G dd � d �ZG d
d� d�Z
G dd
� d
�ZG dd� d�ZG dd� de�Zee j�G dd� de��ZG dd� dej�Zdd� ZdS )z
Utility classes for spread.
� )�defer)�Failure)�pb)�basic)�
interfaces)�implementerc @ s e Zd Zdd� Zdd� ZdS )�LocalMethodc C s || _ || _d S )N)�local�name)�selfr r
� r �F/opt/alt/python37/lib64/python3.7/site-packages/twisted/spread/util.py�__init__ s zLocalMethod.__init__c O s | j j| jf|�|�S )N)r �
callRemoter
)r �args�kwr r r
�__call__ s zLocalMethod.__call__N)�__name__�
__module__�__qualname__r r r r r r
r s r c @ s$ e Zd ZdZdZdd� Zdd� ZdS )�
LocalAsRemotezN
A class useful for emulating the effects of remote behavior locally.
� c O sj t | d| �r"t| d| �||�S yt| d| �}t�|||��S t� }| jr\|�� t�|�S dS )ax
Call a specially-designated local method.
self.callRemote('x') will first try to invoke a method named
sync_x and return its result (which should probably be a
Deferred). Second, it will look for a method called async_x,
which will be called and then have its result (or Failure)
automatically wrapped in a Deferred.
Zsync_Zasync_N)�hasattr�getattrr �succeedr �reportAllTracebacksZprintTraceback�fail)r r
r r �method�fr r r
r # s
zLocalAsRemote.callRemotec C s
t | |�S )N)r )r r
r r r
�remoteMethod8 s zLocalAsRemote.remoteMethodN)r r r �__doc__r r r r r r r
r s r c @ s* e Zd ZdZd
dd�Zdd� Zdd� Zd S )�LocalAsyncForwarderzD
A class useful for forwarding a locally-defined interface.
r c C s$ |� |�st�|| _|| _|| _d S )N)Z
providedBy�AssertionError� forwarded�interfaceClass�failWhenNotImplemented)r r# r$ r% r r r
r A s zLocalAsyncForwarder.__init__c O s t | j|�||�S )N)r r# )r r r r r r r
�_callMethodG s zLocalAsyncForwarder._callMethodc O sN | j �|�r&tj| j|f|�|�}|S | jr@t�ttd| ��S t� d �S d S )NzNo Such Method in Interface: %s)
r$ ZqueryDescriptionForr Z
maybeDeferredr&