B `@sddlZddlZddlmZmZmZmZddlmZddl m Z dZ y ddl Z Wne k rhdZ YnXdZGdd d eZGd d d eZereneZdS) N)AnyDictListOptional)AbstractResolver)get_running_loop)ThreadedResolver AsyncResolverDefaultResolverFc@s^eZdZdZd eejddddZdej fe e e e e e efddd Zdd d d ZdS)r zsUse Executor for synchronous getaddrinfo() calls, which defaults to concurrent.futures.ThreadPoolExecutor. N)loopreturncCst||_dS)N)r_loop)selfr rk/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/aiohttp/resolver.py__init__szThreadedResolver.__init__r)hostnameportfamilyr c s|jj||tj|tjdIdH}g}xz|D]r\}}}}}|tjkrl|drlt|tjtjB\} } t | }n|dd\} }| || |||tj tj Bdq*W|S)N)typerflags)rhostrrprotor) r getaddrinfosocket SOCK_STREAM AI_ADDRCONFIGAF_INET6 getnameinfoNI_NUMERICHOSTNI_NUMERICSERVintappendAI_NUMERICHOSTAI_NUMERICSERV) rrrrinfoshosts_raddressrZ_portrrrresolves* zThreadedResolver.resolve)r csdS)Nr)rrrrclose@szThreadedResolver.close)N)__name__ __module__ __qualname____doc__rasyncioAbstractEventLooprrAF_INETstrr$rrrr,r-rrrrr s "r c@seZdZdZdeejeeddddZde j fe e e e ee efddd Zde j fe e e e ee efdd d Zdd d dZdS)r z9Use the `aiodns` package to make asynchronous DNS lookupsN)r argskwargsr cOsHtdkrtdt||_tj|d|i||_t|jdsD|j|_dS)Nz Resolver requires aiodns libraryr gethostbyname) aiodns RuntimeErrorrrZ DNSResolver _resolverhasattr_resolve_with_queryr,)rr r6r7rrrrGs   zAsyncResolver.__init__r)rrrr c sy|j||IdH}WnLtjjk rd}z*t|jdkrF|jdnd}t||Wdd}~XYnXg}x.|jD]$}| ||||dt j t j BdqrW|std|S)NrzDNS lookup failedr)rrrrrr) r;r8r9errorDNSErrorlenr6OSError addressesr%rr&r') rrrrrespexcmsgr)r+rrrr,Ws" zAsyncResolver.resolvec s|tjkrd}nd}y|j||IdH}WnLtjjk rx}z*t|jdkrZ|jdnd}t ||Wdd}~XYnXg}x(|D] } | || j ||dtj dqW|st d|S)NZAAAAArzDNS lookup failedr)rrrrrr) rr r;queryr9r>r?r@r6rAr%rr&) rrrrZqtyperCrDrEr)rrrrrr=qs(  z!AsyncResolver._resolve_with_query)r cs |jS)N)r;cancel)rrrrr-szAsyncResolver.close)N)r.r/r0r1rr2r3rrrr4r5r$rrr,r=r-rrrrr Ds  r )r2rtypingrrrrabcrZhelpersr__all__r9 ImportErrorZaiodns_defaultr r r rrrrs    0Q