HEX
Server: Apache
System: Linux srv1.prosuiteplus.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: prosuiteplus (1001)
PHP: 8.3.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/slip/util/__pycache__/hookable.cpython-38.pyc
U

�Y^�@sldZddlZddlmZddgZGdd�de�ZGdd	�d	e�ZGd
d�deee��Z	Gdd�de
e	�ZdS)z[This module contains variants of certain base types which call registered
hooks on changes.�N)�with_metaclass�Hookable�HookableSetc@s eZdZdd�Zedd��ZdS)�HookableTypecCs�d|krzz|d}WnFtk
rZd}dd�|D�D]}|rPtdt|���q6|}q6YnX|dD]}t�||�||<qdt�||||�S)N�_hookable_change_methodsZ_hookable_base_classcss|]}|tkr|VqdS�N)r)�.0�x�r
�4/usr/lib/python3/dist-packages/slip/util/hookable.py�	<genexpr>)sz'HookableType.__new__.<locals>.<genexpr>ztoo many base classes: %s)�KeyError�	TypeError�strr�wrap_method�type�__new__)�cls�name�basesZdct�baseZbase_candidate�
methodnamer
r
rr"s
�zHookableType.__new__cs t||���fdd�}||_|S)Ncs�|f|�|�}|��|Sr)�
_run_hooks)�self�p�kZretval��funcr
r�
methodwrapper9sz/HookableType.wrap_method.<locals>.methodwrapper)�getattr�__name__)rrrrr
rrr5s
zHookableType.wrap_methodN)r �
__module__�__qualname__r�classmethodrr
r
r
rr src@s6eZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
_HookEntryNc	Cs�t|tj�st�t|t�st�t|�D]:\}}zt|�Wq&tk
r^td||f��Yq&Xq&|��D]:\}}zt|�Wqjtk
r�td||f��YqjXqjt|t	�s�t	|�}||_
||_||_||_
d|_dS)Nz*Positional argument %d is not hashable: %rz'Keyword argument %r is not hashable: %r)�
isinstance�collections�Callable�AssertionErrorr�	enumerate�hashr�items�tuple�_HookEntry__hook�_HookEntry__args�_HookEntry__kwargs�_HookEntry__hookable�_HookEntry__hash)r�hook�args�kwargs�hookable�nr	rr
r
r�__init__Ds6����
z_HookEntry.__init__cCs$|j|jko"|j|jko"|j|jkSr)r-r.r/�r�objr
r
r�__cmp__cs

�
�z_HookEntry.__cmp__cCs|js|��|_|jSr)r1�
_compute_hash�rr
r
r�__hash__is
z_HookEntry.__hash__cCs>t|j�}t|�t|j�A}t|�ttt|j�����A}|Sr)r*r-r.r,�sortedr/r+)r�	hashvaluer
r
rr;ns
�z_HookEntry._compute_hashcCs4|jr |j|jf|j�|j�n|j|j|j�dSr)r0r-r.r/r<r
r
r�runusz_HookEntry.run)N)r r!r"r7r:r=r;r@r
r
r
rr$Bs

r$c@s�eZdZdZedd��Zdd�Zdd�Zeee�Zdd	�Z	d
d�Z
ee	e
�Zdd
�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS)rz2An object which calls registered hooks on changes.cOst|d�st�|_|jS)N�__real_hooks__)�hasattr�setrA)rrrr
r
r�	__hooks__�s
zHookable.__hooks__cCst|d�sd|_|jS)N�__hooks_enabled__T)rBrEr<r
r
r�_get_hooks_enabled�s
zHookable._get_hooks_enabledcCs
||_dSr)rE)r�enabledr
r
r�_set_hooks_enabled�szHookable._set_hooks_enabledcCst|d�sd|_|jS)N�__hooks_frozen__F)rBrIr<r
r
r�_get_hooks_frozen�s
zHookable._get_hooks_frozencCs>||jkrdS||_|r"t�|_n|jD]}|��q(|`dSr)�hooks_frozenrIrC�__hooks_frozen_entries__r@)rZfreeze�	hookentryr
r
r�_set_hooks_frozen�s



zHookable._set_hooks_frozencCs
d|_dS)NT�rKr<r
r
r�freeze_hooks�szHookable.freeze_hookscCs
d|_dS)NFrOr<r
r
r�
thaw_hooks�szHookable.thaw_hookscOs|j|df|�|�dSr��_Hookable__add_hook�rr2r3r4r
r
r�add_hook�szHookable.add_hookcOs|j||f|�|�dSrrRrTr
r
r�add_hook_hookable�szHookable.add_hook_hookablecOs>t|tj�st�t|t�st�t||||d�}|j�|�dS)N)r5)r%r&r'r(rr$rD�add)rr2Z	_hookabler3r4rMr
r
rZ
__add_hook�szHookable.__add_hookcOs|j�t|||��dSr)rD�remover$rTr
r
r�remove_hook�szHookable.remove_hookcCs4|jr0|js"|jD]}|��qn|j�|j�dSr)�
hooks_enabledrKrDr@rL�update)rrMr
r
rr�s

zHookable._run_hooksN)r r!r"�__doc__�propertyrDrFrHrZrJrNrKrPrQrUrVrSrYrr
r
r
rr|s 


c@seZdZdZdZdd�ZdS)rz5A set object which calls registered hooks on changes.)	rW�clear�difference_update�discard�intersection_update�poprX�symmetric_difference_updater[cCst�|�}t�|_|Sr)rC�copyrAr8r
r
rrd�s
zHookableSet.copyN)r r!r"r\rrdr
r
r
rr�s)r\r&Zsixr�__all__rr�objectr$rrCrr
r
r
r�<module>s":G