Package tlib :: Package base :: Module HttpRequestor |
[hide private]
[frames] | no frames]

# Source Code for Module tlib.base.HttpRequestor

      1  import urllib2
      2  import urllib
      3  import json
      4
      5
      6 -class HttpRequestor(object):
      7      """
      8      Helper class for sending requests of HTTP with GET and POST
      9      """
     10
     11      api_url = ""                    #: domain url to use when sending requests
     12      api_method = ""                 #: api method to use when sending requests
     13      api_params = ""                 #: parameters to send to the method when sending requests
     14      api_header = {}                 #: Authorization to put into header when sending requests
     15      api_post_payload = {}           #: Payload to be delivered when sending a POST request
     16      logger = None                   #: logger to send loggin information to.  Logger comes from pytest test definitions
     17      api_path_params = ""            #:
     18      formatted_params = ""           #:
     19
     20 -    def __init__(self, api_url, logger):
     21          """
     22          Constructor for class
     23
     24          Args :
     25          api_url : (str) URL to the base of the API
     26          logger : (logger) instance of a logging object configured in testing project
     27
     28          """
     29
     30          self.api_url = api_url
     31          self.logger = logger
     32
     33 -    def make_path_params(self, params):
     34          """
     35          Constucts a request with the parameters formated in path parameter format.
     36              EX: http://myserver.com/api/method/pathParam1/pathParam2
     37
     38          Args :(list) a list of parameter values to send to the api
     39
     40          Returns :null
     41
     42          Raises :null
     43
     44          """
     45
     46          path_params = ""
     47
     48          for param in params:
     49              path_params = path_params + "/" + param
     50
     51          #path params must be at the start of the parameter list
     52          self.formatted_params = urllib.quote_plus(path_params, "/") + self.formatted_params
     53
     54 -    def make_query_params(self, params):
     55          """
     56          Constucts a request with the parameters formated in query parameter format.
     57              EX: http://myserver.com/api/method?queryParam=paramValue
     58
     59          Args :(dict) a dictionary of parameter names and values to send to the api
     60
     61          Returns :null
     62
     63          Raises :null
     64
     65          """
     66
     67          encoded_param = urllib.urlencode(params)
     68
     69          #query params must be at the end of the paramater list
     70          self.formatted_params = self.formatted_params + "?" + encoded_param
     71
     72 -    def make_get_request(self):
     73          """
     74          Sends a GET HTTP request.  Make sure you have set the classe's api_params,api_url and api_method first
     75
     76          Args :null
     77
     78          Returns : (file-like object) the HTTP response
     79
     80          Raises :null
     81          """
     82
     83          url = self.api_url + self.api_method
     84          request = urllib2.Request(url + self.formatted_params)
     85
     86          if len(self.api_header) > 0:
     87              for key in self.api_header.keys():
     88                  request.add_header(key, self.api_header[key])
     89
     90          self.logger.info(request.get_full_url())
     91          self.logger.info(request.get_data())
     92          self.logger.info(request.get_method())
     93
     94          try:
     95
     96              return urllib2.urlopen(request)
     97
     98          except urllib2.URLError, e:
     99              return e
    100          finally:
    101              self.formatted_params = ""
    102
    103 -    def make_post_request(self):
    104          """
    105          Sends a POST HTTP request.  Make sure you have set the classe's api_params,api_url,
    106              api_header and api_method first
    107
    108          Args :null
    109
    110          Returns : (file-like object) the HTTP response
    111
    112          Raises :null
    113          """
    114          url = self.api_url + self.api_method
    115          request = urllib2.Request(url)
    116
    117          encoded_param = urllib.urlencode(self.api_params)
    118          request.add_data(encoded_param)
    119
    120          if self.api_post_payload:
    121              request.add_data(json.dumps(self.api_post_payload))
    122
    123          for key in self.api_header.keys():
    124              request.add_header(key, self.api_header[key])
    125
    126          try:
    127
    128              self.logger.info(request.get_full_url())
    129              self.logger.info(request.get_data())
    130              self.logger.info(request.get_method())
    131              return urllib2.urlopen(request)
    132
    133          except urllib2.URLError, e:
    134              return e
    135          finally:
    136              self.formatted_params = ""
    137
    138 -    def get_auth(self, credentials):
    139          """
    140          Creates the authentication for accessing HTTP
    141
    142          Args :
    143          credentials : (dict) 'username' and 'password' keys for a dictionary containing the HTTP Basic Auth to access
    144                                  the api
    145
    146          Returns : null
    147
    148          Raises :null
    149          """
    150
    151          # create a handler for the username / password
    152          passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    153          # none is so that all pages under the realm are opened with password
    154          passman.add_password(None, self.api_url, credentials['username'], credentials['password'])
    155
    156          # authenticate and open the website
    157          authhandler = urllib2.HTTPBasicAuthHandler(passman)
    158          opener = urllib2.build_opener(authhandler)
    159          urllib2.install_opener(opener)
    160