comparison SrvTxtUtils.py @ 216:3b517b412f77

fixed problem updating users with new IDs
author casties
date Wed, 02 Oct 2013 14:40:50 +0200
parents 938add25f81b
children 649f74b167e6
comparison
equal deleted inserted replaced
215:c0dcb747cc41 216:3b517b412f77
5 5
6 import sys 6 import sys
7 import os 7 import os
8 import stat 8 import stat
9 import urllib 9 import urllib
10 import urllib2
11 import logging 10 import logging
12 import time 11 import time
13 import re 12 import re
13 import datetime
14 try:
15 import httplib2
16 httplib = 'httplib2'
17 except:
18 logging.warn("Unable to import httplib2! Falling back to urllib2!")
19 import urllib2
20 httplib = 'urllib2'
14 21
15 import xml.etree.ElementTree as ET 22 import xml.etree.ElementTree as ET
16 23
17 srvTxtUtilsVersion = "1.10.0" 24 srvTxtUtilsVersion = "1.12.0"
18 25
19 map_months = {'en': [u"", 26 map_months = {'en': [u"",
20 u"January", 27 u"January",
21 u"February", 28 u"February",
22 u"March", 29 u"March",
151 ds = date.isoformat() 158 ds = date.isoformat()
152 159
153 return ds 160 return ds
154 161
155 162
156 def getHttpData(url, data=None, num_tries=3, timeout=10, noExceptions=False): 163 def getDate(date):
164 """return date object from date or datetime date."""
165 if isinstance(date, datetime.datetime):
166 # strip time
167 return date.date()
168
169 return date
170
171
172 def getDatetime(date):
173 """return datetime object from date or datetime date."""
174 if isinstance(date, datetime.date):
175 # add time 0:00
176 return datetime.datetime.combine(date, datetime.time())
177
178 return date
179
180
181 def getHttpData(url, data=None, num_tries=3, timeout=10, username=None, password=None, cache=None, insecure=False, noExceptions=False):
157 """returns result from url+data HTTP request""" 182 """returns result from url+data HTTP request"""
158 # we do GET (by appending data to url) 183 # we do GET (by appending data to url)
159 if isinstance(data, str) or isinstance(data, unicode): 184 if isinstance(data, str) or isinstance(data, unicode):
160 # if data is string then append 185 # if data is string then append
161 url = "%s?%s"%(url,data) 186 url = "%s?%s"%(url,data)
162 elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple): 187 elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple):
163 # urlencode 188 # urlencode
164 url = "%s?%s"%(url,urllib.urlencode(data)) 189 url = "%s?%s"%(url,urllib.urlencode(data))
165 190
166 response = None
167 errmsg = None 191 errmsg = None
168 for cnt in range(num_tries): 192 if httplib == 'httplib2':
169 try: 193 # use httplib2
170 logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url)) 194 for cnt in range(num_tries):
171 if sys.version_info < (2, 6): 195 try:
172 # set timeout on socket -- ugly :-( 196 logging.debug("getHttp(lib2)Data(#%s %ss) url=%s"%(cnt+1,timeout,url))
173 import socket 197 h = httplib2.Http(cache=cache, timeout=float(timeout), disable_ssl_certificate_validation=insecure)
174 socket.setdefaulttimeout(float(timeout)) 198 if username:
175 response = urllib2.urlopen(url) 199 h.add_credentials(username, password)
176 else: 200
177 # timeout as parameter 201 resp, data = h.request(url)
178 response = urllib2.urlopen(url,timeout=float(timeout)) 202 return data
179 # check result? 203
180 break 204 except httplib2.HttpLib2Error, e:
181 except urllib2.HTTPError, e: 205 logging.error("getHttp(lib2)Data: HTTP error(%s): %s"%(e.code,e))
182 logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e)) 206 errmsg = str(e)
183 errmsg = str(e) 207 # stop trying
184 # stop trying 208 break
185 break 209
186 except urllib2.URLError, e: 210 else:
187 logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e)) 211 # use urllib2
188 errmsg = str(e) 212 response = None
189 # stop trying 213 for cnt in range(num_tries):
190 #break 214 try:
191 215 logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url))
192 if response is not None: 216 if sys.version_info < (2, 6):
193 data = response.read() 217 # set timeout on socket -- ugly :-(
194 response.close() 218 import socket
195 return data 219 socket.setdefaulttimeout(float(timeout))
220 response = urllib2.urlopen(url)
221 else:
222 # timeout as parameter
223 response = urllib2.urlopen(url,timeout=float(timeout))
224 # check result?
225 data = response.read()
226 response.close()
227 return data
228
229 except urllib2.HTTPError, e:
230 logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e))
231 errmsg = str(e)
232 # stop trying
233 break
234 except urllib2.URLError, e:
235 logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e))
236 errmsg = str(e)
237 # stop trying
238 #break
196 239
197 if noExceptions: 240 if noExceptions:
198 return None 241 return None
199 242
200 raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg)) 243 raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg))