test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Public Attributes | Static Public Attributes
uploadConditions.HTTP Class Reference
Inheritance diagram for uploadConditions.HTTP:

Public Member Functions

def __init__
 
def discardCookies
 
def getCookies
 
def getToken
 
def query
 
def setBaseUrl
 
def setProxy
 
def setRetries
 
def setTimeout
 

Public Attributes

 baseUrl
 
 curl
 
 retries
 
 token
 

Static Public Attributes

tuple retryCodes = frozenset([502, 503])
 

Detailed Description

Class used for querying URLs using the HTTP protocol.

Definition at line 228 of file uploadConditions.py.

Constructor & Destructor Documentation

def uploadConditions.HTTP.__init__ (   self)

Definition at line 234 of file uploadConditions.py.

References upload_popcon.HTTP.setBaseUrl(), uploadConditions.HTTP.setBaseUrl(), upload_popcon.HTTP.setRetries(), and uploadConditions.HTTP.setRetries().

235  def __init__(self):
236  self.setBaseUrl()
237  self.setRetries()
239  self.curl = pycurl.Curl()
240  self.curl.setopt(self.curl.COOKIEFILE, '') # in memory
241 
242  #-toDo: make sure we have the right options set here to use ssl
243  #-review(2015-09-25): check and see - action: AP
244  # self.curl.setopt(self.curl.SSL_VERIFYPEER, 1)
245  self.curl.setopt(self.curl.SSL_VERIFYPEER, 0)
246  self.curl.setopt(self.curl.SSL_VERIFYHOST, 2)
248  self.baseUrl = None
250  self.token = None

Member Function Documentation

def uploadConditions.HTTP.discardCookies (   self)
Discards cookies.

Definition at line 256 of file uploadConditions.py.

Referenced by uploadConditions.HTTP.query().

257  def discardCookies(self):
258  '''Discards cookies.
259  '''
260  self.curl.setopt(self.curl.COOKIELIST, 'ALL')
261 
def uploadConditions.HTTP.getCookies (   self)
Returns the list of cookies.

Definition at line 251 of file uploadConditions.py.

252  def getCookies(self):
253  '''Returns the list of cookies.
254  '''
255  return self.curl.getinfo(self.curl.INFO_COOKIELIST)
def uploadConditions.HTTP.getToken (   self,
  username,
  password 
)

Definition at line 296 of file uploadConditions.py.

References upload_popcon.HTTP.baseUrl, uploadConditions.HTTP.baseUrl, cond::TagInfo_t.token, upload_popcon.HTTP.token, uploadConditions.HTTP.token, and upload_popcon.ConditionsUploader.token.

297  def getToken(self, username, password):
298 
299  url = self.baseUrl + 'token'
300 
301  self.curl.setopt(pycurl.URL, url)
302  self.curl.setopt(pycurl.VERBOSE, 0)
303 
304  #-toDo: check if/why these are needed ...
305  #-ap: hmm ...
306  # self.curl.setopt(pycurl.DNS_CACHE_TIMEOUT, 0)
307  # self.curl.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_V4)
308  #-end hmmm ...
309  #-review(2015-09-25): check and see - action: AP
310 
311 
312  self.curl.setopt(pycurl.HTTPHEADER, ['Accept: application/json'])
313  # self.curl.setopt( self.curl.POST, {})
314  self.curl.setopt(self.curl.HTTPGET, 0)
315 
316  response = cStringIO.StringIO()
317  self.curl.setopt(pycurl.WRITEFUNCTION, response.write)
318  self.curl.setopt(pycurl.USERPWD, '%s:%s' % (username, password) )
319 
320  logging.debug('going to connect to server at: %s' % url )
321 
322  self.curl.perform()
323  code = self.curl.getinfo(pycurl.RESPONSE_CODE)
324  logging.debug('got: %s ', str(code))
325 
326  try:
327  self.token = json.loads( response.getvalue() )['token']
328  except Exception as e:
329  logging.error('http::getToken> got error from server: %s ', str(e) )
330  if 'No JSON object could be decoded' in str(e):
331  return None
332  logging.error("error getting token: %s", str(e))
333  return None
334 
335  logging.debug('token: %s', self.token)
336  logging.debug('returning: %s', response.getvalue())
337 
338  return response.getvalue()
def uploadConditions.HTTP.query (   self,
  url,
  data = None,
  files = None,
  keepCookies = True 
)
Queries a URL, optionally with some data (dictionary).

If no data is specified, a GET request will be used.
If some data is specified, a POST request will be used.

If files is specified, it must be a dictionary like data but
the values are filenames.

By default, cookies are kept in-between requests.

A HTTPError exception is raised if the response's HTTP code is not 200.

Definition at line 339 of file uploadConditions.py.

References upload_popcon.HTTP.baseUrl, uploadConditions.HTTP.baseUrl, upload_popcon.HTTP.discardCookies(), uploadConditions.HTTP.discardCookies(), list(), upload_popcon.HTTP.retries, uploadConditions.HTTP.retries, upload_popcon.HTTP.retryCodes, uploadConditions.HTTP.retryCodes, cond::TagInfo_t.token, upload_popcon.HTTP.token, uploadConditions.HTTP.token, and upload_popcon.ConditionsUploader.token.

Referenced by production_tasks.BaseDataset.run(), and edmIntegrityCheck.IntegrityCheck.test().

340  def query(self, url, data = None, files = None, keepCookies = True):
341  '''Queries a URL, optionally with some data (dictionary).
342 
343  If no data is specified, a GET request will be used.
344  If some data is specified, a POST request will be used.
345 
346  If files is specified, it must be a dictionary like data but
347  the values are filenames.
348 
349  By default, cookies are kept in-between requests.
350 
351  A HTTPError exception is raised if the response's HTTP code is not 200.
352  '''
353 
354  if not keepCookies:
355  self.discardCookies()
356 
357  url = self.baseUrl + url
358 
359  # make sure the logs are safe ... at least somewhat :)
360  data4log = copy.copy(data)
361  if data4log:
362  if 'password' in data4log.keys():
363  data4log['password'] = '*'
364 
365  retries = [0] + list(self.retries)
366 
367  while True:
368  logging.debug('Querying %s with data %s and files %s (retries left: %s, current sleep: %s)...', url, data4log, files, len(retries), retries[0])
369 
370  time.sleep(retries.pop(0))
371 
372  try:
373  self.curl.setopt(self.curl.URL, url)
374  self.curl.setopt(self.curl.HTTPGET, 1)
375 
376  # from now on we use the token we got from the login
377  self.curl.setopt(pycurl.USERPWD, '%s:""' % ( str(self.token), ) )
378  self.curl.setopt(pycurl.HTTPHEADER, ['Accept: application/json'])
379 
380  if data is not None or files is not None:
381  # If there is data or files to send, use a POST request
382 
383  finalData = {}
384 
385  if data is not None:
386  finalData.update(data)
387 
388  if files is not None:
389  for (key, fileName) in files.items():
390  finalData[key] = (self.curl.FORM_FILE, fileName)
391  self.curl.setopt( self.curl.HTTPPOST, finalData.items() )
392 
393  self.curl.setopt(pycurl.VERBOSE, 0)
394 
395  response = cStringIO.StringIO()
396  self.curl.setopt(self.curl.WRITEFUNCTION, response.write)
397  self.curl.perform()
398 
399  code = self.curl.getinfo(self.curl.RESPONSE_CODE)
400 
401  if code in self.retryCodes and len(retries) > 0:
402  logging.debug('Retrying since we got the %s error code...', code)
403  continue
404 
405  if code != 200:
406  raise HTTPError(code, response.getvalue())
407 
408  return response.getvalue()
409 
410  except pycurl.error as e:
411  if len(retries) == 0:
412  raise e
413  logging.debug('Retrying since we got the %s pycurl exception...', str(e))
414 
415 # common/http.py end
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
def uploadConditions.HTTP.setBaseUrl (   self,
  baseUrl = '' 
)
Allows to set a base URL which will be prefixed to all the URLs
that will be queried later.

Definition at line 262 of file uploadConditions.py.

References upload_popcon.HTTP.baseUrl, and uploadConditions.HTTP.baseUrl.

Referenced by uploadConditions.HTTP.__init__().

263  def setBaseUrl(self, baseUrl = ''):
264  '''Allows to set a base URL which will be prefixed to all the URLs
265  that will be queried later.
266  '''
267  self.baseUrl = baseUrl
268 
def uploadConditions.HTTP.setProxy (   self,
  proxy = '' 
)
Allows to set a proxy.

Definition at line 269 of file uploadConditions.py.

270  def setProxy(self, proxy = ''):
271  '''Allows to set a proxy.
272  '''
273  self.curl.setopt(self.curl.PROXY, proxy)
274 
def uploadConditions.HTTP.setRetries (   self,
  retries = () 
)
Allows to set retries.

The retries are a sequence of the seconds to wait per retry.

The retries are done on:
    * PyCurl errors (includes network problems, e.g. not being able
      to connect to the host).
    * 502 Bad Gateway (for the moment, to avoid temporary
      Apache-CherryPy issues).
    * 503 Service Temporarily Unavailable (for when we update
      the frontends).

Definition at line 281 of file uploadConditions.py.

Referenced by uploadConditions.HTTP.__init__().

282  def setRetries(self, retries = ()):
283  '''Allows to set retries.
284 
285  The retries are a sequence of the seconds to wait per retry.
286 
287  The retries are done on:
288  * PyCurl errors (includes network problems, e.g. not being able
289  to connect to the host).
290  * 502 Bad Gateway (for the moment, to avoid temporary
291  Apache-CherryPy issues).
292  * 503 Service Temporarily Unavailable (for when we update
293  the frontends).
294  '''
295  self.retries = retries
def uploadConditions.HTTP.setTimeout (   self,
  timeout = 0 
)
Allows to set a timeout.

Definition at line 275 of file uploadConditions.py.

276  def setTimeout(self, timeout = 0):
277  '''Allows to set a timeout.
278  '''
279  self.curl.setopt(self.curl.TIMEOUT, timeout)
280 

Member Data Documentation

uploadConditions.HTTP.baseUrl

Definition at line 247 of file uploadConditions.py.

Referenced by uploadConditions.HTTP.getToken(), uploadConditions.HTTP.query(), and uploadConditions.HTTP.setBaseUrl().

uploadConditions.HTTP.curl

Definition at line 238 of file uploadConditions.py.

uploadConditions.HTTP.retries

Definition at line 294 of file uploadConditions.py.

Referenced by uploadConditions.HTTP.query().

tuple uploadConditions.HTTP.retryCodes = frozenset([502, 503])
static

Definition at line 232 of file uploadConditions.py.

Referenced by uploadConditions.HTTP.query().

uploadConditions.HTTP.token

Definition at line 249 of file uploadConditions.py.

Referenced by uploadConditions.HTTP.getToken(), uploadConditions.HTTP.query(), and uploadConditions.ConditionsUploader.signOut().