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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | df89e7858c2078137f4af8b001f1d31dce014a919931e6975bd53678d3ddae6c |
|
MD5 | e84d8205ebdd8ef6d55c0494b3200091 |
|
BLAKE2b-256 | ca0c15f751058e1925f4a9800627cb4a5313c73713d72c2743ea91e35499f02b |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 157ec96d9916ff8e5b00294b94fd4a6e91ba3951b5b1e093ddae7dcae9b494e6 |
|
MD5 | 8dcca5d6e8c61ea44eec1a3da3cb5bab |
|
BLAKE2b-256 | 1e680c2f1a79460920a84a1c8b855495aad365075ee88d2db37d7d03f1ea3581 |