Ë
    ojÁ  ã                   ó^   — d Z ddlmZ ddlmZmZ ddlmZmZ  G d„ dej                  «      Z
y)z 
An in-memory caching resolver.
é    )Údefer)ÚcommonÚdns)ÚfailureÚlogc                   óD   — e Zd ZdZdZd
d„Zd„ Zd„ Zd„ Zdd„Z	dd„Z
d	„ Zy)ÚCacheResolverzƒ
    A resolver that serves records from a local, memory cache.

    @ivar _reactor: A provider of L{interfaces.IReactorTime}.
    Nc                 óì   — t         j                  j                  | «       i | _        || _        i | _        |€ddlm} || _        |r/|j                  «       D ]  \  }\  }}| j                  |||«       Œ y y )Nr   )Úreactor)r   ÚResolverBaseÚ__init__ÚcacheÚverboseÚcancelÚtwisted.internetr   Ú_reactorÚitemsÚcacheResult)Úselfr   r   r   ÚqueryÚsecondsÚpayloads          ú5/usr/lib/python3/dist-packages/twisted/names/cache.pyr   zCacheResolver.__init__   ss   € Ü×Ñ×$Ñ$ TÔ*àˆŒ
ØˆŒØˆŒØˆ?Ý0ØˆŒáØ-2¯[©[«]ò :Ñ)�Ñ)˜ Ø× Ñ  ¨°Õ9ñ:ð ó    c                 óø   — || _         | j                  j                  «       }| j                  j	                  «       D ]<  \  }\  }\  }}}||z
  }||z   |z   D ]   }	|	j
                  |k  sŒ| j                  |=  Œ< Œ> y ©N)Ú__dict__r   r   r   r   Úttl)
r   ÚstateÚnowÚkÚwhenÚansÚaddÚnsÚdiffÚrecs
             r   Ú__setstate__zCacheResolver.__setstate__&   s€   € ØˆŒà�m‰m×#Ñ#Ó%ˆØ)-¯©×)9Ñ)9Ó);ò 	Ñ%ˆAÑ%�‘n�s˜C Ø˜‘:ˆDØ˜S‘y 2‘~ò �Ø—7‘7˜T“>ØŸ
™
 1˜Ùññ	r   c                 ó¬   — | j                   j                  «       D ]  }|j                  «        Œ | j                   j                  «        | j                  S r   )r   ÚvaluesÚclearr   )r   Úcs     r   Ú__getstate__zCacheResolver.__getstate__1   sA   € Ø—‘×#Ñ#Ó%ò 	ˆAØ�H‰H�Jð	à�‰×ÑÔØ�}‰}Ðr   c                 ó*  — | j                   j                  «       }t        j                  |||«      }	 | j                  |   \  }\  }}	}
| j
                  r!t        j                  dt        |«      z   «       ||z
  }	 |D �cg c]Z  }t        j                  |j                  j                  |j                  |j                  |j                  |z
  |j                  «      ‘Œ\ c}|	D �cg c]Z  }t        j                  |j                  j                  |j                  |j                  |j                  |z
  |j                  «      ‘Œ\ c}|
D �cg c]Z  }t        j                  |j                  j                  |j                  |j                  |j                  |z
  |j                  «      ‘Œ\ c}f}t        j                   |«      S c c}w c c}w c c}w # t"        $ r> t        j$                  t'        j(                  t        j*                  |«      «      «      cY S w xY w# t,        $ rn | j
                  dkD  r!t        j                  dt        |«      z   «       t        j$                  t'        j(                  t        j*                  |«      «      «      cY S w xY w)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   r4   r6   r5   Útimeoutr    Úqr"   r#   Úauthr$   r&   ÚrÚresults                 r   Ú_lookupzCacheResolver._lookup7   sÿ  € Ø�m‰m×#Ñ#Ó%ˆÜ�I‰I�d˜D #Ó&ˆð#	-Ø%)§Z¡Z°¡]Ñ"ˆDÑ"�3˜˜cð �|Š|Ü—‘Ð(¬4°«:Ñ5Ô6Ø˜‘:ˆDð-ð "%ö	ð ô Ÿ™ØŸF™FŸK™K¨¯©°·±¸¿¹À¹ÀaÇiÁiõòð "&ö	ð ô Ÿ™ØŸF™FŸK™K¨¯©°·±¸¿¹À¹ÀaÇiÁiõòð "%ö	ð ô Ÿ™ØŸF™FŸK™K¨¯©°·±¸¿¹À¹ÀaÇiÁiõòð�ô. —}‘} VÓ,Ð,ùò-ùòùòøô ò JÜ—z‘z¤'§/¡/´#·/±/À$Ó2GÓ"HÓIÒIðJûô= ò 	FØ�|‰|˜aÒÜ—‘Ð)¬D°«JÑ6Ô7Ü—:‘:œgŸo™o¬c¯o©o¸dÓ.CÓDÓEÒEð	FúsR   ³H Á<G Â AGÃG Ã%AGÅG Å
AGÆ)G ÇG ÇAHÈHÈA4JÊJc                 óx   — t        j                  t        j                  t	        j
                  |«      «      «      S r   )r   r9   r   r:   r   r;   )r   r4   r=   s      r   ÚlookupAllRecordszCacheResolver.lookupAllRecords_   s#   € Ü�z‰zœ'Ÿ/™/¬#¯/©/¸$Ó*?Ó@ÓAÐAr   c                 ó$  — | j                   dkD  rt        j                  d|z  «       |xs | j                  j	                  «       |f| j
                  |<   || j                  v r| j                  |   j                  «        t        |d   «      t        |d   «      z   t        |d   «      z   }|r-|d   j                  }|D ]  }t        ||j                  «      }Œ nd}| j                  j                  || j                  |«      | j                  |<   y)a±  
        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.
        r/   zAdding %r to cacher   é   N)r   r   r1   r   r   r   r   Úlistr   ÚminÚ	callLaterÚ
clearEntry)r   r   r   Ú	cacheTimeÚsÚmr@   s          r   r   zCacheResolver.cacheResultb   sì   € ð �<‰<˜!ÒÜ�G‰GÐ(¨5Ñ0Ô1à&ÒA¨$¯-©-×*?Ñ*?Ó*AÀ7ÐKˆ�
‰
�5Ñà�D—K‘KÑØ�K‰K˜Ñ×%Ñ%Ô'ä�˜‘Óœt G¨A¡JÓ/Ñ/´$°w¸q±zÓ2BÑBˆÙØ�!‘—‘ˆAØò "�Ü˜˜1Ÿ5™5“M‘ñ"ð ˆAà!Ÿ]™]×4Ñ4°Q¸¿¹ÈÓOˆ�‰�EÒr   c                 ó8   — | j                   |= | j                  |= y r   )r   r   )r   r   s     r   rJ   zCacheResolver.clearEntry�   s   € Ø�J‰J�uÐØ�K‰K˜Ñr   )Nr   Nr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r(   r-   rB   rD   r   rJ   © r   r   r	   r	      s4   „ ñð €Eó:ò	òò&-óPBóPó>r   r	   N)rR   r   r   Útwisted.namesr   r   Útwisted.pythonr   r   r   r	   rS   r   r   ú<module>rV      s)   ðñ
õ
 #ß %ß 'ôt�F×'Ñ'õ tr   