Skip to main content

django raisable http exceptions

Project description

## What is *django_http_exceptions*?

It is raisable exceptions for your django views.

## What is it good for?

It makes this

````py
def some_function():
raise SomeError

def view(request):
try:
response = some_function()
except SomeError:
response = HttpResponse(status=403)
return response
````
into this
````py
from django_http_exceptions import HTTPExceptions
def some_function():
raise HTTPExcetions.FORBIDDEN # HTTPExceptions.from_status(403)

def view(request):
return some_function()

````

meaning that is saves you from boilerplate code.

It also allows you to hook default views to **all possible http response codes**, meaning that you can use more than the 5-6 django provided error handlers.

## How to use it?

Just two middlewares, lower the better, and you are done.

````python
MIDDLEWARE = [
...,
'django_http_exceptions.middleware.ExceptionHandlerMiddleware',
'django_http_exceptions.middleware.ThreadLocalRequestMiddleware',
...
]
````

And that is it, you are ready to raise your http exceptions.


## What else?

#### `HTTPExceptions`
Base class that provides all the exceptions to be raised.

#### `HTTPExceptions.from_status(status)`
In case you don't want to write
`HTTPExceptions.REQUEST_HEADER_FIELDS_TOO_LARGE`
You can just write
`HTTPExceptions.from_status(431)`

#### `HTTPExceptions.BASE_EXCEPTON`
The base exception for all http exception

####`HTTPExceptions.BASE_EXCEPTION.with_response(response)`
This is the method for rasing exceptions with a response. You can put any response in this method while raising your
error.

Let's say you have a view named `index`, then this example would return what `index` function would return, but with
status code `410`
`HTTPExceptions.GONE.with_response(index(request))`

#### `HTTPExceptions.BASE_EXCEPTION.register_default_view(view)`
`view` is a function that takes only one argument, `request` when you register a default view to an error class with
`HTTPExceptions.NOT_FOUND.register_defaul_view(view)` when `HTTPExceptions.GONE` is raised it returns the view function,
but again, with `404` status code. If the error has been raised with `.with_response`, that is used instead.

#### `get_current_request`

This function gets you the current request anywhere in your django application, making it easier for your dynamic error
responses to be created, like in the `HTTPExceptions.GONE.with_response(index(request))` example.

#### `ExceptionHandlerMiddleware`

Just there for to exception handling to work.

#### `ThreadLocalRequestMiddleware`

Just there for to `get_current_request` to work.

## Avaliable Exceptions
```py
HTTPExceptions.CONTINUE # HTTPExceptions.from_status(100)
HTTPExceptions.SWITCHING_PROTOCOLS # HTTPExceptions.from_status(101)
HTTPExceptions.PROCESSING # HTTPExceptions.from_status(102)
HTTPExceptions.OK # HTTPExceptions.from_status(200)
HTTPExceptions.CREATED # HTTPExceptions.from_status(201)
HTTPExceptions.ACCEPTED # HTTPExceptions.from_status(202)
HTTPExceptions.NON_AUTHORITATIVE_INFORMATION # HTTPExceptions.from_status(203)
HTTPExceptions.NO_CONTENT # HTTPExceptions.from_status(204)
HTTPExceptions.RESET_CONTENT # HTTPExceptions.from_status(205)
HTTPExceptions.PARTIAL_CONTENT # HTTPExceptions.from_status(206)
HTTPExceptions.MULTI_STATUS # HTTPExceptions.from_status(207)
HTTPExceptions.ALREADY_REPORTED # HTTPExceptions.from_status(208)
HTTPExceptions.IM_USED # HTTPExceptions.from_status(226)
HTTPExceptions.MULTIPLE_CHOICES # HTTPExceptions.from_status(300)
HTTPExceptions.MOVED_PERMANENTLY # HTTPExceptions.from_status(301)
HTTPExceptions.FOUND # HTTPExceptions.from_status(302)
HTTPExceptions.SEE_OTHER # HTTPExceptions.from_status(303)
HTTPExceptions.NOT_MODIFIED # HTTPExceptions.from_status(304)
HTTPExceptions.USE_PROXY # HTTPExceptions.from_status(305)
HTTPExceptions.TEMPORARY_REDIRECT # HTTPExceptions.from_status(307)
HTTPExceptions.PERMANENT_REDIRECT # HTTPExceptions.from_status(308)
HTTPExceptions.BAD_REQUEST # HTTPExceptions.from_status(400)
HTTPExceptions.UNAUTHORIZED # HTTPExceptions.from_status(401)
HTTPExceptions.PAYMENT_REQUIRED # HTTPExceptions.from_status(402)
HTTPExceptions.FORBIDDEN # HTTPExceptions.from_status(403)
HTTPExceptions.NOT_FOUND # HTTPExceptions.from_status(404)
HTTPExceptions.METHOD_NOT_ALLOWED # HTTPExceptions.from_status(405)
HTTPExceptions.NOT_ACCEPTABLE # HTTPExceptions.from_status(406)
HTTPExceptions.PROXY_AUTHENTICATION_REQUIRED # HTTPExceptions.from_status(407)
HTTPExceptions.REQUEST_TIMEOUT # HTTPExceptions.from_status(408)
HTTPExceptions.CONFLICT # HTTPExceptions.from_status(409)
HTTPExceptions.GONE # HTTPExceptions.from_status(410)
HTTPExceptions.LENGTH_REQUIRED # HTTPExceptions.from_status(411)
HTTPExceptions.PRECONDITION_FAILED # HTTPExceptions.from_status(412)
HTTPExceptions.REQUEST_ENTITY_TOO_LARGE # HTTPExceptions.from_status(413)
HTTPExceptions.REQUEST_URI_TOO_LONG # HTTPExceptions.from_status(414)
HTTPExceptions.UNSUPPORTED_MEDIA_TYPE # HTTPExceptions.from_status(415)
HTTPExceptions.REQUESTED_RANGE_NOT_SATISFIABLE # HTTPExceptions.from_status(416)
HTTPExceptions.EXPECTATION_FAILED # HTTPExceptions.from_status(417)
HTTPExceptions.UNPROCESSABLE_ENTITY # HTTPExceptions.from_status(422)
HTTPExceptions.LOCKED # HTTPExceptions.from_status(423)
HTTPExceptions.FAILED_DEPENDENCY # HTTPExceptions.from_status(424)
HTTPExceptions.UPGRADE_REQUIRED # HTTPExceptions.from_status(426)
HTTPExceptions.PRECONDITION_REQUIRED # HTTPExceptions.from_status(428)
HTTPExceptions.TOO_MANY_REQUESTS # HTTPExceptions.from_status(429)
HTTPExceptions.REQUEST_HEADER_FIELDS_TOO_LARGE # HTTPExceptions.from_status(431)
HTTPExceptions.INTERNAL_SERVER_ERROR # HTTPExceptions.from_status(500)
HTTPExceptions.NOT_IMPLEMENTED # HTTPExceptions.from_status(501)
HTTPExceptions.BAD_GATEWAY # HTTPExceptions.from_status(502)
HTTPExceptions.SERVICE_UNAVAILABLE # HTTPExceptions.from_status(503)
HTTPExceptions.GATEWAY_TIMEOUT # HTTPExceptions.from_status(504)
HTTPExceptions.HTTP_VERSION_NOT_SUPPORTED # HTTPExceptions.from_status(505)
HTTPExceptions.VARIANT_ALSO_NEGOTIATES # HTTPExceptions.from_status(506)
HTTPExceptions.INSUFFICIENT_STORAGE # HTTPExceptions.from_status(507)
HTTPExceptions.LOOP_DETECTED # HTTPExceptions.from_status(508)
HTTPExceptions.NOT_EXTENDED # HTTPExceptions.from_status(510)
HTTPExceptions.NETWORK_AUTHENTICATION_REQUIRED # HTTPExceptions.from_status(511)
```

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

django_http_exceptions-1.0.0.tar.gz (4.3 kB view hashes)

Uploaded Source

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