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>