
    hG                        S r SSKrSSKrSSKrSSKJr  SSKJrJ	r	  SSK
Jr  SSKJr   " S S	5      r " S
 S\5      r " S S\5      r " S S\5      r " S S5      r " S S5      r\" 5       r\\\\\\\" S5      \\" \5      /	r " S S5      r  " S S5      r! " S S5      r" " S S5      r#S r$ " S S\%5      r&\RN                  " S5      r(S  r)S! r*S" r+S# r,S$ r- " S% S&5      r.S' r/S.S( jr0S) r1S* r2S+ r3 " S, S-5      r4g)/z|
AOT: Abstract Object Trees
The source-code-marshallin'est abstract-object-serializin'est persister
this side of Marmalade!
    N)crefutil)logreflect)_constructMethod   )generate_tokensc                       \ rS rSrS rSrg)Named!   c                     Xl         g Nname)selfr   s     \/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/persisted/aot.py__init__Named.__init__"   s    	    r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__ r   r   r
   r
   !   s    r   r
   c                       \ rS rSrS rSrg)Class&   c                      SU R                   -  $ )Nz	Class(%r)r   r   s    r   	getSourceClass.getSource'   s    TYY&&r   r   Nr   r   r   r   r    r   r   r   r   r   r   &   s    'r   r   c                       \ rS rSrS rSrg)Function+   c                      SU R                   -  $ )NzFunction(%r)r   r   s    r   r    Function.getSource,   s    		))r   r   Nr"   r   r   r   r$   r$   +   s    *r   r$   c                       \ rS rSrS rSrg)Module0   c                      SU R                   -  $ )Nz
Module(%r)r   r   s    r   r    Module.getSource1   s    dii''r   r   Nr"   r   r   r   r)   r)   0   s    (r   r)   c                        \ rS rSrS rS rSrg)InstanceMethod5   c                     [        U[        5      (       d8  [        U[        5      (       d#  [        U[        5      (       d  [	        SU-  5      eXl        X l        X0l        g )Nz$%s isn't an Instance, Ref, or Deref!)
isinstanceRefInstanceDeref	TypeErrorr   klassinstance)r   r   r6   insts       r   r   InstanceMethod.__init__6   sI    tS!!$))$&&BTIJJ	
r   c                 v    SR                  U R                  U R                  [        U R                  5      5      $ )Nz InstanceMethod({!r}, {!r}, 
 {}))formatr   r6   prettifyr7   r   s    r   r    InstanceMethod.getSourceA   s/    3::IIJJT]]#
 	
r   )r7   r6   r   Nr   r   r   r   r   r    r   r   r   r   r.   r.   5   s    	
r   r.   c                       \ rS rSrSrg)_NoStateObjI   r   N)r   r   r   r   r   r   r   r   r@   r@   I   s    r   r@   c                   &    \ rS rSr\4S jrS rSrg)r3   \   c                     [        U[        5      (       d  [        SU-  5      eXl        U[        La  X l        SU l        g X0l        SU l        g )Nz%s isn't a string!r   r   )r1   strr5   r6   
NoStateObjstatestateIsDict)r   	className__stateObj__rG   s       r   r   Instance.__init__]   sG    )S))09<==
z)%J DJ Dr   c                    U R                   (       a  U R                  nOa[        U R                  [        5      (       a@  [        U R                  R                  [
        5      (       a  U R                  R                  nOS nUb   SU R                  < S[        U5       S3$ SU R                  < S[        U R                  5       S3$ ! [         a     SU R                  < S[        U5       S3s $ f = f)Nz	Instance(, ))
rH   rG   r1   r2   objdictr6   dictToKWNonFormattableDictr<   )r   	stateDicts     r   r    Instance.getSourceh   s    

I

C((Z

-M-M

II J"4::.8I3F2GqII 4::.8DJJ+?*@BB & J"4::.8I3F2GqIIJs   C 'C21C2)r6   rG   rH   N)r   r   r   r   rF   r   r    r   r   r   r   r3   r3   \   s    /9 	!Cr   r3   c                   ,    \ rS rSrS rS rS rS rSrg)r2   x   c                 x    [        U5      S:X  a  US   U l        US   U l        g U(       d  S U l        S U l        g g )N   r   r   )lenrefnumrO   )r   argss     r   r   Ref.__init__y   s9    t9>q'DKAwDHDKDH r   c                 h    U R                   (       a  [        SU SU R                    35      eXl         g )NzError setting id , I already have )rZ   
ValueErrorr   nums     r   setRef
Ref.setRef   s,    ;;05Ft{{mTUUr   c                 h    U R                   (       a  [        SU SU R                    35      eXl         g )NzError setting obj r^   )rO   r_   )r   rO   s     r   setObj
Ref.setObj   s,    881#6GzRSSr   c                     U R                   c  [        S5      eU R                  (       a$  SU R                  [        U R                   5      4-  $ [        U R                   5      $ )Nz7Don't try to display me before setting an object on me!zRef(%d, 
 %s))rO   RuntimeErrorrZ   r<   r   s    r   r    Ref.getSource   sQ    88I  ;;$Xdhh5G'HHH!!r   )rO   rZ   N)	r   r   r   r   r   rb   re   r    r   r   r   r   r2   r2   x   s    

"r   r2   c                   $    \ rS rSrS rS r\rSrg)r4      c                     Xl         g r   rZ   r`   s     r   r   Deref.__init__   s    r   c                      SU R                   -  $ )Nz	Deref(%d)rm   r   s    r   r    Deref.getSource   s    T[[((r   rm   N)r   r   r   r   r   r    __repr__r   r   r   r   r4   r4      s    ) Hr   r4   c                        \ rS rSrS rS rSrg)Copyreg   c                     Xl         X l        g r   loadfuncrG   )r   rw   rG   s      r   r   Copyreg.__init__   s     
r   c                 P    SU R                   < S[        U R                  5       S3$ )NzCopyreg(rM   rN   )rw   r<   rG   r   s    r   r    Copyreg.getSource   s&    $--*"Xdjj-A,B!DDr   rv   Nr>   r   r   r   rs   rs      s    Er   rs   c                 0    [        S[        U 5      -   5      $ )zDPass me an AO, I'll return a nicely-formatted source representation.zapp = )	indentifyr<   )aos    r   r    r       s    X,--r   c                       \ rS rSrSrSrg)rR      z!A dictionary was not formattable.r   N)r   r   r   r   __doc__r   r   r   r   rR   rR      s    +r   rR   z[a-zA-Z_][a-zA-Z0-9_]*$c           	      h   / n[        U R                  5       5      nUR                  5         U Hq  u  p4[        U[        5      (       d  [        SU-  5      e[        R                  U5      (       d  [        SU-  5      eUR                  SU S[        U5       S35        Ms     SR                  U5      $ )Nz%r ain't a stringz%r ain't an identifier
 =, )listitemssortr1   rE   rR   rmatchappendr<   join)doutr   kvs        r   rQ   rQ      s    
COE	JJL!S!!$%81%<==wwqzz$%=%ABB

T!Ahqk]!,-  773<r   c           	      |   [        U S5      (       a  U R                  5       $ [        U 5      nU[        ;   a  [	        U 5      $ U[
        L a  S/nU R                  5        H/  u  p4UR                  S[        U5       S[        U5       S35        M1     UR                  [        U 5      =(       a    S=(       d    S5        SR                  U5      $ U[        L af  S	/nU  H   nUR                  S
[        U5      -  5        M"     UR                  [        U 5      =(       a    S=(       d    S5        SR                  U5      $ U[        L af  S/nU  H   nUR                  S
[        U5      -  5        M"     UR                  [        U 5      =(       a    S=(       d    S5        SR                  U5      $ [        SU SU  S35      e)Nr    {r   z: r   z
 }}r   [z
 %s,z
 ]](z
 )rN   zUnsupported type z when trying to prettify .)hasattrr    type_SIMPLE_BUILTINSreprrP   r   r   r<   rY   r   r   tupler5   )rO   tr   r   r   xs         r   r<   r<      sk   sK  }} I  9$Y%C		

T(1+b!Q?@ $JJs3x+G2s3773<$Y%C

9x{23 JJs3x+G2s3773<%Z%C

9x{23 JJs3x+G2s3773</s2KC5PQRSSr   c                 H   / n/ nSU /n[        UR                  5       Hq  u  nnu  pgu  pn
US;   a  UR                  U5        OUS;   a  UR                  5         US:X  a  UR                  S[        U5      -  5        M`  UR                  U5        Ms     SR	                  U5      $ )Nr   )r   r   r   )r   rN   r    z  )tokenizepopr   rY   r   )sr   stackl	tokenTypetokenStringstartRowstartColumnendRow	endColumnlogicalLines              r   r|   r|      s    
CE	QA 
!%%	/)LL%O+IIK$JJtc%j()JJ{# 
 773<r   c                 4    [        5       R                  U 5      $ )z?
Pass me an Abstract Object Tree, and I'll unjelly it for you.
)AOTUnjellierunjelly)aots    r   unjellyFromAOTr     s     >!!#&&r   c           	         [         [        [        [        [        [
        [        [        S.n[        U S5      (       a  U R                  5       nOU n[        USS5      n[        X1U5        SU;   a  [        US   5      $ [        SU -  5      e)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!
)r3   r.   r   r$   r)   r2   r4   rs   readz<source>execappz'%s needs to define an 'app', it didn't!)r3   r.   r   r$   r)   r2   r4   rs   r   r   compileevalr   r_   )stringOrFilenssourcecodes       r   unjellyFromSourcer     s     (	
B |V$$""$6:v.D2{bi((B\QRRr   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)r   i*  zOI handle the unjellying of an Abstract Object Tree.
See AOTUnjellier.unjellyAO
c                 .    0 U l         / U l        / U l        g r   )
referencesr   afterUnjellyr   s    r   r   AOTUnjellier.__init__/  s    
r   c                 V    [         R                  " 5       nU R                  USU5        U$ )zUnjelly a node, later.r   )r   _DeferunjellyInto)r   noder   s      r   unjellyLaterAOTUnjellier.unjellyLater7  s%    OOAt$r   c                     U R                  U5      nXAU'   [        U[        R                  5      (       a  UR	                  X5        U$ )zfUtility method for unjellying one object into another.
This automates the handling of backreferences.
)	unjellyAOr1   r   NotKnownaddDependant)r   rO   locr}   os        r   r   AOTUnjellier.unjellyInto=  s=     NN2Ca**++NN3$r   c                     [        U[        R                  5      (       a  S /nUR                  US5        OU/nU R                  R                  X45        g )Nr   )r1   r   r   r   r   r   )r   callableresult
listResults       r   	callAfterAOTUnjellier.callAfterG  sJ    fh//00J
A. J  (!78r   c                 <    U R                  UR                  X#5        g)zUtility 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)r   __dict__)r   r7   attrNamer}   s       r   unjellyAttributeAOTUnjellier.unjellyAttributeO  s     	**H9r   c           	      	   U R                   R                  U5        [        U5      nU[        ;   a  U$ U[        L a=  / nU H3  nUR                  S5        U R                  U[        U5      S-
  U5        M5     U$ U[        L ax  / n[        nU Hb  nUR                  S5        [        U R                  U[        U5      S-
  U5      [        R                  5      (       d  MR  [        R                  nMd     U" U5      $ U[        L aY  0 nUR                  5        HA  u  px[        R                  " U5      n	U R                  U	SU5        U R                  U	SU5        MC     U$ UR                  n
U
[         L a   ["        R$                  " UR&                  5      $ U
[(        [*        4;   d  [-        U
[        5      (       a   ["        R.                  " UR&                  5      $ U
[0        L a  UR&                  n["        R.                  " UR2                  5      nU R5                  UR6                  5      nXR8                  ;   aP  Uc  [;        X5      $ [        U[        R                  5      (       a  [        R<                  " XU5      $ [?        XU5      $ [A        S5      eU
[B        L a  ["        R.                  " UR2                  5      nU R5                  URD                  5      nURG                  U5      n[I        US5      (       a  U RK                  URL                  U5        U$ [        U[        5      (       a	  UUl        U$ URO                  5       Ul        U$ U
[P        L a  U R5                  URR                  5      nURT                  nU RV                  RY                  U5      nUc  UU RV                  U'   U$ [        U[        R                  5      (       a"  UR[                  U5        UU RV                  U'   U$ Uc   U$ []        SU< SU< SU< S35      eU
[^        L aS  URT                  nU RV                  RY                  U5      nUc'  [        R`                  " U5      nUU RV                  U'   U$ U$ U
[b        L aN  ["        R.                  " URd                  5      nU Rg                  URD                  5      Ri                  S	 U5      nU$ [A        S
U-  5      e)zQUnjelly an Abstract Object and everything it contains.
I return the real object.
Nr   r   zinstance method changed__setstate__z&Multiple references with the same ID: rM   !c                     U" U 6 $ r   r   )r   _ls     r   <lambda>(AOTUnjellier.unjellyAO.<locals>.<lambda>  s    r6{r   zUnsupported AOT type: %s)5r   r   r   r   r   r   rY   r   r1   r   r   _TuplerP   r   _DictKeyAndValue	__class__r)   r   namedModuler   r   r$   
issubclassnamedObjectr.   r6   r   r7   r   getattr_InstanceMethodr   r5   r3   rG   __new__r   r   r   __getstate__r2   rO   rZ   r   getresolveDependantsr_   r4   _Dereferencers   rw   r   addCallback)r   r}   r   r   r   tuple_r   r   r   kvdcim_nameim_classim_selfr6   rG   r8   r   refkeyrefra   derrw   s                          r   r   AOTUnjellier.unjellyAOX  s	    	

"H  I$YA  CFQJ2  H%ZAFd..q#a&1*a@(BSBSTT%__F  !9$YA
//2  a+  a+ # H AF{**27733uh'':a+>+>**27733n$''"..rxx8..5///&x99#GX->->??'77(SS/7KK#$=>>h++BHH5rxx0}}U+5.11NN4#4#4e<
 	  t,,$)DM  %*$6$6$8DMcNN266*oo))&1;./DOOF+   X%6%677))!,./DOOF+  ^ 	 %,  eiioo))#.;"//4C+.DOOC(J
g"..r{{;%%bhh/;;2H  :Q >??r   c           	      >    S /nU R                  USU5        U R                   H  u  p4U" US   5        M     US   $ ! [         aU    [        R                  " S5        [        R                  " SR                  [        [        U R                  5      5      5        e f = f)Nr   +Error jellying object! Stacktrace follows::
)	r   r   BaseExceptionr   msgr   mapr   r   )r   r}   r   funcr   s        r   r   AOTUnjellier.unjelly  s    		AQ2&,,QqT
 -Q4K 	GGABGGDIIc$

345	s
   := AB)r   r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   *  s-    9:f@P
r   r   c                 4    [        5       R                  U 5      $ )z-Convert an object to an Abstract Object Tree.)
AOTJellierjelly)rO   s    r   
jellyToAOTr    s    <c""r   c                     [        U 5      nU(       a*  UR                  [        U5      R                  S5      5        g[        U5      $ )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.
zutf-8N)r  writer    encode)rO   filer   s      r   jellyToSourcer	    s5     S/C

9S>((12~r   c                 .    U R                   R                  $ )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{type}
)__self__r   methodObjects    r   _classOfMethodr    s       ***r   c                     U R                   $ )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}
)__func__r  s    r   _funcOfMethodr            r   c                     U R                   $ )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  s    r   _selfOfMethodr    r  r   c                   ,    \ rS rSrS rS rS rS rSrg)r  i  c                 .    0 U l         SU l        / U l        g )Nr   )prepared_ref_idr   r   s    r   r   AOTJellier.__init__  s    
r   c                 2    XR                   [        U5      '   g)zYI prepare an object for later referencing, by storing its id()
and its _AORef in a cache.N)r  id)r   aorefobjects      r   prepareForRefAOTJellier.prepareForRef  s     %*bj!r   c           	      t  ^ ^^ [        T5      nT R                  R                  [        T5      5        U[        ;   a  TmGOe[        U[        R                  5      (       aW  [        [        T5      R                  [        R                  " [        T5      5      T R                  [        T5      5      5      mGO[        U[        R                   5      (       a  [#        TR                  5      mGO[        U[         5      (       a!  [%        [        R                  " T5      5      mGOU[        R&                  L a!  [)        [        R*                  " T5      5      mGOO[-        T5      T R.                  ;   ar  T R.                  [-        T5         nUR0                  (       a  UR0                  nO1T R2                  S-   T l        T R2                  nUR5                  U5        [7        U5      $ [9        5       mUUU 4S jnT R;                  TT5        U[<        L a3  TR?                  T Vs/ s H  nT R                  U5      PM     sn5        GOdU[@        L a0  TR?                  [A        [C        T R                  T5      5      5        GO+U[D        L aP  0 nTRG                  5        H(  u  pT R                  U	5      UT R                  U5      '   M*     TR?                  U5        OU[H        RJ                  ;   aZ  [H        RJ                  U   " T5      u  pTR?                  [M        [        R*                  " U
5      T R                  U5      5      5        Od[O        TS5      (       a  U" TRQ                  5       5        O<[O        TS5      (       a  U" TRR                  5        O[U        SUR                  -  5      eT R                  S	 T$ s  snf )z+I turn an object into an AOT and return it.r   c                    > TR                  [        [        R                  " TR                  5      TR                  U 5      5      5        g r   )re   r3   r   qualr   	jellyToAO)rG   rO   retvalr   s    r   
_stateFrom(AOTJellier.jellyToAO.<locals>._stateFromL  s/    W\\#--8$..:OPr   r   r   zUnsupported type: %s)+r   r   r   r   r   r   types
MethodTyper.   r  r   r   r"  r  r#  r  
ModuleTyper)   r   FunctionTyper$   fullFuncNamer  r  rZ   r  rb   r4   r2   r  r   re   r   r   rP   r   copy_regdispatch_tablers   r   r   r   r5   )r   rO   objTypeoldRefkeyr%  r   r   r   r   unpickleFuncrG   r$  s   ``          @r   r#  AOTJellier.jellyToAO  s   s)

$s)$ &&F!1!122 $c"++^C01}S12F !1!122CLL)F&&7<<,-F***g22378F #w$--'r#w/== --C $(<<!#3DL,,CMM#&Sz!UF
 vs+$#>#Qt~~a0#>?E!eC$<=>DIIKDA+/>>!+<AdnnQ'( (a H333&.&=&=g&Fs&K#G00>u@UV n--3++-.j))3<<( 69I9I IJJJJrN5 ?s   N5c                      U R                  U5      nU$ ! [         aG    [        R                  " S5        [        R                  " SR	                  U R
                  5      5        e f = f)Nr   r   )r#  r   r   r   r   r   )r   rO   r}   s      r   r  AOTJellier.jellyp  sR    	$BI 	GGABGGDIIdjj)*	s
    AA&)r  r  r   N)	r   r   r   r   r   r  r#  r  r   r   r   r   r  r    s    *
Vpr   r  r   )5r   copyregr-  rer(  twisted.persistedr   twisted.pythonr   r   twisted.python.compatr   	_tokenizer   r   r
   r   r$   r)   r.   r@   rF   boolbytesrE   intfloatcomplexr   sliceEllipsisr   r3   r2   r4   rs   r    	ExceptionrR   r   r   rQ   r<   r|   r   r   r   r  r	  r  r  r  r  r   r   r   <module>rD     s7    	  & ' 2 3 
'E '
*u *
(U (

 
(	 	 ]
 			J	N
 C C8" "< E E.
, , JJ()
TD6'S>` `P#

+
!
!k kr   