securionpay/securionpay-python

View on GitHub
securionpay/resource.py

Summary

Maintainability
A
45 mins
Test Coverage
import sys

import requests

import securionpay as api
from securionpay.__version__ import __version__


class Resource(object):
    def name(self):
        return self.__class__.__name__.lower()

    def _get(self, path, params=None, url=None):
        return self.__request("GET", path, params=params, url=url)

    def _post(self, path, json=None, url=None):
        return self.__request("POST", path, json=json, url=url)

    def _multipart(self, path, params=None, files=None, url=None):
        return self.__request("POST", path, params=params, files=files, url=url)

    def _delete(self, path, params=None, url=None):
        return self.__request("DELETE", path, params=params, url=url)

    @classmethod
    def __request(cls, method, path, params=None, json=None, files=None, url=None):
        if url is None:
            url = api.api_url.rstrip("/")
        resp = requests.request(
            method,
            url=url + path,
            auth=(api.secret_key, ""),
            headers=cls.__create_headers(),
            files=files,
            params=params,
            json=json,
        )

        json = resp.json()
        if resp.status_code == 200:
            return json
        error = json.get("error")
        if error is None:
            raise api.SecurionPayException("Internal error", None, json, None, None)
        raise api.SecurionPayException(
            error.get("type"),
            error.get("code"),
            error.get("message"),
            error.get("charge_id"),
            error.get("blacklist_rule_id"),
        )

    @classmethod
    def __create_headers(cls):
        user_agent = "SecurionPay-Python/%s (Python/%s.%s.%s)" % (
            __version__,
            sys.version_info.major,
            sys.version_info.minor,
            sys.version_info.micro,
        )

        return {"User-Agent": user_agent}