# HG changeset patch # User soulmachine # Date 1504073345 25200 # Node ID 29e9190319e5e95e95c365817f97b83200853d5f # Parent 193a627370302f19d61f76104bbbcc77490fba1f Added support for .ai domains diff -r 193a62737030 -r 29e9190319e5 whois/parser.py --- a/whois/parser.py Thu Aug 24 15:52:15 2017 +0000 +++ b/whois/parser.py Tue Aug 29 23:09:05 2017 -0700 @@ -255,6 +255,8 @@ return WhoisDk(domain, text) elif domain.endswith('.it'): return WhoisIt(domain, text) + elif domain.endswith('.ai'): + return WhoisAi(domain, text) else: return WhoisEntry(domain, text) @@ -1215,3 +1217,24 @@ raise PywhoisError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) + +class WhoisAi(WhoisEntry): + """Whois parser for .ai domains + """ + regex = { + 'domain_name': 'Complete Domain Name\.*: *(.+)', + 'name': 'Name \(Last, First\)\.*: *(.+)', + 'org': 'Organization Name\.*: *(.+)', + 'address': 'Street Address\.*: *(.+)', + 'city': 'City\.*: *(.+)', + 'state': 'State\.*: *(.+)', + 'zipcode': 'Postal Code\.*: *(\d+)', + 'country': 'Country\.*: *(.+)', + 'name_servers': 'Server Hostname\.*: *(.+)', + } + + def __init__(self, domain, text): + if 'not registered' in text: + raise PywhoisError(text) + else: + WhoisEntry.__init__(self, domain, text, self.regex) diff -r 193a62737030 -r 29e9190319e5 whois/whois.py --- a/whois/whois.py Thu Aug 24 15:52:15 2017 +0000 +++ b/whois/whois.py Tue Aug 29 23:09:05 2017 -0700 @@ -59,6 +59,7 @@ IANAHOST = "whois.iana.org" PANDIHOST = "whois.pandi.or.id" DENICHOST = "de.whois-servers.net" + AI_HOST = "whois.ai" DEFAULT_PORT = "nicname" WHOIS_RECURSE = 0x01 @@ -152,7 +153,10 @@ tld = domain[-1] if tld[0].isdigit(): return NICClient.ANICHOST - return tld + NICClient.QNICHOST_TAIL + elif tld == 'ai': + return NICClient.AI_HOST + else: + return tld + NICClient.QNICHOST_TAIL def whois_lookup(self, options, query_arg, flags): """Main entry point: Perform initial lookup on TLD whois server,