Diff for /MPIWGWeb/Attic/SrvTxtUtils.py between versions 1.1 and 1.1.2.2

version 1.1, 2012/03/22 13:30:56 version 1.1.2.2, 2012/03/23 15:27:05
Line 0 Line 1
   """Utility methods for handling XML, reading HTTP, etc"""
   
   from App.ImageFile import ImageFile
   from App.Common import rfc1123_date
   
   import sys
   import os
   import stat
   import urllib
   import urllib2
   import logging
   
   
   srvTxtUtilsVersion = "1.5"
   
   def getInt(number, default=0):
       """returns always an int (0 in case of problems)"""
       try:
           return int(number)
       except:
           return int(default)
   
   def getAt(array, idx, default=None):
       """returns element idx from array or default (in case of problems)"""
       try:
           return array[idx]
       except:
           return default
   
   def unicodify(s):
       """decode str (utf-8 or latin-1 representation) into unicode object"""
       if not s:
           return u""
       if isinstance(s, str):
           try:
               return s.decode('utf-8')
           except:
               return s.decode('latin-1')
       else:
           return s
   
   def utf8ify(s):
       """encode unicode object or string into byte string in utf-8 representation.
          assumes string objects to be utf-8"""
       if not s:
           return ""
       if isinstance(s, str):
           return s
       else:
           return s.encode('utf-8')
   
   def getText(node, recursive=0):
       """returns all text content of a node and its subnodes"""
       if node is None:
           return ''
       
       # ElementTree:
       text = node.text or ''
       for e in node:
           if recursive:
               text += getText(e)
           else:
               text += e.text or ''
           if e.tail:
               text += e.tail
   
       # 4Suite:
       #nodelist=node.childNodes
       #text = ""
       #for n in nodelist:
       #    if n.nodeType == node.TEXT_NODE:
       #       text = text + n.data
       
       return text
   
   
   
   def getHttpData(url, data=None, num_tries=3, timeout=10, noExceptions=False):
       """returns result from url+data HTTP request"""
       # we do GET (by appending data to url)
       if isinstance(data, str) or isinstance(data, unicode):
           # if data is string then append
           url = "%s?%s"%(url,data)
       elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple):
           # urlencode
           url = "%s?%s"%(url,urllib.urlencode(data))
       
       response = None
       errmsg = None
       for cnt in range(num_tries):
           try:
               logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url))
               if sys.version_info < (2, 6):
                   # set timeout on socket -- ugly :-(
                   import socket
                   socket.setdefaulttimeout(float(timeout))
                   response = urllib2.urlopen(url)
               else:
                   # timeout as parameter
                   response = urllib2.urlopen(url,timeout=float(timeout))
               # check result?
               break
           except urllib2.HTTPError, e:
               logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e))
               errmsg = str(e)
               # stop trying
               break
           except urllib2.URLError, e:
               logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e))
               errmsg = str(e)
               # stop trying
               #break
   
       if response is not None:
           data = response.read()
           response.close()
           return data
       
       if noExceptions:
           return None
       
       raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg))
       #return None
   
   
   def refreshingImageFileIndexHtml(self, REQUEST, RESPONSE):
       """index_html method for App.ImageFile that updates the file info for each request."""
       stat_info = os.stat(self.path)
       self.size = stat_info[stat.ST_SIZE]
       self.lmt = float(stat_info[stat.ST_MTIME]) or time.time()
       self.lmh = rfc1123_date(self.lmt)
       # call original method
       return ImageFile.index_html(self, REQUEST, RESPONSE)
   

Removed from v.1.1  
changed lines
  Added in v.1.1.2.2


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