Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/twisted/python/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/twisted/python/__pycache__/rebuild.cpython-37.pyc

B

:��]4$�@s�dZddlZddlZddlZddlZddlmZyddlmZWnek
rTYnXddl	m
Z
mZddlm
Z
e��add�ZGd	d
�d
e�ZiZdd�Zd
d�ZGdd�de�Zdd�Zdd�Zddd�ZdS)z&
*Real* reloading support for Python.
�N)�reload)�InstanceType)�log�reflect)�_PY3cCs ttdd�}|dkrdS||kS)a�
    Compare to types.ClassType in a py2/3-compatible way

    Python 2 used comparison to types.ClassType to check for old-style
    classes Python 3 has no concept of old-style classes, so if
    ClassType doesn't exist, it can't be an old-style class - return
    False in that case.

    Note that the type() of new-style classes is NOT ClassType, and
    so this should return False for new-style classes in python 2
    as well.
    Z	ClassTypeNF)�getattr�types)�tZ
_ClassType�r
�I/opt/alt/python37/lib64/python3.7/site-packages/twisted/python/rebuild.py�_isClassTypes
rc@s,eZdZdZeZdd�Zdd�Zdd�ZdS)	�	Sensitivez�
    A utility mixin that's sensitive to rebuilds.

    This is a mixin for classes (usually those which represent collections of
    callbacks) to make sure that their code is up-to-date before running.
    cCs|jtk}|S)N)�lastRebuild)�selfZynr
r
r�needRebuildUpdate=s
zSensitive.needRebuildUpdatecCst��|_dS)N)�timer)rr
r
r�rebuildUpToDateBszSensitive.rebuildUpToDatecCs�t|�}|tjkrt|�S|tjkrL|jdkr<t|j|j�St|j|j�Sn:t	sh|t
krht|dd�|St|�rxt|�St
�d�|SdS)z�
        Get the latest version of an object.

        This can handle just about anything callable; instances, functions,
        methods, and classes.
        NZnothingzwarning returning anObject!)�typer�FunctionType�latestFunction�
MethodType�__self__rZim_class�__name__rrr�latestClassr�msg)rZanObjectr	r
r
r�latestVersionOfFs



zSensitive.latestVersionOfN)r�
__module__�__qualname__�__doc__rrrrr
r
r
rr
3s
r
cCs,t|j�}t�|�}|dkr |St||j�S)z/
    Get the latest version of a function.
    N)�id�__globals__�
_modDictIDMap�getrr)ZoldFuncZdictID�moduler
r
rras


rcCs�t�|j�}t||j�}dd�|jD�}yt|�|_|Stk
r�|jdkrT|St|�}t	|�rpt|dt�}||jt|�t
|j��SXdS)z,
    Get the latest version of a class.
    cSsg|]}t|��qSr
)r)�.0�baser
r
r�
<listcomp>uszlatestClass.<locals>.<listcomp>)Z__builtin__�builtinsZ
__metaclass__N)rZnamedModulerrr�	__bases__�tuple�	TypeErrorrr�dict�__dict__)ZoldClassr#ZnewClassZnewBasesZctorr
r
rros

rc@seZdZdZdS)�RebuildErrorzT
    Exception raised when trying to rebuild a class whereas it's not possible.
    N)rrrrr
r
r
rr-�sr-cCst|j�|_dS)z,
    Updates an instance to be current.
    N)r�	__class__)rr
r
r�updateInstance�sr/cCs@|dkrtd��t|�t�d�t�|j�|��t||�}|S)z<
    A getattr method to cause a class to be refreshed.
    �__del__zWithout this, Python segfaults.z#(rebuilding stale {} instance ({})))	�AttributeErrorr/rr�formatr�qualr.r)r�name�resultr
r
r�__injectedgetattr__�s
r6�c
Cs�t��at|d�r |js td��|r:t�d�t|j	���ddl
m}d|_|j
}|tt|�<i}i}i}i}|r�t�d�t|j	���x�|��D]�\}}	tt|	��r�|	j|j	kr�d||	<|r�tj�d	�tj��q�t|	�tjk�r|	j|j
k�rRd||	<|�rRtj�d
�tj��q�t|	t�r�|	j|j	kr�d||	<|r�tj�d�tj��q�W|�|�|�|�|j}
|��}|��}|��}|�r�t�d�t�d
�t|j	���t|�t� �|�r�t�d�t|j	���xr|D]j}t!||j	�|k�rt�d�t"�#|���n:|�r*tj�d�tj��d|_$|j
�%�t&|_'|j	|_�q�W|�r\ddl(}xj|D]b}
t!||
j	�}||
k�r�t�d�t"�#|
���n.x,|�)|
�D]}t!|dd�|
k�r�||_*�q�W�qbW|�r�t�d�t�d�t|j	���d}�xvt+j,��D�]f\}}|d}||k�s|dk�r*�qt|d��s:�qt|d��rJ�qd}x�|j
��D]�\}}	yt-|	�Wnt.k
�r��wZYnX|
|	��r�tt|	���r�|�r�tj�d	�tj��t/|	�}n$|�r�tj�d
�tj��t0|	�}d}t1|||�n2tt|	���rZx"|	j$D]}|
|��rt/|	��qW�qZW|�r|�s|ddk�rtj�d�tj���qWd|_|�r�t�d�t�d�t|j	���|S)zO
    Reload a module and do as much as possible to replace its references.
    �ALLOW_TWISTED_REBUILDzI am not allowed to be rebuilt.zRebuilding {}...r)�
componentsTz  (scanning {}): r7�c�f�o�z  (reload   {})z  (cleaning {}): z)WARNING: class {} not replaced by reload!�xr
Nz-WARNING: new-class {} not replaced by reload!r.z  (fixing   {}): �__file__Z
__bundle__�
�.Fz   Rebuilt {}.)2rr�hasattrr8�RuntimeErrorrrr2�strr�twisted.pythonr9ZALLOW_DUPLICATESr,r!r�itemsrrrZlogfile�write�flushrrr �
isinstance�update�__contains__�keysr�	linecache�
clearcacherrr3r(�clearr6�__getattr__�gcZ
get_referrersr.�sys�modules�hash�	Exceptionrr�setattr)r#ZdoLogr9�dZ
newclasses�classesZ	functions�values�k�vZ
fromOldModuleZclazzrQZnclass�ga�rZmodcount�mk�mod�changed�nvr%r
r
r�rebuild�s�

















rb)r7)rrRrrrM�imprr�ImportErrorrErrZtwisted.python.compatrrr�objectr
r!rrrUr-r/r6rbr
r
r
r�<module>s*,