#NEWLINE# def resolve( self , hostname , callback ) : #NEWLINE# #INDENT# if ( type ( hostname ) != bytes ) : #NEWLINE# #INDENT# hostname = hostname . encode ( 'utf8' ) #NEWLINE# #UNINDENT# if ( not hostname ) : #NEWLINE# #INDENT# callback ( None , Exception ( 'empty hostname' ) ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if common . is_ip ( hostname ) : #NEWLINE# #INDENT# callback ( ( hostname , hostname ) , None ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( hostname in self . _hosts ) : #NEWLINE# #INDENT# logging . debug ( 'hit hosts: %s' , hostname ) #NEWLINE# ip = self . _hosts [ hostname ] #NEWLINE# callback ( ( hostname , ip ) , None ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( hostname in self . _cache ) : #NEWLINE# #INDENT# logging . debug ( 'hit cache: %s' , hostname ) #NEWLINE# ip = self . _cache [ hostname ] #NEWLINE# callback ( ( hostname , ip ) , None ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( not is_valid_hostname ( hostname ) ) : #NEWLINE# #INDENT# callback ( None , Exception ( ( 'invalid hostname: %s' % hostname ) ) ) #NEWLINE# return #NEWLINE# #UNINDENT# arr = self . _hostname_to_cb . get ( hostname , None ) #NEWLINE# if ( not arr ) : #NEWLINE# #INDENT# self . _hostname_status [ hostname ] = STATUS_IPV4 #NEWLINE# self . _send_req ( hostname , QTYPE_A ) #NEWLINE# self . _hostname_to_cb [ hostname ] = [ callback ] #NEWLINE# self . _cb_to_hostname [ callback ] = hostname #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# arr . append ( callback ) #NEWLINE# self . _send_req ( hostname , QTYPE_A )