
    h                     ^    S r SSKJr  SSKJrJr  SSKJrJr   " S S\R                  5      r
g)z 
An in-memory caching resolver.
    )defer)commondns)failurelogc                   R    \ rS rSrSrSrSS jrS rS rS r	SS jr
SS	 jrS
 rSrg)CacheResolver   zw
A resolver that serves records from a local, memory cache.

@ivar _reactor: A provider of L{interfaces.IReactorTime}.
Nc                     [         R                  R                  U 5        0 U l        X l        0 U l        Uc  SSKJn  X0l        U(       a/  UR                  5        H  u  nu  pVU R                  XFU5        M     g g )Nr   )reactor)r   ResolverBase__init__cacheverbosecanceltwisted.internetr   _reactoritemscacheResult)selfr   r   r   querysecondspayloads          Z/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/names/cache.pyr   CacheResolver.__init__   sf    $$T*
?0-2[[]))  9 .;     c                     Xl         U R                  R                  5       nU R                  R	                  5        H>  u  nu  nu  pVnX$-
  nXV-   U-    H#  n	U	R
                  U:  d  M  U R                  U	   M<     M@     g N)__dict__r   r   r   r   ttl)
r   statenowkwhenansaddnsdiffrecs
             r   __setstate__CacheResolver.__setstate__&   sn    mm##%)-)9)9);%A%ns:Dy2~77T>

1 & *<r   c                     U R                   R                  5        H  nUR                  5         M     U R                   R                  5         U R                  $ r   )r   valuesclearr   )r   cs     r   __getstate__CacheResolver.__getstate__1   s<    ##%AHHJ &}}r   c                 `   U R                   R                  5       n[        R                  " XU5      n U R                  U   u  nu  pn
U R
                  (       a"  [        R                  " S[        U5      -   5        XW-
  n U Vs/ s H\  n[        R                  " UR                  R                  UR                  UR                  UR                  U-
  UR                  5      PM^     snU	 Vs/ s H\  n[        R                  " UR                  R                  UR                  UR                  UR                  U-
  UR                  5      PM^     snU
 Vs/ s H\  n[        R                  " UR                  R                  UR                  UR                  UR                  U-
  UR                  5      PM^     sn4n[        R                   " U5      $ s  snf s  snf s  snf ! ["         aA    [        R$                  " [&        R(                  " [        R*                  " U5      5      5      s $ f = f! [,         as    U R
                  S:  a"  [        R                  " S[        U5      -   5        [        R$                  " [&        R(                  " [        R*                  " U5      5      5      s $ f = f)NzCache hit for    zCache miss for )r   r   r   Queryr   r   r   msgreprRRHeadernametypeclsr    r   r   succeed
ValueErrorfailr   FailureDomainErrorKeyError)r   r8   r:   r9   timeoutr"   qr$   r%   authr&   r(   rresults                 r   _lookupCacheResolver._lookup7   s   mm##%IId#&#	-%)ZZ]"D"3c ||(4:56:D- "%	 "%A FFKKaii "%	 "&	 "&A FFKKaii "&	 "%	 "%A FFKKaii "%	. }}V,,-  Jzz'//#//$2G"HIIJ=  	F||a)DJ67::goocood.CDEE	FsR   H0  G" A#G'G" -A#GG" A#G9G" G" "AH-,H-0A:J-,J-c                 ~    [         R                  " [        R                  " [        R
                  " U5      5      5      $ r   )r   r=   r   r>   r   r?   )r   r8   rA   s      r   lookupAllRecordsCacheResolver.lookupAllRecords_   s#    zz'//#//$*?@AAr   c                 >   U R                   S:  a  [        R                  " SU-  5        U=(       d    U R                  R	                  5       U4U R
                  U'   XR                  ;   a  U R                  U   R                  5         [        US   5      [        US   5      -   [        US   5      -   nU(       a.  US   R                  nU H  n[        XVR                  5      nM     OSnU R                  R                  XPR                  U5      U R                  U'   g)aq  
Cache a DNS entry.

@param query: a L{dns.Query} instance.

@param payload: a 3-tuple of lists of L{dns.RRHeader} records, the
    matching result of the query (answers, authority and additional).

@param cacheTime: The time (seconds since epoch) at which the entry is
    considered to have been added to the cache. If L{None} is given,
    the current time is used.
r3   zAdding %r to cacher      N)r   r   r5   r   r   r   r   listr    min	callLater
clearEntry)r   r   r   	cacheTimesmrD   s          r   r   CacheResolver.cacheResultb   s     <<!GG(501&A$--*?*?*A7K

5KKKK%%'tGAJ//$wqz2BB!A55M  A!]]44QOEr   c                 8    U R                   U	 U R                  U	 g r   )r   r   )r   r   s     r   rP   CacheResolver.clearEntry   s    JJuKKr   )r   r   r   r   r   )Nr   Nr   )__name__
__module____qualname____firstlineno____doc__r   r   r*   r0   rF   rI   r   rP   __static_attributes__ r   r   r	   r	      s4     E:	&-PBP>r   r	   N)r[   r   r   twisted.namesr   r   twisted.pythonr   r   r   r	   r]   r   r   <module>r`      s)   

 # % 'tF'' tr   