Skip to main content

Types for HTTP requests and responses

Project description

HTTP types in Python

CircleCI

Types for HTTP request and response.

Requires Python >= 3.6.

Installation

pip install http-types

Usage

Creating objects by hand

You can create typed Request and Response objects directly by listing arguments:

from http_types import Request, Response, RequestBuilder

req = Request(method="get",
              host="api.github.com",
              path="/user/repos?id=1",
              pathname="/user/repos",
              protocol="https",
              query={"id": ["1"]},
              body="",
              body_as_json="",
              headers={})  # Valid `Request` object, passes type-checking

res = Response(status_code=200, body="OK", headers={})  # Valid `Response` object, passes type-checking

invalid_req = Request(method="get")  # Fails type-checking, missing arguments
invalid_res = Response(body=1, ...)  # Fails type-checking, wrong type for `body`

Creating objects via helper methods

from http_types import RequestBuilder, ResponseBuilder, RequestResponseBuilder

# Create Request object from URL
url = "https://api.github.com/v1/repos?id=1"
req = RequestBuilder.from_url(url)  # Validated Request object

# Create request object from dictionary
req_obj = { 'method': 'get', 'body': 'body', ... }
req = RequestBuilder.from_dict(req_obj)

Validating objects

from http_types import RequestBuilder, ResponseBuilder

req = Request(...)
RequestBuilder.validate(req)  # Validate `Request` object

res = Response(...)
ResponseBuilder.validate(res)  # Validate `Response` object

Development

Local development

  1. Create a new virtual environment.
  2. Install dependencies: pip install --upgrade -e .[dev]

Running tests

Run pytest tests/ or python setup.py test.

Configuration for pytest is found in pytest.ini file.

Running type-checking

Install pyright and run pyright --lib or python setup.py typecheck.

Configuration for pyright is found in pyrightconfig.json file.

Automated tests

See .circleci/config.yml.

Publishing package

  1. Bump the version in setup.py if the version is the same as in the published package. Commit and push.
  2. Run python setup.py test, python setup.py typecheck and python setup.py dist to check everything works
  3. To build and upload the package, run python setup.py upload. Insert PyPI credentials to upload the pacakge to PyPI. The command will also run git tag to tag the commit as a release and push the tags to remote.

To see what the different commands do, see Command classes in setup.py.

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

http-types-0.0.2.tar.gz (5.7 kB view hashes)

Uploaded Source

Built Distribution

http_types-0.0.2-py2.py3-none-any.whl (5.3 kB view hashes)

Uploaded Python 2 Python 3

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