brand new to python

Dmitry A.Lyakhovets d_ at inbox.ru
Sun Mar 13 14:44:03 EST 2005


Hello!

You should at least close the 'try' block, which you started
at line 68 (if i'm not mistaken):


def _whois(domainname, whoisserver):
  s = None

  ## try until we are connected

  while s == None:
    try:
^^^^^^^^

There is no corresponding 'except' till DomainRecord class
definition.




On 13 Mar 2005 11:22:54 -0800
richard.hubbell at gmail.com wrote:

> I am sure this is old news, the syntax of python is crazy
> to me. There I said it, I'm sure I'll get over it or
> around it.
> 
> I was trying to make a whois script work and was unable.
> 
> May be someone with lint-like eyes can tell what's wrong.
> 
> Using xemacs I had hoped that python mode would do more
> for syntax problems, maybe I'm just not using python mode
> correctly in xemacs??
> 
> ../whois.py yahoo.com
>   File "./whois.py", line 117
>     class DomainRecord:
>     ^
> SyntaxError: invalid syntax
> 
> 
> #!/usr/bin/env python
> 
> 
> #usage: %(progname)s [--test] [domain...]
> 
> #Version: %(version)s
> 
> #Contacts the NetworkSolutions whois database for each
> #domain and
> displays
> #the result.
> 
> #public methods:
> 
> #  def whois(domainname, whoisserver=None, cache=0)
> #   raises NoSuchDomain if the domain doesn't exist.
> 
>   #  return the result of contacting NetworkSolutions
> 
>   #def ParseWhois(page)
>     # returns a DomainRecord object that contains a parsed
>       #version of the information contained in 'page'.
> 
> #class DomainRecord:
> # self.domain             -- name of the domain
>   #self.domainid           -- domainid for this domain
> #  self.created            -- date in which the domain was
> #  created
> # self.lastupdated        -- date in which the domain was
> # last updated.
> #  self.expires            -- date in which the domain
> #  expires self.databaseupdated    -- date in which the
> #  database was last
> updated.
> #  self.servers            -- list of (hostname, ip) pairs
> #  of the
> #    nameservers.
> #  self.registrant         -- name of the person or
> #  organization that
> #    registered the domain.
> #  self.registrant_address -- address of the person or
> #  organization
> that
> #    registered the domain.
> #  self.contacts           -- dictionary of contacts###
> ##
> #
> #"""
> 
> #_version = "1.0"
> 
> import os, sys, string, time, getopt, socket, select, re
> 
> NoSuchDomain = "NoSuchDomain"
> 
> def whois(domainname, whoisserver=None, cache=0):
>   if whoisserver is None:
>     whoisserver = "whois.networksolutions.com"
> 
>     if cache:
>       fn = "%s.dom" % domainname
>       if os.path.exists(fn):
>         return open(fn).read()
> 
>       page = _whois(domainname, whoisserver)
> 
>       if cache:
>         open(fn, "w").write(page)
> 
>         return page
> 
> def _whois(domainname, whoisserver):
>   s = None
> 
>   ## try until we are connected
> 
>   while s == None:
>     try:
>       s = socket.socket(socket.AF_INET,
>       socket.SOCK_STREAM) s.setblocking(0)
>       try:
>         s.connect(whoisserver, 43)
>       except socket.error, (ecode, reason):
>         if ecode in (115, 150):
>           pass
>         else:
>           raise socket.error, (ecode, reason)
>         ret = select.select([s], [s], [], 30)
> 
>         if len(ret[1]) == 0 and len(ret[0]) == 0:
>           s.close()
>           raise TimedOut, "on connect "
>         s.setblocking(1)
> 
>       except socket.error, (ecode, reason):
>         print ecode, reason
>         time.sleep(10)
>         s = None
> 
>         s.send("%s \n\n" % domainname)
>         page = ""
>         while 1:
>           data = s.recv()
>           if not data: break
> 
>           page = page + data
> 
>           s.close()
> 
>           if string.find(page, "No match for") != -1:
>             raise NoSuchDomain, domainname
> 
>           if string.find(page, "No entries found") != -1:
>             raise NoSuchDomain, domainname
> 
>           if string.find(page, "no domain specified") !=
>           -1:
>             raise NoSuchDomain, domainname
> 
>           if string.find(page, "NO MATCH") != -1:
>             raise NoSuchDomain, domainname
>       return page
> 
> ##
> ##
> ---------------------------------------------------------
> -------------
> ##
> 
> class DomainRecord:
>   def __init__(self, domain):
>     self.domain = domain
>     self.domainid = None
>     self.created = None
>     self.lastupdated = None
>     self.expires = None
>     self.databaseupdated = None
>     self.servers = None
>     self.registrant = None
>     self.registrant_address = None
>     self.contacts = {}
> 
>     def __str__(self):
>       return "%s (%s): (created:%s) (lastupdated:%s)
> (databaseupdated:%s) (servers:%s) (registrant:%s)
> (address:%s)(contacts:%s)" % (self.domain, self.domainid,
> self.created, self.lastupdated, self.databaseupdated,
> self.servers, self.registrant,
> repr(self.registrant_address), self.contacts)
> 
> 
> ##
> ##
> ---------------------------------------------------------
> -------------
> ##
> 
> def _ParseContacts_RegisterCOM(page):
>   contactDict = {}
>   parts =
>   re.split("((?:(?:Administrative|Billing|Technical|Zone)
> Contact,?[ ]*)+:)\n", page)
> 
>   contacttypes = None
>   for part in parts:
>     if string.find(part, "Contact:") != -1:
>       if part[-1] == ":": part = part[:-1]
>       contacttypes = string.split(part, ",")
>       continue
>     part = string.strip(part)
>     if not part: continue
> 
>     record = {}
> 
>     lines = string.split(part, "\n")
>     m = re.search("(.+)  (.+ at .+)", lines[0])
>     if m:
>       record['name'] = string.strip(m.group(1))
>       record['handle'] = None
>       record['email'] =
>       string.lower(string.strip(m.group(2)))
> 
>       flag = 0
>       phonelines = string.strip(lines[1])
>       record['phone'] = phonelines
>       record['address'] = []
> 
>       for contacttype in contacttypes:
>         contacttype =
>         string.lower(string.strip(contacttype))
>         contacttype = string.replace(contacttype, "
>         contact", "") contactDict[contacttype] = record
> 
>         return contactDict
> 
> 
> 
> def ParseWhois_RegisterCOM(page):
> 
>   m = re.search("Domain Name: (.+)", page)
>   domain = m.group(1)
>   rec = DomainRecord(domain)
> 
>   m = re.search("Record last updated on.*: (.+)", page)
>   if m: rec.lastupdated = m.group(1)
> 
>   m = re.search("Created on.*: (.+)", page)
>   if m: rec.created = m.group(1)
> 
>   m = re.search("Expires on.*: (.+)", page)
>   if m: rec.expires = m.group(1)
> 
> 
>   m = re.search("Registrant:", page)
>   if m:
>     i = m.end()
>     m = re.search("\n\n", page[i:])
>     j = m.start()
>     registrant = string.strip(page[i:i+j])
>     lines = string.split(registrant, "\n")
>     registrant = []
>     for line in lines:
>       line = string.strip(line)
>       if not line: continue
>       registrant.append(line)
>       rec.registrant = registrant[0]
>       rec.registrant_address = string.join(registrant[1:],
>       "\n")
> 
>       m = re.search("(.+) \((.+)\)$", rec.registrant)
>       if m:
>         rec.registrant = m.group(1)
>         rec.domainid = m.group(2)
> 
>         m = re.search("Domain servers in listed
>         order:\n\n", page) if m:
>           i = m.end()
>           m = re.search("\n\n", page[i:])
>           j = m.start()
>           servers = string.strip(page[i:i+j])
>           lines = string.split(servers, "\n")
>           servers = []
>           for line in lines:
>             parts = string.split(string.strip(line))
>             if not parts: continue
>             servers.append(parts[0], parts[1])
>             rec.servers = servers
> 
>             m =
> re.search("((?:(?:Administrative|Billing|Technical|Zone)
> Contact,?[]*)+:)\n", page)
>             if m:
>               i = m.start()
>               m = re.search("Domain servers in listed
>               order", page) j = m.start()
>               contacts = string.strip(page[i:j])
> 
>               rec.contacts =
>               _ParseContacts_RegisterCOM(contacts)
> 
>               return rec
> 
> ##
> ##
> ---------------------------------------------------------
> -------------
> ##
> 
> def _ParseContacts_NetworkSolutions(page):
>   contactDict = {}
>   parts =
>   re.split("((?:(?:Administrative|Billing|Technical|Zone)
> Contact,?[ ]*)+:)\n", page)
> 
>   contacttypes = None
>   for part in parts:
>     if string.find(part, "Contact:") != -1:
>       if part[-1] == ":": part = part[:-1]
>       contacttypes = string.split(part, ",")
>       continue
>     part = string.strip(part)
>     if not part: continue
> 
>     record = {}
> 
>     lines = string.split(part, "\n")
>     m = re.search("(.+) \((.+)\) (.+ at .+)", lines[0])
>     if m:
>       record['name'] = string.strip(m.group(1))
>       record['handle'] = string.strip(m.group(2))
>       record['email'] =
>       string.lower(string.strip(m.group(3)))
> 
>       flag = 0
>       addresslines = []
>       phonelines = []
>       for line in lines[1:]:
>         line = string.strip(line)
>         if not line:
>           flag = 1
>           continue
>         if flag == 0:
>           addresslines.append(line)
>         else:
>           phonelines.append(line)
>           record['phone'] = string.join(phonelines, "\n")
>           record['address'] = string.join(addresslines,
>           "\n")
> 
>           for contacttype in contacttypes:
>             contacttype =
>             string.lower(string.strip(contacttype))
>             contacttype = string.replace(contacttype, "
>             contact", "") contactDict[contacttype] =
>             record
> 
>             return contactDict
> 
> def ParseWhois_NetworkSolutions(page):
>   m = re.search("Domain Name: (.+)", page)
>   domain = m.group(1)
>   rec = DomainRecord(domain)
> 
>   m = re.search("Record last updated on (.+)\.", page)
>   if m: rec.lastupdated = m.group(1)
> 
>   m = re.search("Record created on (.+)\.", page)
>   if m: rec.created = m.group(1)
> 
>   m = re.search("Database last updated on (.+)\.", page)
>   if m: rec.databaseupdated = m.group(1)
> 
>   m = re.search("Registrant:", page)
>   if m:
>     i = m.end()
>     m = re.search("\n\n", page[i:])
>     j = m.start()
>     registrant = string.strip(page[i:i+j])
>     lines = string.split(registrant, "\n")
>     registrant = []
>     for line in lines:
>       line = string.strip(line)
>       if not line: continue
>       registrant.append(line)
>       rec.registrant = registrant[0]
>       rec.registrant_address = string.join(registrant[1:],
>       "\n")
> 
>       m = re.search("(.+) \((.+)\)$", rec.registrant)
>       if m:
>         rec.registrant = m.group(1)
>         rec.domainid = m.group(2)
> 
>         m = re.search("Domain servers in listed
>         order:\n\n", page) if m:
>           i = m.end()
>           m = re.search("\n\n", page[i:])
>           j = m.start()
>           servers = string.strip(page[i:i+j])
>           lines = string.split(servers, "\n")
>           servers = []
>           for line in lines:
>             parts = string.split(string.strip(line))
>             if not parts: continue
>             servers.append(parts[0], parts[1])
>             rec.servers = servers
> 
>             m =
> re.search("((?:(?:Administrative|Billing|Technical|Zone)
> Contact,?[]*)+:)\n", page)
>             if m:
>               i = m.start()
>               m = re.search("Record last updated on",
>               page) j = m.start()
>               contacts = string.strip(page[i:j])
> 
>               rec.contacts =
>               _ParseContacts_NetworkSolutions(contacts)
> 
>               return rec
> 
> 
> ##
> ##
> ---------------------------------------------------------
> -------------
> ##
> 
> def ParseWhois(page):
>   if string.find(page, "Registrar..: Register.com
> (http://www.register.com)") != -1:
>     return ParseWhois_RegisterCOM(page)
>   else:
>     return ParseWhois_NetworkSolutions(page)
> 
> 
> ##
> ##
> ---------------------------------------------------------
> -------------
> ##
> 
> def usage(progname):
>   version = _version
>   print __doc__ % vars()
> 
>   def main(argv, stdout, environ):
>     progname = argv[0]
>     list, args = getopt.getopt(argv[1:], "", ["help",
>     "version",
> "test"])
> 
>     for (field, val) in list:
>       if field == "--help":
>         usage(progname)
>         return
>       elif field == "--version":
>         print progname, _version
>         return
>       elif field == "--test":
>         test()
>         return
> 
> 
>       for domain in args:
>         try:
>           page = whois(domain)
>           print page
>         except NoSuchDomain, reason:
>           print "ERROR: no such domain %s" % domain
> 
>           if __name__ == "__main__":
>             main(sys.argv, sys.stdout, os.environ)
> 
> -- 
> http://mail.python.org/mailman/listinfo/python-list
> 


-- 
Best regards,
Dmitry A. Lyakhovets          mailto:d_ at inbox.ru
visit http://www.aikido-groups.ru -- Aikido Dojo site



More information about the Python-list mailing list