Simple DNS resolver for asyncio
Project description
===============================
Simple DNS resolver for asyncio
===============================
.. image:: https://secure.travis-ci.org/saghul/aiodns.png?branch=master
:target: http://travis-ci.org/saghul/aiodns
aiodns provides a simple way for doing asynchronous DNS resolutions
with a synchronous looking interface by using `pycares <https://github.com/saghul/pycares>`_.
Example
=======
::
import asyncio
import aiodns
loop = asyncio.get_event_loop()
resolver = aiodns.DNSResolver(loop=loop)
f = resolver.query('google.com','A')
result = loop.run_until_complete(f)
print(result)
The following query types are supported: A, AAAA, CNAME, MX, NAPTR, NS, PTR, SOA, SRV, TXT.
The library supports both *asyncio* and *Trollius*.
If you use use Python 3.5+, you can use the `async` and `await` statements::
import asyncio
import aiodns
loop = asyncio.get_event_loop()
resolver = aiodns.DNSResolver(loop=loop)
async def query(name, query_type):
return await resolver.query(name, query_type)
coro = query('google.com', 'A')
result = loop.run_until_complete(coro)
If you use Python 3.3/3.4 you may use `yield from` statement::
@asyncio.coroutine
def func():
result = yield from resolver.query('google.com','A')
For Trollius you should use another syntax like::
@trollius.coroutine
def func():
result = yield trollius.From(resolver.query('google.com','A'))
API
===
The API is pretty simple, three functions are provided in the ``DNSResolver`` class:
* ``query(host, type)``: Do a DNS resolution of the given type for the given hostname. It returns an
instance of ``asyncio.Future``. The actual result of the DNS query is taken directly from pycares.
As of version 1.0.0 of aiodns (and pycares, for that matter) results are always namedtuple-like
objects with different attributes. Please check `the documentation <http://pycares.readthedocs.org/en/latest/channel.html#pycares.Channel.query>`_
for the result fields.
* ``gethostbyname(host, socket_family)``: Do a DNS resolution for the given
hostname and the desired type of address family (i.e. ``socket.AF_INET``).
While ``query()`` always performs a request to a DNS server,
``gethostbyname()`` first looks into ``/etc/hosts`` and thus can resolve
local hostnames (such as ``localhost``). Please check `the documentation
<http://pycares.readthedocs.io/en/latest/channel.html#pycares.Channel.gethostbyname>`_
for the result fields. The actual result of the call is a ``asyncio.Future``.
* ``gethostbyaddr(name)``: Make a reverse lookup for an address.
* ``cancel()``: Cancel all pending DNS queries. All futures will get ``DNSError`` exception set, with
``ARES_ECANCELLED`` errno.
Running the test suite
======================
To run the test suite: ``python test_aiodns.py``
Author
======
Saúl Ibarra Corretgé <s@saghul.net>
License
=======
aiodns uses the MIT license, check LICENSE file.
Python versions
===============
Python >= 3.4 is natively supported. Python 3.3 supported using the `asyncio package <https://pypi.python.org/pypi/asyncio>`_.
Older Python versions(2.6 - 3.2) are supported using `trollius <https://pypi.python.org/pypi/trollius>`_.
Contributing
============
If you'd like to contribute, fork the project, make a patch and send a pull
request. Have a look at the surrounding code and please, make yours look
alike :-)
Simple DNS resolver for asyncio
===============================
.. image:: https://secure.travis-ci.org/saghul/aiodns.png?branch=master
:target: http://travis-ci.org/saghul/aiodns
aiodns provides a simple way for doing asynchronous DNS resolutions
with a synchronous looking interface by using `pycares <https://github.com/saghul/pycares>`_.
Example
=======
::
import asyncio
import aiodns
loop = asyncio.get_event_loop()
resolver = aiodns.DNSResolver(loop=loop)
f = resolver.query('google.com','A')
result = loop.run_until_complete(f)
print(result)
The following query types are supported: A, AAAA, CNAME, MX, NAPTR, NS, PTR, SOA, SRV, TXT.
The library supports both *asyncio* and *Trollius*.
If you use use Python 3.5+, you can use the `async` and `await` statements::
import asyncio
import aiodns
loop = asyncio.get_event_loop()
resolver = aiodns.DNSResolver(loop=loop)
async def query(name, query_type):
return await resolver.query(name, query_type)
coro = query('google.com', 'A')
result = loop.run_until_complete(coro)
If you use Python 3.3/3.4 you may use `yield from` statement::
@asyncio.coroutine
def func():
result = yield from resolver.query('google.com','A')
For Trollius you should use another syntax like::
@trollius.coroutine
def func():
result = yield trollius.From(resolver.query('google.com','A'))
API
===
The API is pretty simple, three functions are provided in the ``DNSResolver`` class:
* ``query(host, type)``: Do a DNS resolution of the given type for the given hostname. It returns an
instance of ``asyncio.Future``. The actual result of the DNS query is taken directly from pycares.
As of version 1.0.0 of aiodns (and pycares, for that matter) results are always namedtuple-like
objects with different attributes. Please check `the documentation <http://pycares.readthedocs.org/en/latest/channel.html#pycares.Channel.query>`_
for the result fields.
* ``gethostbyname(host, socket_family)``: Do a DNS resolution for the given
hostname and the desired type of address family (i.e. ``socket.AF_INET``).
While ``query()`` always performs a request to a DNS server,
``gethostbyname()`` first looks into ``/etc/hosts`` and thus can resolve
local hostnames (such as ``localhost``). Please check `the documentation
<http://pycares.readthedocs.io/en/latest/channel.html#pycares.Channel.gethostbyname>`_
for the result fields. The actual result of the call is a ``asyncio.Future``.
* ``gethostbyaddr(name)``: Make a reverse lookup for an address.
* ``cancel()``: Cancel all pending DNS queries. All futures will get ``DNSError`` exception set, with
``ARES_ECANCELLED`` errno.
Running the test suite
======================
To run the test suite: ``python test_aiodns.py``
Author
======
Saúl Ibarra Corretgé <s@saghul.net>
License
=======
aiodns uses the MIT license, check LICENSE file.
Python versions
===============
Python >= 3.4 is natively supported. Python 3.3 supported using the `asyncio package <https://pypi.python.org/pypi/asyncio>`_.
Older Python versions(2.6 - 3.2) are supported using `trollius <https://pypi.python.org/pypi/trollius>`_.
Contributing
============
If you'd like to contribute, fork the project, make a patch and send a pull
request. Have a look at the surrounding code and please, make yours look
alike :-)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
aiodns-1.2.0.tar.gz
(6.5 kB
view details)
Built Distribution
File details
Details for the file aiodns-1.2.0.tar.gz
.
File metadata
- Download URL: aiodns-1.2.0.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d67e14b32176bcf3ff79b5d47c466011ce4adeadfa264f7949da1377332a0449 |
|
MD5 | b0fb02275cafcbe5ad531c72ba950615 |
|
BLAKE2b-256 | 7e1bf01e4d3502d1364e4df66e477c333bccac2361740e5688b9bc1826cc08bd |
File details
Details for the file aiodns-1.2.0-py2.py3-none-any.whl
.
File metadata
- Download URL: aiodns-1.2.0-py2.py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 970688599fcb7d65334ec490a94a51afd634ae2de8a2138d21e2ffbbddc12718 |
|
MD5 | cae1d31deefd5cb7a6a11949bb47d26b |
|
BLAKE2b-256 | c09d82d910965520ac17956a4b412e36298466de1b87a8fd0ab6dea601cdb8aa |