HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/twisted/persisted/__pycache__/aot.cpython-38.pyc
U

��W[�H�
@sLdZddlmZmZddlZddlZzddlmZWn ek
rTddlmZYnXz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#ze#�$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�Z7zdd2lm8Z9m: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�7/usr/lib/python3/dist-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)rrrrrr/szFunction.getSourceNrrrrrr.src@seZdZdd�ZdS)�ModulecCs
d|jS)Nz
Module(%r)rrrrrr3szModule.getSourceNrrrrrr2src@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)rrr#�instrrrr8s
zInstanceMethod.__init__cCsd|j|jt|j�fS)NzInstanceMethod(%r, %r, 
%s))rr#�prettifyr$rrrrr?szInstanceMethod.getSourceN�rrrrrrrrrr7src@seZdZdS)�_NoStateObjN)rrrrrrrr(Csr(c@s eZdZefdd�Zdd�ZdS)r cKsBt|t�std|��||_|tk	r2||_d|_n||_d|_dS)Nz%s isn't a string!r�)r�strr"r#�
NoStateObj�state�stateIsDict)rZ	classNameZ__stateObj__r,rrrrRs
zInstance.__init__cCs�|jr|j}n(t|jt�r2t|jjt�r2|jj}nd}|dk	rzzd|jt|�fWStk
rxd|jt	|�fYSXd|jt	|j�fS)NzInstance(%r, %s))
r-r,rr�obj�dictr#�dictToKW�NonFormattableDictr&)rZ	stateDictrrrr]s
zInstance.getSourceN)rrrr+rrrrrrr Qsr c@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)r4�
ValueError�r�numrrr�setRefwsz
Ref.setRefcCs"|jrtd||jf��||_dS)Nz'Error setting obj %s, I already have %s)r.r6)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.�RuntimeErrorr4r&rrrrr�s

z
Ref.getSourceN)rrrrr9r:rrrrrrls	rc@s eZdZdd�Zdd�ZeZdS)r!cCs
||_dSr
�r4r7rrrr�szDeref.__init__cCs
d|jS)Nz	Deref(%d)r<rrrrr�szDeref.getSourceN)rrrrr�__repr__rrrrr!�sr!c@seZdZdd�Zdd�ZdS)�CopyregcCs||_||_dSr
)�loadfuncr,)rr?r,rrrr�szCopyreg.__init__cCsd|jt|j�fS)NzCopyreg(%r, %s))r?r&r,rrrrr�szCopyreg.getSourceNr'rrrrr>�sr>cCstdt|��S)zDPass me an AO, I'll return a nicely-formatted source representation.zapp = )�	indentifyr&)�aorrrr�src@seZdZdZdS)r1z&A dictionary was not formattable.
    N)rrr�__doc__rrrrr1�sr1z[a-zA-Z_][a-zA-Z0-9_]*$cCsrg}t|���}|��|D]J\}}t|t�s:td|��t�|�sPtd|��|�d|t	|�f�qd�
|�S)Nz%r ain't a stringz%r ain't an identifierz
%s=%s,�)�list�items�sortrr*r1�r�match�appendr&�join)�d�outrE�k�vrrrr0�s

�r0cCs2t|d�r|��St|�}|tkr*t|�S|tkr�dg}|��D]"\}}|�dt|�t|�f�q@|�t	|�rtdpvd�d�
|�S|tkr�dg}|D]}|�dt|��q�|�t	|�r�d	p�d
�d�
|�S|tk�rdg}|D]}|�dt|��q�|�t	|��rd�pd
�d�
|�St
d||f��dS)Nr�{z	
%s: %s,z
}�}rC�[z
%s,z
]�]�(z
)�)z/Unsupported type %s when trying to prettify %s.)�hasattrr�type�_SIMPLE_BUILTINS�reprr/rErIr&r3rJrD�tupler")r.�trLrMrN�xrrrr&�s0




r&cCs�g}g}d|g}t|j�D]`\}}\}}\}}	}
|dkrD|�|�n|dkrT|��|dkrp|�dt|��q|�|�qd�|�S)NrC)rQrSrO)rRrTrP�z  )r�poprIr3rJ)�srL�stack�lZ	tokenTypeZtokenStringZstartRowZstartColumnZendRowZ	endColumnZlogicalLinerrrr@�s�r@cCst��|�S)zG
    Pass me an Abstract Object Tree, and I'll unjelly it for you.
    )�AOTUnjellier�unjelly)�aotrrr�unjellyFromAOT�srdc	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!
    )r rrrrrr!r>�readz<source>�execZappz'%s needs to define an 'app', it didn't!N)r rrrrrr!r>rUre�compile�evalrdr6)ZstringOrFile�ns�source�coderrr�unjellyFromSource�s"�


rlc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)razWI handle the unjellying of an Abstract Object Tree.
    See AOTUnjellier.unjellyAO
    cCsi|_g|_g|_dSr
)�
referencesr_�afterUnjellyrrrrrszAOTUnjellier.__init__cCst��}|�|d|�|S)zUnjelly a node, later.
        r)rZ_Defer�unjellyInto)rZnoderKrrr�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.ZlocrA�orrrro*s

zAOTUnjellier.unjellyIntocCs:t|tj�r dg}|�|d�n|g}|j�||f�dS)Nr))rrrrrsrnrI)r�callable�resultr`rrr�	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)ro�__dict__)rr$ZattrNamerArrr�unjellyAttribute<szAOTUnjellier.unjellyAttributecCs,|j�|�t|�}|tkr |S|tkrZg}|D]$}|�d�|�|t|�d|�q0|S|tkr�g}t}|D]2}|�d�t|�|t|�d|�t	j
�rnt	j}qn||�S|tk�r�i}|�
�D].\}}t	�|�}	|�|	d|�|�|	d|�q�|S|j}
|
tk�rt�|j�S|
ttfk�s*t|
t��r6t�|j�S|
tk�r�|j}t�|j�}|�|j�}
||jk�r�|
dk�r~t||�St|
t	j
��r�t	�||
|�St|||
�Snt d���nl|
t!k�rt�|j�}|�|j"�}t#|d��r�|�$|�}nt%|�}t#|d��r|�&|j'|�n||_|S|
t(k�r�|�|j)�}|j*}|j+�,|�}|dk�rZ||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�rt�|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||�Sr
r)rvZ_lrrr�<lambda>��z(AOTUnjellier.unjellyAO.<locals>.<lambda>zUnsupported AOT type: %s���)5r_rIrVrWrDror3rYrrrrZ_Tupler/rEZ_DictKeyAndValue�	__class__rrZnamedModulerrr�
issubclassZnamedObjectrr#rqr$rx�getattrZ_InstanceMethodrr"r r,rUrz�_OldStyleInstancerwr{rr.r4rm�getZresolveDependantsr6r!Z_Dereferencer>r?rpZaddCallback)rrArZr`r[Ztuple_rKrMrNZkvd�cZim_name�im_class�im_selfr#r,r%rtZrefkey�refr8Zderr?rrrrqEs�

















�zAOTUnjellier.unjellyAOc
Cspz:dg}|�|d|�|jD]\}}||d�q|dWSt�d�t�d�tt|j����YnXdS)Nr�+Error jellying object! Stacktrace follows::�
)rornr�msgrJ�maprXr_)rrAr`�funcrNrrrrb�s

zAOTUnjellier.unjellyN)rrrrBrrprorwryrqrbrrrrras
	hracCs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.�filercrrr�
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__rr��Z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_funcr�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_idr_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.prepareForRefcsHt��}�j�t���|tkr(���n|tjkr\tt��j	t
�t�����
t������n�|tjkrtt�j	���n�|tkr�tt
������n�t|t�r�tt
������n�|tjkr�tt
������nvt���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}��$�D]\}}��
|�|��
|�<�q��� |�n||t%j&k�r�t%j&|��\}	}
�� t't
�|	���
|
���n@t(�d��r|��)��n&t(�d��r.|�j*�nt+d|j	���jd	=�S)
z+I turn an object into an AOT and return it.r)cs"��tt��j���|���dSr
)r:r r�qualr�	jellyToAO)r,�r.Zretvalrrr�
_stateFromIs�z(AOTJellier.jellyToAO.<locals>._stateFromcsg|]}��|��qSr)r�)�.0rtrrr�
<listcomp>Osz(AOTJellier.jellyToAO.<locals>.<listcomp>�__getstate__rxzUnsupported type: %sr~),rVr_rIrXrW�types�
MethodTyperr�rrr�r�r�r��
ModuleTyper�_OldStyleClassrr��FunctionTyperZfullFuncNamer�r�r4r�r9r!rr�rDr:rYr�r/rE�copy_reg�dispatch_tabler>rUr�rxr")rr.ZobjTypeZoldRef�keyr�rKrMrNZunpickleFuncr,rr�rr�sb

�







�zAOTJellier.jellyToAOcCs@z|�|�}|WSt�d�t�d�|j���YnXdS)Nr�r�)r�rr�rJr_)rr.rArrrr�js

zAOTJellier.jellyN)rrrrr�r�r�rrrrr�sVr�)N)@rBZ
__future__rrr��rerr�ImportErrorr��copyregZtwisted.pythonrrZtwisted.persistedrZtwisted.python.compatr	r
rrrrrrr(r+�bool�bytes�int�float�complexrV�slice�EllipsisrWrIZlong�	NameErrorr rr!r>r�	Exceptionr1rgrGr0r&r@rdrlrar�r�r�r�r�r�r�r�r�r�rrrr�<module>sv	�

!'