tornado/maint/scripts/test_resolvers.py

59 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python
import pprint
import socket
from tornado import gen
from tornado.ioloop import IOLoop
from tornado.netutil import Resolver, ThreadedResolver
from tornado.options import parse_command_line, define, options
try:
import twisted
except ImportError:
twisted = None
try:
import pycares
except ImportError:
pycares = None
define('family', default='unspec',
help='Address family to query: unspec, inet, or inet6')
@gen.coroutine
def main():
args = parse_command_line()
if not args:
args = ['localhost', 'www.google.com',
'www.facebook.com', 'www.dropbox.com']
resolvers = [Resolver(), ThreadedResolver()]
if twisted is not None:
from tornado.platform.twisted import TwistedResolver
resolvers.append(TwistedResolver())
if pycares is not None:
from tornado.platform.caresresolver import CaresResolver
resolvers.append(CaresResolver())
family = {
'unspec': socket.AF_UNSPEC,
'inet': socket.AF_INET,
'inet6': socket.AF_INET6,
}[options.family]
for host in args:
print('Resolving %s' % host)
for resolver in resolvers:
addrinfo = yield resolver.resolve(host, 80, family)
print('%s: %s' % (resolver.__class__.__name__,
pprint.pformat(addrinfo)))
print()
if __name__ == '__main__':
IOLoop.instance().run_sync(main)