Your IP : 216.73.216.213


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

B

:��]�H�
@sLdZddlmZmZddlZddlZyddlmZWn ek
rTddlmZYnXyddl	Z	Wnddl
Z	YnXddlmZm
Z
ddlmZddlmZmZmZGd	d
�d
�ZGdd�de�ZGd
d�de�ZGdd�de�ZGdd�d�ZGdd�d�Ze�Zeeeeeee d�e!e e"�g	Z#ye#�$e%�Wne&k
�rJYnXGdd�d�Z'Gdd�d�Z(Gdd�d�Z)Gdd�d�Z*dd�Z+Gdd �d e,�Z-e�.d!�Z/d"d#�Z0d$d%�Z1d&d'�Z2d(d)�Z3d*d+�Z4Gd,d-�d-�Z5d.d/�Z6d;d0d1�Z7ydd2lm8Z9m:Z;Wnek
�r dZ9dZ;YnXd3d4�Z<d5d6�Z=d7d8�Z>Gd9d:�d:�Z?dS)<z|
AOT: Abstract Object Trees
The source-code-marshallin'est abstract-object-serializin'est persister
this side of Marmalade!
�)�division�absolute_importN)�generate_tokens)�tokenize)�reflect�log)�crefutil)�unicode�_PY3�_constructMethodc@seZdZdd�ZdS)�NamedcCs
||_dS)N)�name)�selfr
�r�H/opt/alt/python37/lib64/python3.7/site-packages/twisted/persisted/aot.py�__init__'szNamed.__init__N)�__name__�
__module__�__qualname__rrrrrr&src@seZdZdd�ZdS)�ClasscCs
d|jS)Nz	Class(%r))r
)rrrr�	getSource+szClass.getSourceN)rrrrrrrrr*src@seZdZdd�ZdS)�FunctioncCs
d|jS)NzFunction(%r))r
)rrrrr/szFunction.getSourceN)rrrrrrrrr.src@seZdZdd�ZdS)�ModulecCs
d|jS)Nz
Module(%r))r
)rrrrr3szModule.getSourceN)rrrrrrrrr2src@seZdZdd�Zdd�ZdS)�InstanceMethodcCs@t|t�s*t|t�s*t|t�s*td|��||_||_||_dS)Nz$%s isn't an Instance, Ref, or Deref!)�
isinstance�Ref�Instance�Deref�	TypeErrorr
�klass�instance)rr
r�instrrrr8s
zInstanceMethod.__init__cCsd|j|jt|j�fS)NzInstanceMethod(%r, %r, 
%s))r
r�prettifyr )rrrrr?szInstanceMethod.getSourceN)rrrrrrrrrr7src@seZdZdS)�_NoStateObjN)rrrrrrrr#Csr#c@s eZdZefdd�Zdd�ZdS)rcKsBt|t�std|��||_|tk	r2||_d|_n||_d|_dS)Nz%s isn't a string!r�)r�strrr�
NoStateObj�state�stateIsDict)rZ	classNameZ__stateObj__r'rrrrRs
zInstance.__init__cCs�|jr|j}n(t|jt�r2t|jjt�r2|jj}nd}|dk	rtyd|jt|�fStk
rrd|jt	|�fSXd|jt	|j�fS)NzInstance(%r, %s))
r(r'rr�obj�dictr�dictToKW�NonFormattableDictr")rZ	stateDictrrrr]s
zInstance.getSourceN)rrrr&rrrrrrrQsrc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
rcGs6t|�dkr"|d|_|d|_n|s2d|_d|_dS)N�rr$)�len�refnumr))r�argsrrrrns
zRef.__init__cCs"|jrtd||jf��||_dS)Nz&Error setting id %s, I already have %s)r/�
ValueError)r�numrrr�setRefwsz
Ref.setRefcCs"|jrtd||jf��||_dS)Nz'Error setting obj %s, I already have %s)r)r1)rr)rrr�setObj|sz
Ref.setObjcCs6|jdkrtd��|jr,d|jt|j�fSt|j�S)Nz7Don't try to display me before setting an object on me!z
Ref(%d, 
%s))r)�RuntimeErrorr/r")rrrrr�s

z
Ref.getSourceN)rrrrr3r4rrrrrrls	rc@s eZdZdd�Zdd�ZeZdS)rcCs
||_dS)N)r/)rr2rrrr�szDeref.__init__cCs
d|jS)Nz	Deref(%d))r/)rrrrr�szDeref.getSourceN)rrrrr�__repr__rrrrr�src@seZdZdd�Zdd�ZdS)�CopyregcCs||_||_dS)N)�loadfuncr')rr8r'rrrr�szCopyreg.__init__cCsd|jt|j�fS)NzCopyreg(%r, %s))r8r"r')rrrrr�szCopyreg.getSourceN)rrrrrrrrrr7�sr7cCstdt|��S)zDPass me an AO, I'll return a nicely-formatted source representation.zapp = )�	indentifyr")�aorrrr�src@seZdZdZdS)r,z&A dictionary was not formattable.
    N)rrr�__doc__rrrrr,�sr,z[a-zA-Z_][a-zA-Z0-9_]*$cCsvg}t|���}|��xR|D]J\}}t|t�s<td|��t�|�sRtd|��|�d|t	|�f�qWd�
|�S)Nz%r ain't a stringz%r ain't an identifierz
%s=%s,�)�list�items�sortrr%r,�r�match�appendr"�join)�d�outr>�k�vrrrr+�s

r+cCs>t|d�r|��St|�}|tkr*t|�S|tkr�dg}x.|��D]"\}}|�dt|�t|�f�qBW|�t	|�rxdpzd�d�
|�S|tkr�dg}x|D]}|�dt|��q�W|�t	|�r�d	p�d
�d�
|�S|tk�r*dg}x|D]}|�dt|��q�W|�t	|��rd�pd
�d�
|�St
d||f��dS)Nr�{z	
%s: %s,z
}�}r<�[z
%s,z
]�]�(z
)�)z/Unsupported type %s when trying to prettify %s.)�hasattrr�type�_SIMPLE_BUILTINS�reprr*r>rBr"r.rCr=�tupler)r)�trErFrG�xrrrr"�s0






r"cCs�g}g}d|g}xnt|j�D]`\}}\}}\}}	}
|dkrF|�|�n|dkrV|��|dkrr|�dt|��q|�|�qWd�|�S)Nr<)rJrLrH)rKrMrI�z  )r�poprBr.rC)�srE�stack�lZ	tokenTypeZtokenStringZstartRowZstartColumnZendRowZ	endColumnZlogicalLinerrrr9�s r9cCst��|�S)zG
    Pass me an Abstract Object Tree, and I'll unjelly it for you.
    )�AOTUnjellier�unjelly)�aotrrr�unjellyFromAOT�sr]c	Csjttttttttd�}t|d�r*|�	�}n|}t
|dd�}t|||�d|krZt|d�St
d|��dS)z�
    Pass me a string of code or a filename that defines an 'app' variable (in
    terms of Abstract Objects!), and I'll execute it and unjelly the resulting
    AOT for you, returning a newly unpersisted Application object!
    )rrrrrrrr7�readz<source>�execZappz'%s needs to define an 'app', it didn't!N)rrrrrrrr7rNr^�compile�evalr]r1)ZstringOrFile�ns�source�coderrr�unjellyFromSource�s 

rec@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)rZzWI handle the unjellying of an Abstract Object Tree.
    See AOTUnjellier.unjellyAO
    cCsi|_g|_g|_dS)N)�
referencesrX�afterUnjelly)rrrrrszAOTUnjellier.__init__cCst��}|�|d|�|S)zUnjelly a node, later.
        r)rZ_Defer�unjellyInto)r�noderDrrr�unjellyLater#szAOTUnjellier.unjellyLatercCs.|�|�}|||<t|tj�r*|�||�|S)zvUtility method for unjellying one object into another.
        This automates the handling of backreferences.
        )�	unjellyAOrr�NotKnown�addDependant)rr)�locr:�orrrrh*s

zAOTUnjellier.unjellyIntocCs:t|tj�r dg}|�|d�n|g}|j�||f�dS)Nr$)rrrlrmrgrB)r�callable�resultrYrrr�	callAfter4s
zAOTUnjellier.callAftercCs|�|j||�dS)z�Utility method for unjellying into instances of attributes.

        Use this rather than unjellyAO unless you like surprising bugs!
        Alternatively, you can use unjellyInto on your instance's __dict__.
        N)rh�__dict__)rr �attrNamer:rrr�unjellyAttribute<szAOTUnjellier.unjellyAttributecCs8|j�|�t|�}|tkr |S|tkr^g}x,|D]$}|�d�|�|t|�d|�q2W|S|tkr�g}t}x:|D]2}|�d�t|�|t|�d|�t	j
�rtt	j}qtW||�S|tk�ri}x:|�
�D].\}}t	�|�}	|�|	d|�|�|	d|�q�W|S|j}
|
tk�rt�|j�S|
ttgk�s6t|
t��rBt�|j�S|
tk�r�|j}t�|j�}|�|j�}
||jk�r�|
dk�r�t||�St|
t	j
��r�t	�||
|�St|||
�Snt d���nl|
t!k�r(t�|j�}|�|j"�}t#|d��r�|�$|�}nt%|�}t#|d��r|�&|j'|�n||_|S|
t(k�r�|�|j)�}|j*}|j+�,|�}|dk�rf||j+|<nBt|t	j
��r�|�-|�||j+|<n|dk�r�nt.d|||f��|S|
t/k�r�|j*}|j+�,|�}|dk�r�t	�0|�}||j+|<|S|S|
t1k�r t�|j2�}|�3|j"��4dd	�|�}|St d
|��|jd=dS)zaUnjelly an Abstract Object and everything it contains.
        I return the real object.
        Nr$rzinstance method changed�__new__�__setstate__z1Multiple references with the same ID: %s, %s, %s!cSs||�S)Nr)rqZ_lrrr�<lambda>��z(AOTUnjellier.unjellyAO.<locals>.<lambda>zUnsupported AOT type: %s���)5rXrBrOrPr=rhr.rRrrrlZ_Tupler*r>Z_DictKeyAndValue�	__class__rrZnamedModuler
rr�
issubclassZnamedObjectrrrkr rs�getattrZ_InstanceMethodrrrr'rNrv�_OldStyleInstancerrrwrr)r/rf�getZresolveDependantsr1rZ_Dereferencer7r8rjZaddCallback)rr:rSrYrTZtuple_rDrFrGZkvd�cZim_name�im_class�im_selfrr'r!roZrefkey�refr2Zderr8rrrrkEs�




















zAOTUnjellier.unjellyAOc
Csry<dg}|�|d|�x|jD]\}}||d�qW|dSt�d�t�d�tt|j����YnXdS)Nrz+Error jellying object! Stacktrace follows::�
)rhrgr�msgrC�maprQrX)rr:rY�funcrGrrrr[�s
zAOTUnjellier.unjellyN)rrrr;rrjrhrrrurkr[rrrrrZs
	hrZcCst��|�S)z-Convert an object to an Abstract Object Tree.)�
AOTJellier�jelly)r)rrr�
jellyToAOT�sr�cCs.t|�}|r"|�t|��d��nt|�SdS)z�
    Pass me an object and, optionally, a file object.
    I'll convert the object to an AOT either return it (if no file was
    specified) or write it to the file.
    zutf-8N)r��writer�encode)r)�filer\rrr�
jellyToSource�sr�)�	ClassType�InstanceTypecCstr|jjS|jS)z�
    Get the associated class of the given method object.

    @param methodObject: a bound method
    @type methodObject: L{types.MethodType}

    @return: a class
    @rtype: L{types.ClassType} or L{type}
    )r
�__self__r{r�)�methodObjectrrr�_classOfMethod�s
r�cCstr
|jS|jS)z�
    Get the associated function of the given method object.

    @param methodObject: a bound method
    @type methodObject: L{types.MethodType}

    @return: the function implementing C{methodObject}
    @rtype: L{types.FunctionType}
    )r
�__func__Zim_func)r�rrr�
_funcOfMethod�s
r�cCstr
|jS|jS)z�
    Get the object that a bound method is bound to.

    @param methodObject: a bound method
    @type methodObject: L{types.MethodType}

    @return: the C{self} passed to C{methodObject}
    @rtype: L{object}
    )r
r�r�)r�rrr�
_selfOfMethod�s
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
r�cCsi|_d|_g|_dS)Nr)�prepared�_ref_idrX)rrrrr	szAOTJellier.__init__cCs||jt|�<dS)zaI prepare an object for later referencing, by storing its id()
        and its _AORef in a cache.N)r��id)rZaoref�objectrrr�
prepareForRefszAOTJellier.prepareForRefcsLt��}�j�t���|tkr(���n|tjkr\tt��j	t
�t�����
t������n�|tjkrtt�j	���n�|tkr�tt
������n�t|t�r�tt
������n�|tjkr�tt
������nzt���jk�r�jt��}|jr�|j}n�jd�_�j}|�|�t|�St�����fdd�}�����|tk�r\�� �fdd��D��n�|t!k�r~�� t!t"�j
����n�|t#k�r�i}x*��$�D]\}}��
|�|��
|�<�q�W�� |�n||t%j&k�rt%j&|��\}	}
�� t't
�|	���
|
���n@t(�d��r|��)��n&t(�d��r2|�j*�nt+d|j	���jd	=�S)
z+I turn an object into an AOT and return it.r$cs"��tt��j���|���dS)N)r4rr�qualr{�	jellyToAO)r')r)�retvalrrr�
_stateFromIsz(AOTJellier.jellyToAO.<locals>._stateFromcsg|]}��|��qSr)r�)�.0ro)rrr�
<listcomp>Osz(AOTJellier.jellyToAO.<locals>.<listcomp>�__getstate__rszUnsupported type: %srz),rOrXrBrQrP�types�
MethodTyperr�rrr�r�r�r��
ModuleTyper�_OldStyleClassrr|�FunctionTyperZfullFuncNamer�r�r/r�r3rrr�r=r4rRr�r*r>�copy_reg�dispatch_tabler7rNr�rsr)rr)ZobjTypeZoldRef�keyr�rDrFrGZunpickleFuncr'r)r)r�rrr�s^









zAOTJellier.jellyToAOcCs>y|�|�}|St�d�t�d�|j���YnXdS)Nz+Error jellying object! Stacktrace follows::r�)r�rr�rCrX)rr)r:rrrr�js

zAOTJellier.jellyN)rrrrr�r�r�rrrrr�sVr�)N)@r;�
__future__rrr��rerr�ImportErrorr��copyregZtwisted.pythonrrZtwisted.persistedrZtwisted.python.compatr	r
rrrrrrr#r&�bool�bytes�int�float�complexrO�slice�EllipsisrPrB�long�	NameErrorrrrr7r�	Exceptionr,r`r@r+r"r9r]rerZr�r�r�r�r�r~r�r�r�r�rrrr�<module>
sf	

!'