���Z� � @ s� d d l Z d d l Z d d l m Z d Z y d d l Z Wn e k rX d Z Yn Xd Z Gd d � d e � Z Gd d � d e � Z e r� e n e Z d S)� N� )�AbstractResolver�ThreadedResolver� AsyncResolver�DefaultResolverFc @ sF e Z d Z d Z d d d � Z d e j d d � Z d d � Z d S) r zsUse Executor for synchronous getaddrinfo() calls, which defaults to concurrent.futures.ThreadPoolExecutor. Nc C s% | d k r t j � } | | _ d S)N)�asyncio�get_event_loop�_loop)�self�loop� r �/resolver.py�__init__ s zThreadedResolver.__init__r c � s� | j j | | d t j d | �Id H} g } xY | D]Q \ } } } } } | j d | d | d d | d d | d | d t j i � q6 W| S) N�type�family�hostname�hostr �portr �proto�flags)r �getaddrinfo�socket�SOCK_STREAM�append�AI_NUMERICHOST) r r r r Zinfos�hosts�_r �addressr r r �resolve s zThreadedResolver.resolvec � s d S)Nr )r r r r �close* s zThreadedResolver.close) �__name__� __module__�__qualname__�__doc__r r �AF_INETr r r r r r r s c @ s[ e Z d Z d Z d d d � Z d e j d d � Z d e j d d � Z d d � Z d S)r z9Use the `aiodns` package to make asynchronous DNS lookupsNc O sv | d k r t j � } t d k r0 t d � � | | _ t j | d | | � | _ t | j d � sr | j | _ d S)Nz Resolver requires aiodns libraryr � gethostbyname) r r �aiodns�RuntimeErrorr ZDNSResolver� _resolver�hasattr�_resolve_with_queryr )r r �args�kwargsr r r r 1 s zAsyncResolver.__init__r c � s� y | j j | | � Id H} Wnb t j j k r� } z<