rorymurdock/reqREST

View on GitHub
reqrest/reqrest.py

Summary

Maintainability
C
1 day
Test Coverage
"""Package used with REST APIs"""
import logging
import requests
from requests.adapters import HTTPAdapter
from urllib3.util import Retry


# Used for all AW REST API queries
class REST():
    """REST API Framework"""

    # Add the varibles as self.
    def __init__(self,
                 url='',
                 protocol='https',
                 timeout=10,
                 retries=5,
                 headers=None,
                 proxy=None,
                 debug=False):
        # Import Proxy Server settings
        self.proxies = proxy
        self.url = url
        self.debug = debug
        self.timeout = timeout
        self.retries = retries
        self.protocol = protocol

        # Start the session
        self.sessions = requests.Session()
        if isinstance(headers, dict):
            self.sessions.headers.update(headers)

        retries = Retry(total=self.retries,
                        backoff_factor=1,
                        status_forcelist=[502, 503, 504])
        self.sessions.mount('%s://' % protocol,
                            HTTPAdapter(max_retries=retries))

        # Debugging
        if self.debug:
            print('API URL: %s' % self.url)
            logging.basicConfig()
            logging.getLogger().setLevel(logging.DEBUG)
            requests_log = logging.getLogger("requests.packages.urllib3")
            requests_log.setLevel(logging.DEBUG)
            requests_log.propagate = True

    # HTTP GET, returns HTTP response object
    def get(self, path, queries=""):
        "HTTP GET"
        connection = self.sessions.get(self.protocol + '://' + self.url + path,
                                       proxies=self.proxies,
                                       timeout=self.timeout,
                                       params=queries)
        return connection

    # HTTP POST, returns HTTP response object
    def post(self, path, payload=None, queries=""):
        """HTTP POST"""
        connection = self.sessions.post(self.protocol + '://' + self.url +
                                        path,
                                        json=payload,
                                        proxies=self.proxies,
                                        timeout=self.timeout,
                                        params=queries)
        return connection

    # HTTP PUT, returns HTTP response object
    def put(self, path, payload, queries=""):
        """HTTP PUT"""
        connection = self.sessions.put(self.protocol + '://' + self.url + path,
                                       data=payload,
                                       proxies=self.proxies,
                                       timeout=self.timeout,
                                       params=queries)
        return connection

    # HTTP DELETE, returns HTTP response object
    def delete(self, path, queries=""):
        """HTTP DELETE"""
        connection = self.sessions.delete(self.protocol + '://' + self.url +
                                          path,
                                          proxies=self.proxies,
                                          timeout=self.timeout,
                                          params=queries)
        return connection

    # HTTP GET, returns response headers json
    def response_headers(self, path, queries=""):
        """Gets response headers"""
        connection = self.sessions.get(self.protocol + '://' + self.url + path,
                                       proxies=self.proxies,
                                       timeout=self.timeout,
                                       params=queries)
        return connection.headers