Skip to main content

Abstract Base Class for writing Requests based Rest Api Clients

Project description

Python 3.7 Lint and Test

Abstract Http Client

This project is a starting template for quickly implementing a python REST api client. A concrete base class encapsulating the popular requests library is provided. Abstract base class building blocks for integrating other http libraries (such as aiohttp, etc.) are also available. The main advantage to using this base class as a starting point is to save on common boilerplate actions, which are highlighted below.

Basic Features

  • Setup of session object and common general attributes
  • helper methods to send requests with session
  • Validation and debug logging of all requests sent
  • internal counter of requests sent
  • Context manager to manage session tokens (login / logout methods must be implemented)
  • Composable client and service classes

Installation

pip install abstract-http-client

Basic Usage

  • Sample implementation of api client that has no auth
from abstract_http_client.http_clients.requests_client import RequestsClient
import json

class JsonPlaceholderApiClient(RequestsClient):
  def __init__(self, host):
    super().__init__(host=host, use_https=True)

  def get_users(self):
    return self.rest_service.request_get(uri="/users").json()

  def get_posts(self):
    return self.rest_service.request_get("/posts").json()

  def add_post(self):
    return self.rest_service.request_post("/posts", data={"post": "my_post"})


if __name__ == "__main__":
  api = JsonPlaceholderApiClient(host="jsonplaceholder.typicode.com")
  users = api.get_users()
  print(json.dumps(users[:2], indent=4))
  print(f"total requests sent {api.rest_service.request_counter}")

Auth Client Sample

  • Example that requires login and authorization header on every request
  • Implement a login method - here it stores header on session object
  • Base Class context managers call Logout on exit by default
  • Login not in enter by default, can be added if prefer to have context manager trigger login. Or just put into init
from abstract_http_client.http_clients.requests_client import RequestsClient


class SampleAuthClient(RequestsClient):
  def __init__(self, host, user, password):
    super().__init__(host=host, user=user, password=password)
    self.login()

  def login(self):
    """  sample login - getting token and storing on requests session object """
    data = {"user": self.user, "password": self.password}
    self.token = self.rest_service.request_put(uri="/login", json=data)
    self.rest_service.session.headers.update({"Authorization": self.token})

  def logout(self):
    """  sample logout - invalidating token and clearing session auth header """
    self.rest_service.request_delete(uri=f"/logout/{self.token}")
    self.rest_service.session.headers.pop({"Authorization": self.token})

  def get_stuff(self) -> dict:
    """ NOTE: this is pseudocode, not real endpoint """
    return self.rest_service.request_get("/stuff").json()


if __name__ == "__main__":
  # Context manager will handle api logout
  with SampleAuthClient(host="192.168.1.3", user="admin", password="admin") as api:
    
    # call your api here 
    stuff = api.get_stuff()
    # Do more stuff

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

abstract-http-client-1.0.3.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

abstract_http_client-1.0.3-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file abstract-http-client-1.0.3.tar.gz.

File metadata

  • Download URL: abstract-http-client-1.0.3.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for abstract-http-client-1.0.3.tar.gz
Algorithm Hash digest
SHA256 8054d49cd53ab506cfc4ba16063ffb1e0b8d9a5d6b75c3a4dfaaee6353882e3d
MD5 a1283df6d1bddebe6219a7926702d45b
BLAKE2b-256 9242a930490c53b2fe2ec5148cf0166d8ab0af32fb3e27ec113c7bd6711c697d

See more details on using hashes here.

File details

Details for the file abstract_http_client-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: abstract_http_client-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 8.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for abstract_http_client-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 12d610139d091251f907ad68188884c3bb34091459436ef7d79e5d0e41560b34
MD5 f9fdd5ad9c228ed96c3c734a6f30889b
BLAKE2b-256 c991a50926922a1c38232441ab202ceb7cc7dc2a34ed55179ee723f78c74ce1d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page