Annotation of documentViewer/SrvTxtUtils.py, revision 1.1.2.1

1.1.2.1 ! casties     1: """Utility methods for handling XML, reading HTTP, etc"""
        !             2: 
        !             3: import sys
        !             4: import urllib
        !             5: import urllib2
        !             6: import logging
        !             7: 
        !             8: 
        !             9: srvTxtUtilsVersion = "1.0"
        !            10: 
        !            11: def getInt(number, default=0):
        !            12:     """returns always an int (0 in case of problems)"""
        !            13:     try:
        !            14:         return int(number)
        !            15:     except:
        !            16:         return int(default)
        !            17: 
        !            18: def getText(node):
        !            19:     """returns all text content of a node and its subnodes"""
        !            20:     if node is None:
        !            21:         return ""
        !            22:     # ElementTree:
        !            23:     text = node.text or ""
        !            24:     for e in node:
        !            25:         text += gettext(e)
        !            26:         if e.tail:
        !            27:             text += e.tail
        !            28: 
        !            29:     # 4Suite:
        !            30:     #nodelist=node.childNodes
        !            31:     #text = ""
        !            32:     #for n in nodelist:
        !            33:     #    if n.nodeType == node.TEXT_NODE:
        !            34:     #       text = text + n.data
        !            35:     
        !            36:     return text
        !            37: 
        !            38: 
        !            39: 
        !            40: def getHttpData(url, data=None, num_tries=3, timeout=10):
        !            41:     """returns result from url+data HTTP request"""
        !            42:     # we do GET (by appending data to url)
        !            43:     if isinstance(data, str) or isinstance(data, unicode):
        !            44:         # if data is string then append
        !            45:         url = "%s?%s"%(url,data)
        !            46:     elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple):
        !            47:         # urlencode
        !            48:         url = "%s?%s"%(url,urllib.urlencode(data))
        !            49:     
        !            50:     response = None
        !            51:     errmsg = None
        !            52:     for cnt in range(num_tries):
        !            53:         try:
        !            54:             logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url))
        !            55:             if sys.version_info < (2, 6):
        !            56:                 # set timeout on socket -- ugly :-(
        !            57:                 import socket
        !            58:                 socket.setdefaulttimeout(float(timeout))
        !            59:                 response = urllib2.urlopen(url)
        !            60:             else:
        !            61:                 # timeout as parameter
        !            62:                 response = urllib2.urlopen(url,timeout=float(timeout))
        !            63:             # check result?
        !            64:             break
        !            65:         except urllib2.HTTPError, e:
        !            66:             logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e))
        !            67:             errmsg = str(e)
        !            68:             # stop trying
        !            69:             break
        !            70:         except urllib2.URLError, e:
        !            71:             logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e))
        !            72:             errmsg = str(e)
        !            73:             # stop trying
        !            74:             #break
        !            75: 
        !            76:     if response is not None:
        !            77:         data = response.read()
        !            78:         response.close()
        !            79:         return data
        !            80:     
        !            81:     raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg))
        !            82:     #return None
        !            83: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>