U
    x¡Ê]’  ã                   @   s‚   d Z ddlZddlZe ¡ dkZej de¡ZG dd„ deƒZ	zddl
mZ W n ek
rf   dZY nX estedkrze	ZneZdS )zHookable object support
é    N)ZPyPyZJythonZPURE_PYTHONc                   @   sl   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
dd„ Zdd„ Zdd„ ZdS )Ú_py_hookable©Ú	_originalÚ_implementationc                 O   sL   |sd|kr|  d¡f}|r$tdƒ‚t|ƒdkr8tdƒ‚|d  | _| _d S )NÚimplementationzUnknown keyword argumentsé   zExactly one argument requiredr   )ÚpopÚ	TypeErrorÚlenr   r   ©ÚselfÚargsÚkw© r   ú8/usr/lib/python3/dist-packages/zope/hookable/__init__.pyÚ__init__   s    z_py_hookable.__init__c                 C   s   | j S ©N)r   ©r   r   r   r   Úoriginal#   s    z_py_hookable.originalc                 C   s   | j S r   ©r   r   r   r   r   r   '   s    z_py_hookable.implementationc                 C   s   | j jS r   )r   Ú__doc__r   r   r   r   r   +   s    z_py_hookable.__doc__c                 C   s   t | jdi ƒS )NÚ__dict__©Úgetattrr   r   r   r   r   r   /   s    z_py_hookable.__dict__c                 C   s   t | jddƒS )NÚ	__bases__r   r   r   r   r   r   r   3   s    z_py_hookable.__bases__c                 C   s   | j | }| _ |S r   r   )r   Znew_callableÚoldr   r   r   Úsethook7   s    z_py_hookable.sethookc                 C   s   | j | _d S r   r   r   r   r   r   Úreset;   s    z_py_hookable.resetc                 O   s   | j ||ŽS r   r   r   r   r   r   Ú__call__>   s    z_py_hookable.__call__N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   Úpropertyr   r   r   r   r   r   r   r   r   r   r   r   r      s   	




r   )Úhookable)r   ÚosÚplatformZpython_implementationZ_PYPYÚenvironÚgetZ_PURE_PYTHONÚobjectr   Zzope.hookable._zope_hookabler$   Z_c_hookableÚImportErrorr   r   r   r   Ú<module>   s   *
