The naming, import, and docstring conventions every module in src/httpware/
follows. These are house style, not machine-checked beyond what ruff enforces;
treat a violation as a review blocker.
- Modules:
snake_case(client.py,errors.py,middleware/chain.py). - Classes:
PascalCase.Httpis two letters:AsyncClient, notASYNCClient. - Methods:
snake_case. Noaprefix on async methods (matchhttpx2);aclose()is the sole exception. - Private symbols:
_leading_underscore. Cross-module private code lives in_internal/.
- Absolute paths inside
src/httpware/; relative imports only within the same subpackage.
- PEP 257. Module / class / public-method docstrings are required;
D1(missing docstring) is ignored, so the requirement is review-enforced.
Status-keyed StatusError subclasses take a single positional
response: httpx2.Response and do not override __init__; non-status
ClientError subclasses deliberately do. This invariant — and which subclasses
fall on each side — lives in errors.md.