HTTP Exceptions
Raisable HTTP Exceptions
Install
Simply install the package from PyPI.
$ pip install -U http-exceptions
And that is it, you are ready to raise HTTP Exceptions.
What is it good for?
-
Saves writing boilerplate code:
Converts this:
# e.g. app/internal.py def some_function() -> None: raise SomeError() # e.g. app/api.py def api(request: Request) -> Response: try: response = some_function() except SomeError: response = Response(status_code=403) return response
into this:
# e.g. app/internal.py from http_exceptions import ForbiddenException def some_function() -> None: raise ForbiddenException() # e.g. app/api.py def api(request: Request) -> None: return some_function()
-
Dynamic exception raising:
from http_exceptions import HTTPException def raise_from_status(response: Response) -> None: if 400 <= response.status < 600: raise HTTPException.from_status_code(status_code=response.status_code)(message=response.text)
>>> response = Response(status_code=403) >>> raise_from_status(response=response) # ForbiddenException raised
What else?
HTTPException
Base class that provides all the exceptions to be raised.
HTTPExceptions.from_status_code(status_code=status_code)
Returns the relevant Exception corresponding to status_code
e.g. HTTPExceptions.from_status_code(status_code=431) -> RequestHeaderFieldsTooLargeException
ClientException
Subclass of HTTPException serving as a base class for exceptions with statuses in the [400, 499] range.
from http_exceptions import ClientException, RequestHeaderFieldsTooLargeException
try:
raise RequestHeaderFieldsTooLargeException # 431 - Client exception
except ClientException:
# exception is caught here
pass
ServerException
Subclass of HTTPException serving as a base class for exceptions with statuses in the [500, 599] range.
from http_exceptions import HTTPVersionNotSupportedException, ServerException
try:
raise HTTPVersionNotSupportedException # 505 - Server exception
except ServerException:
# exception is caught here
pass
Available Exceptions
Client Exceptions: 400 <= status <= 499
400: BadRequestException
401: UnauthorizedException
402: PaymentRequiredException
403: ForbiddenException
404: NotFoundException
405: MethodNotAllowedException
406: NotAcceptableException
407: ProxyAuthenticationRequiredException
408: RequestTimeoutException
409: ConflictException
410: GoneException
411: LengthRequiredException
412: PreconditionFailedException
413: PayloadTooLargeException
414: URITooLongException
415: UnsupportedMediaTypeException
416: RangeNotSatisfiableException
417: ExpectationFailedException
418: ImATeapotException
421: MisdirectedRequestException
422: UnprocessableEntityException
423: LockedException
424: FailedDependencyException
425: TooEarlyException
426: UpgradeRequiredException
428: PreconditionRequiredException
429: TooManyRequestsException
431: RequestHeaderFieldsTooLargeException
444: NoResponseException
451: UnavailableForLegalReasonsException
Server Exceptions: 500 <= status <= 599
500: InternalServerErrorException
501: NotImplementedException
502: BadGatewayException
503: ServiceUnavailableException
504: GatewayTimeoutException
505: HTTPVersionNotSupportedException
506: VariantAlsoNegotiatesException
507: InsufficientStorageException
508: LoopDetectedException
510: NotExtendedException
511: NetworkAuthenticationRequiredException
Contributing
Contributions are welcome via pull requests.
First time setup
$ git clone git@github.com:DeveloperRSquared/http-exceptions.git
$ cd http-exceptions
$ poetry install
$ poetry shell
Tools including black, mypy etc. will run automatically if you install pre-commit using the instructions below
$ pre-commit install
$ pre-commit run --all-files
Running tests
$ poetry run pytest
Links
- Source Code: https://github.com/DeveloperRSquared/http-exceptions/
- PyPI Releases: https://pypi.org/project/http-exceptions/
- Issue Tracker: https://github.com/DeveloperRSquared/http-exceptions/issues/
Metadata
Release files for http-exceptions 0.2.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| http-exceptions-0.2.10.tar.gz | 9.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| http_exceptions-0.2.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.3 kB
Release files / http-exceptions-0.2.10.tar.gz
| Download URL | http-exceptions-0.2.10.tar.gz |
|---|---|
| Size | 9.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
77484475de13ead5dac72816387dd3c5d3898fd2588af02c1cd5454fb7412c06
|
|
BLAKE2b-256 checksum How to use checksums |
1aeeeed139b5dcd4019d1148eebffb199a22320b9e46e268de3bffcca9a9012c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.12 CPython/3.10.2 Linux/5.11.0-1028-azure
|
Release files / http_exceptions-0.2.10-py3-none-any.whl
| Download URL | http_exceptions-0.2.10-py3-none-any.whl |
|---|---|
| Size | 8.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26c97d021f798f8e6c9db477385d2e8f49ae2b26e6acb92b857637fb21cb1e2e
|
|
BLAKE2b-256 checksum How to use checksums |
9dca53101f30b30fe3c6c247aced01aeda263ef4ce8c8dad44f2d0d591a4f0b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.12 CPython/3.10.2 Linux/5.11.0-1028-azure
|