
    h'                         S r SSKJr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SSKJr   " S S\\   \5      rg)z7
Utility classes for dealing with circular references.
    )logreflect)_constructMethodc                   0    \ rS rSrS rS rSrS rS rSr	g)NotKnown   c                      / U l         SU l        g Nr   )
dependantsresolvedselfs    a/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/persisted/crefutil.py__init__NotKnown.__init__   s        c                 b    U R                   (       a   eU R                  R                  X45        g N)r   r   append)r   mutableObjectkeys      r   addDependantNotKnown.addDependant   s$    ==  34r   Nc                 P    SU l         Xl        U R                   H	  u  p#XU'   M     g )N   )r   resolvedObjectr   )r   	newObjectmutr   s       r   resolveDependantsNotKnown.resolveDependants   s&    'HC H (r   c                      S5       e)Nz(I am not to be used as a dictionary key. r   s    r   __hash__NotKnown.__hash__!   s    <<<qr   )r   r   r   )
__name__
__module____qualname____firstlineno__r   r   r   r   r#   __static_attributes__r"   r   r   r   r      s    5 N!=r   r   c                   $    \ rS rSrSrS rS rSrg)
_Container%   zC
Helper class to resolve circular references on container objects.
c                    [         R                  U 5        X l        Xl        [	        [        [        U5      5      5      U l        [        [        U5      5       HJ  n[        X   [         5      (       d  U R                  R                  U5        M7  X   R                  X5        ML     U R                  (       d+  U R                  U R                  U R                  5      5        gg)z
@param l: The list of object which may contain some not yet referenced
objects.

@param containerType: A type of container objects (e.g., C{tuple} or
    C{set}).
N)r   r   containerTypellistrangelenlocs
isinstanceremover   r   )r   r/   r.   idxs       r   r   _Container.__init__*   s     	$*s1v'	Q=Cafh//		  %##D.	 !
 yy""4#5#5dff#=> r   c                     X R                   U'   [        U[        5      (       dX  U R                  R	                  U5        U R                  (       d+  U R                  U R                  U R                   5      5        ggg)zh
Change the value of one contained objects, and resolve references if
all objects have been referenced.
N)r/   r4   r   r3   r5   r   r.   r   nobjs      r   __setitem___Container.__setitem__>   s\    
 q	#x((IIQ99&&t'9'9$&&'AB  )r   )r.   r/   r3   N)r%   r&   r'   r(   __doc__r   r<   r)   r"   r   r   r+   r+   %   s    ?(	Cr   r+   c                       \ rS rSrSrS rSrg)_TupleJ   zU
Manage tuple containing circular references. Deprecated: use C{_Container}
instead.
c                 8    [         R                  X[        5        g)zQ
@param l: The list of object which may contain some not yet referenced
objects.
N)r+   r   tuple)r   r/   s     r   r   _Tuple.__init__P   s    
 	DU+r   r"   N)r%   r&   r'   r(   r>   r   r)   r"   r   r   r@   r@   J   s    
,r   r@   c                   &    \ rS rSrS rS rS rSrg)_InstanceMethodX   c                 j    [         R                  U 5        X0l        Xl        UR	                  U S5        g r
   )r   r   my_classnamer   )r   im_nameim_selfim_classs       r   r   _InstanceMethod.__init__Y   s*    $ 	T1%r   c                    SS K n[        R                  " S[        R                  " U R
                  5       SU R                   35        [        R                  " SU< SU< 35        UR                  [        R                  S9   e)Nr   zinstance method .zbeing called with  )file)		tracebackr   msgr   qualrI   rJ   print_stacklogfile)r   argskwrS   s       r   __call___InstanceMethod.__call__`   se    "7<<#>"?qLM$THAbV453;;/qr   c                     US:X  d   S5       e[        U[        5      (       d3  [        U R                  U R                  U5      nU R                  U5        g g )Nr   zonly zero index allowed)r4   r   r   rI   rJ   r   )r   r:   r;   methods       r   r<   _InstanceMethod.__setitem__h   sJ    Av000v#x((%dmmTYYDF""6* )r   )rI   rJ   N)r%   r&   r'   r(   r   rZ   r<   r)   r"   r   r   rF   rF   X   s    &+r   rF   c                        \ rS rSrS rS rSrg)_DictKeyAndValueo   c                     Xl         g r   )dict)r   rc   s     r   r   _DictKeyAndValue.__init__p   s    	r   c                     US;  a  [        S5      eU(       a  X l        OX l        [        U S5      (       a6  [        U S5      (       a$  U R                  U R                  U R                  '   g g g )N)r   r   z6DictKeyAndValue should only ever be called with 0 or 1r   value)RuntimeErrorrf   r   hasattrrc   r9   s      r   r<   _DictKeyAndValue.__setitem__s   sY    F?WXXJH4GD'$:$:"&**DIIdhh %;r   )rc   r   rf   N)r%   r&   r'   r(   r   r<   r)   r"   r   r   r`   r`   o   s    -r   r`   c                       \ rS rSrS rSrg)_Dereference~   c                 :    [         R                  U 5        Xl        g r   )r   r   id)r   rn   s     r   r   _Dereference.__init__   s    $r   )rn   N)r%   r&   r'   r(   r   r)   r"   r   r   rk   rk   ~   s    r   rk   )Deferredc                   *    \ rS rSrS rSrS rS rSrg)_Defer   c                 z    [         R                  " U 5        [        R                  U 5        U R                  5         g r   )rp   r   r   pauser   s    r   r   _Defer.__init__   s'    $$

r   r   c                     U R                   (       a  [        SR                  X5      5      eSU l         U R                  U5        g )Nz8setitem should only be called once, setting {!r} to {!r}r   )wassetrg   formatcallbackr9   s      r   r<   _Defer.__setitem__   s<    ;;JQQ  DKcr   c                     [         R                  XU5        U R                  5         U R                  nU R	                  U5        g r   )r   r   unpauseresultr   )r   depr   resovds       r   r   _Defer.addDependant   s4     	d-v&r   )rx   N)	r%   r&   r'   r(   r   rx   r<   r   r)   r"   r   r   rr   rr      s    
 F	'r   rr   N)r>   twisted.pythonr   r   twisted.python.compatr   r   r+   r@   rF   r`   rk   twisted.internet.deferrp   objectrr   r"   r   r   <module>r      sq   
 ( 2= =*"C "CJ,Z ,+h +.- -8  ,'Xfx 'r   