File: //usr/lib/python3/dist-packages/twisted/names/__pycache__/cache.cpython-38.pyc
U
W[� � @ sV d Z ddlmZmZ ddlmZmZ ddlmZm Z ddl
mZ G dd� dej�Z
dS ) z
An in-memory caching resolver.
� )�division�absolute_import)�dns�common)�failure�log)�deferc @ sR e Zd ZdZdZddd�Zdd� Zdd � Zd
d� Zddd
�Z ddd�Z
dd� ZdS )�
CacheResolverz�
A resolver that serves records from a local, memory cache.
@ivar _reactor: A provider of L{interfaces.IReactorTime}.
Nr c C sd t j�| � i | _|| _i | _|d kr2ddlm} || _|r`|� � D ]\}\}}| �
|||� qDd S )Nr )�reactor)r �ResolverBase�__init__�cache�verbose�cancel�twisted.internetr
�_reactor�items�cacheResult)�selfr
r r
�query�seconds�payload� r �5/usr/lib/python3/dist-packages/twisted/names/cache.pyr s zCacheResolver.__init__c
C sb || _ | j�� }| j�� D ]B\}\}\}}}|| }|| | D ]} | j|k r@| j|= qq@qd S �N)�__dict__r r r
r �ttl)
r �state�now�k�when�ans�add�ns�diffZrecr r r �__setstate__( s
zCacheResolver.__setstate__c C s( | j �� D ]}|� � q
| j �� | jS r )r �values�clearr )r �cr r r �__getstate__4 s
zCacheResolver.__getstate__c
s | j �� }t�|||�}z| j| \}\}} }
W nF tk
rv | jdkr\t�dt |� � t
�t�
t�|��� Y S X | jr�t�dt |� � || � z8� fdd�|D �� fdd�| D �� fdd�|
D �f}W n, tk
� r� t
�t�
t�|��� Y S X t
�|�S d S )N� zCache miss for zCache hit for c s. g | ]&}t �|jj|j|j|j� |j��qS r �r ZRRHeader�name�type�clsr r ��.0�r�r$ r r �
<listcomp>K s ��z)CacheResolver._lookup.<locals>.<listcomp>c s. g | ]&}t �|jj|j|j|j� |j��qS r r+ r/ r2 r r r3 M s ��c s. g | ]&}t �|jj|j|j|j� |j��qS r r+ r/ r2 r r r3 O s ��)r r r ZQueryr
�KeyErrorr r �msg�reprr �failr �Failure�DomainError�
ValueErrorZsucceed)r r, r. r- �timeoutr �qr r! Zauthr"