Annotation of MPIWGWeb/SrvTxtUtils.py, revision 1.1.2.1

1.1.2.1 ! casties     1: """Utility methods for handling XML, reading HTTP, etc"""
        !             2: 
        !             3: from App.ImageFile import ImageFile
        !             4: from App.Common import rfc1123_date
        !             5: 
        !             6: import sys
        !             7: import os
        !             8: import stat
        !             9: import urllib
        !            10: import urllib2
        !            11: import logging
        !            12: 
        !            13: 
        !            14: srvTxtUtilsVersion = "1.3"
        !            15: 
        !            16: def getInt(number, default=0):
        !            17:     """returns always an int (0 in case of problems)"""
        !            18:     try:
        !            19:         return int(number)
        !            20:     except:
        !            21:         return int(default)
        !            22: 
        !            23: def getAt(array, idx, default=None):
        !            24:     """returns element idx from array or default (in case of problems)"""
        !            25:     try:
        !            26:         return array[idx]
        !            27:     except:
        !            28:         return default
        !            29: 
        !            30: def getText(node, recursive=0):
        !            31:     """returns all text content of a node and its subnodes"""
        !            32:     if node is None:
        !            33:         return ''
        !            34:     
        !            35:     # ElementTree:
        !            36:     text = node.text or ''
        !            37:     for e in node:
        !            38:         if recursive:
        !            39:             text += getText(e)
        !            40:         else:
        !            41:             text += e.text or ''
        !            42:         if e.tail:
        !            43:             text += e.tail
        !            44: 
        !            45:     # 4Suite:
        !            46:     #nodelist=node.childNodes
        !            47:     #text = ""
        !            48:     #for n in nodelist:
        !            49:     #    if n.nodeType == node.TEXT_NODE:
        !            50:     #       text = text + n.data
        !            51:     
        !            52:     return text
        !            53: 
        !            54: 
        !            55: 
        !            56: def getHttpData(url, data=None, num_tries=3, timeout=10):
        !            57:     """returns result from url+data HTTP request"""
        !            58:     # we do GET (by appending data to url)
        !            59:     if isinstance(data, str) or isinstance(data, unicode):
        !            60:         # if data is string then append
        !            61:         url = "%s?%s"%(url,data)
        !            62:     elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple):
        !            63:         # urlencode
        !            64:         url = "%s?%s"%(url,urllib.urlencode(data))
        !            65:     
        !            66:     response = None
        !            67:     errmsg = None
        !            68:     for cnt in range(num_tries):
        !            69:         try:
        !            70:             logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url))
        !            71:             if sys.version_info < (2, 6):
        !            72:                 # set timeout on socket -- ugly :-(
        !            73:                 import socket
        !            74:                 socket.setdefaulttimeout(float(timeout))
        !            75:                 response = urllib2.urlopen(url)
        !            76:             else:
        !            77:                 # timeout as parameter
        !            78:                 response = urllib2.urlopen(url,timeout=float(timeout))
        !            79:             # check result?
        !            80:             break
        !            81:         except urllib2.HTTPError, e:
        !            82:             logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e))
        !            83:             errmsg = str(e)
        !            84:             # stop trying
        !            85:             break
        !            86:         except urllib2.URLError, e:
        !            87:             logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e))
        !            88:             errmsg = str(e)
        !            89:             # stop trying
        !            90:             #break
        !            91: 
        !            92:     if response is not None:
        !            93:         data = response.read()
        !            94:         response.close()
        !            95:         return data
        !            96:     
        !            97:     raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg))
        !            98:     #return None
        !            99: 
        !           100: 
        !           101: def refreshingImageFileIndexHtml(self, REQUEST, RESPONSE):
        !           102:     """index_html method for App.ImageFile that updates the file info for each request."""
        !           103:     stat_info = os.stat(self.path)
        !           104:     self.size = stat_info[stat.ST_SIZE]
        !           105:     self.lmt = float(stat_info[stat.ST_MTIME]) or time.time()
        !           106:     self.lmh = rfc1123_date(self.lmt)
        !           107:     # call original method
        !           108:     return ImageFile.index_html(self, REQUEST, RESPONSE)
        !           109: 

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