https://github.com/meeshkan/py-http-types
Python library for JSON serialisation of HTTP exchanges.
https://github.com/meeshkan/py-http-types
http http-types json python
Last synced: 18 days ago
JSON representation
Python library for JSON serialisation of HTTP exchanges.
- Host: GitHub
- URL: https://github.com/meeshkan/py-http-types
- Owner: meeshkan
- License: mit
- Archived: true
- Created: 2019-12-09T09:25:34.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-08-25T10:55:57.000Z (over 5 years ago)
- Last Synced: 2025-09-28T05:27:07.206Z (4 months ago)
- Topics: http, http-types, json, python
- Language: Python
- Homepage: https://meeshkan.github.io/http-types/
- Size: 248 KB
- Stars: 7
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# HTTP Types in Python
[](https://circleci.com/gh/meeshkan/py-http-types)
[](https://pypi.org/project/http-types/)
[](LICENSE)
Python (3.6 or later) library to read and write records of HTTP exchanges in the [HTTP types](https://meeshkan.github.io/http-types/) format.
## Installation
```bash
pip install http-types
```
## Writing HTTP exchanges
Using `HttpExchangeWriter`a recording of HTTP traffic can be serialised for use with any program that can handle the HTTP Types format:
```python
request = RequestBuilder.from_dict({
"host": "api.github.com",
"protocol": "https",
"method": "get",
"pathname": "/v1/users",
"query": {"a": "b", "q": ["1", "2"]},
}
)
response = ResponseBuilder.from_dict({
"statusCode": 200,
"headers": {"content-type": "text/plain"},
"body": "(response body string)",
}
)
exchange = HttpExchange(request=request, response=response)
with tempfile.TemporaryFile(mode="w") as output:
writer = HttpExchangeWriter(output)
writer.write(exchange)
# Serialize to dictionary
as_dict = HttpExchangeWriter.to_dict(exchange)
# Serialize to JSON string
as_str = HttpExchangeWriter.to_json(exchange)
```
## Reading HTTP exchanges
With `HttpExchangeReader` recordings in the HTTP Types format can be read for processing:
```python
for exchange in HttpExchangeReader.from_jsonl(input_file):
assert exchange.request.method == HttpMethod.GET
assert exchange.request.protocol == Protocol.HTTPS
assert exchange.response.statusCode == 200
```
## Development
Initial setup:
1. Create a new virtual environment.
1. Install dependencies: `pip install --upgrade -e '.[dev]'`
To test, run `python setup.py test`, which will:
- Enforce code formatting using [black](https://black.readthedocs.io/en/stable/).
- Test with `pytest`, configured in [pytest.ini](./pytest.ini).
- Type check with `mypy`.
- Enforce style guide with [flake8](https://flake8.pycqa.org/en/latest/), configured in [.flake8](./.flake8).
## Publishing
1. Bump the version in [setup.py](./setup.py) if the version is the same as in the published [package](https://pypi.org/project/http-types/). Commit and push.
1. Run `python setup.py test` and `python setup.py dist` to check that everything works.
1. To build and upload the package, run `python setup.py upload`. Insert PyPI credentials to upload the package 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](./setup.py).