Annotation of documentViewer/SrvTxtUtils.py, revision 1.1.2.2
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:
1.1.2.2 ! casties 25: text += getText(e)
1.1.2.1 casties 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>