Skip to main content

Library for creating HTTP clients to various services with flexible transport customization

Project description

http_toolkit

The httptoolkit library is a tool for working with HTTP requests in Python that allows you to easily create, customize, and send requests to various services. It provides a simple interface for working with HTTP clients. The library also allows flexible transport customization and abstraction from a particular implementation of HTTP clients.

HTTPXService

If you don't need to use a configured transport, use HTTPXService (for async -> AsyncHttpxService)

from httptoolkit import HttpxService
from httptoolkit import Header

headers = (
    Header(name="My-Header", value="my-value", is_sensitive=False),
)
httpbin = HttpxService("http://httpbin.org", headers=headers)
httpbin.get("/get")
httpbin.post("/post")

Service

If you want to use a configured transport, use Service. (Service -> HttpxTransport, AsyncService -> AsyncHttpxTransport)

### Sync

from httptoolkit import Service, Header
from httptoolkit.transport import HttpxTransport


class DummyService(Service):
    pass


DummyService(
    headers=(Header(name="ServiceHeader", value="service-header", is_sensitive=False),),
    transport=HttpxTransport(base_url="https://example.com:4321", proxies={"http://": "http://10.10.1.10:3128"}),
    ## base_url in this case is passed to transport
)
### Async

from httptoolkit import AsyncService, Header
from httptoolkit.transport import AsyncHttpxTransport


class DummyService(AsyncService):
    pass


DummyService(
    headers=(Header(name="ServiceHeader", value="service-header", is_sensitive=False),),
    transport=AsyncHttpxTransport(base_url="https://example.com:4321", proxies={"http://": "http://10.10.1.10:3128"}),
    ## base_url in this case is passed to transport
)

Sending a request

from httptoolkit import Service, Header, HttpMethod
from httptoolkit.transport import HttpxTransport
from httptoolkit.request import Request


class DummyService(Service):
    pass


service = DummyService(
    headers=(Header(name="ServiceHeader", value="service-header", is_sensitive=False),),
    transport=HttpxTransport(base_url="https://example.com:4321", proxies={"http://": "http://10.10.1.10:3128"}),
    ## base_url in this case is passed to transport
)

# By method
service.post(
    path="/somewhere",
    headers=(Header(name="SuperSecret", value="big_secret", is_sensitive=True, create_mask=lambda value: value[-4:]),),
    params={"over": "the rainbow"},
    body="Something",
)

# By request
service.request(Request(method=HttpMethod.POST, body="Request", params={}, path=""))

Sending JSON and multipart-files

from httptoolkit import Service, Header
from httptoolkit.transport import HttpxTransport


class DummyService(Service):
    pass


service = DummyService(
    headers=(Header(name="ServiceHeader", value="service-header", is_sensitive=False),),
    transport=HttpxTransport(base_url="https://example.com:4321", proxies={"http://": "http://10.10.1.10:3128"}),
    ## base_url in this case is passed to transport
)

# Send JSON (json_encoder is the default, but can be changed in transport)
# Do not send with body and files
service.post(
    path="/somewhere",
    headers=(Header(name="SuperSecret", value="big_secret", is_sensitive=True, create_mask=lambda value: value[-4:]),),
    params={"over": "the rainbow"},
    json={
        "param1": 1,
        "param2": 2,
    },
)

# Send multipart-files in the format Dict[str, Union[BinaryIO, Tuple[str, BinaryIO, str]]]
# Can be sent with body, but cannot be sent with json
service.post(
    path="/somewhere",
    headers=(Header(name="SuperSecret", value="big_secret", is_sensitive=True, create_mask=lambda value: value[-4:]),),
    params={"over": "the rainbow"},
    files={"upload-file": open("report.xls", "rb")},
    # different format files = {'upload-file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel')} 
)

The name of the library logger

httptoolkit

Default logging level

logging.INFO

Example of logging settings

import logging
import httptoolkit

logging.basicConfig(level="INFO")


class MyService(httptoolkit.HttpxService):
    def test(self):
        self.get("/")


service = MyService("https://test.ru")

service.test()

Output

INFO:httptoolkit.transport._sync:Sending GET https://test.ru/

All about Transport

OpenTelemetry

Allows using OpenTelemetry HTTPX to add request tracing via http_toolkit in case HttpxTransport is used.

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_toolkit-1.0.2.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

http_toolkit-1.0.2-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file http_toolkit-1.0.2.tar.gz.

File metadata

  • Download URL: http_toolkit-1.0.2.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for http_toolkit-1.0.2.tar.gz
Algorithm Hash digest
SHA256 df89e7858c2078137f4af8b001f1d31dce014a919931e6975bd53678d3ddae6c
MD5 e84d8205ebdd8ef6d55c0494b3200091
BLAKE2b-256 ca0c15f751058e1925f4a9800627cb4a5313c73713d72c2743ea91e35499f02b

See more details on using hashes here.

File details

Details for the file http_toolkit-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: http_toolkit-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for http_toolkit-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 157ec96d9916ff8e5b00294b94fd4a6e91ba3951b5b1e093ddae7dcae9b494e6
MD5 8dcca5d6e8c61ea44eec1a3da3cb5bab
BLAKE2b-256 1e680c2f1a79460920a84a1c8b855495aad365075ee88d2db37d7d03f1ea3581

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