All Projects → isik-kaplan → django-http-exceptions

isik-kaplan / django-http-exceptions

Licence: MIT license
HTTP exceptions for django

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to django-http-exceptions

secure-cookie
Secure cookies and sessions for WSGI
Stars: ✭ 30 (+3.45%)
Mutual labels:  wsgi
pypi-command-line
A powerful, colorful, beautiful command-line-interface for pypi.org
Stars: ✭ 32 (+10.34%)
Mutual labels:  pypi
termtables
🖥️ Pretty tables in the terminal
Stars: ✭ 85 (+193.1%)
Mutual labels:  pypi
domnibus
Access domain information via python and command line.
Stars: ✭ 16 (-44.83%)
Mutual labels:  pypi
django-q-email
Queues the sending of email with Django Q.
Stars: ✭ 32 (+10.34%)
Mutual labels:  pypi
ios2androidres
Copy iOS image resources to their appropriate Android directory
Stars: ✭ 20 (-31.03%)
Mutual labels:  pypi
cira
Cira algorithmic trading made easy. A Façade library for simpler interaction with alpaca-trade-API from Alpaca Markets.
Stars: ✭ 21 (-27.59%)
Mutual labels:  pypi
therapist
Work out your commitment issues.
Stars: ✭ 29 (+0%)
Mutual labels:  pypi
caipyra
import caipyra module code
Stars: ✭ 25 (-13.79%)
Mutual labels:  pypi
habitipy
Command-line interface to Habitica
Stars: ✭ 47 (+62.07%)
Mutual labels:  pypi
cibuildwheel
🎡 Build Python wheels for all the platforms on CI with minimal configuration.
Stars: ✭ 1,350 (+4555.17%)
Mutual labels:  pypi
Coderr.Client
Core client library for Coderr
Stars: ✭ 23 (-20.69%)
Mutual labels:  exceptions
pypi-simple
PyPI Simple Repository API client library
Stars: ✭ 21 (-27.59%)
Mutual labels:  pypi
bugsnag-java
Bugsnag error reporting for Java.
Stars: ✭ 51 (+75.86%)
Mutual labels:  exceptions
yosys
Unofficial Yosys WebAssembly packages
Stars: ✭ 29 (+0%)
Mutual labels:  pypi
py-dependency-install
A GitHub Action that installs Python package dependencies from a user-defined requirements.txt file path with optional pip, setuptools, and wheel installs/updates
Stars: ✭ 23 (-20.69%)
Mutual labels:  pypi
pygitrepo-project
A simplified, minimal but powerful Python Git Project development workflow CLI tools.
Stars: ✭ 32 (+10.34%)
Mutual labels:  pypi
FPChecker
A dynamic analysis tool to detect floating-point errors in HPC applications.
Stars: ✭ 26 (-10.34%)
Mutual labels:  exceptions
raise if
one liner `raise Exception if condition` for Python
Stars: ✭ 15 (-48.28%)
Mutual labels:  exceptions
wsgi lineprof
WSGI middleware for line-by-line profiling
Stars: ✭ 47 (+62.07%)
Mutual labels:  wsgi

Build Status codecov Python 3.5+ Django 2.0+ PyPI - License PyPI - Downloads

What is django-http-exceptions?

It is raisable exceptions for your django views.

What is it good for?

It makes this

def some_function():
    raise SomeError

def view(request):
   try:
       response = some_function()
   except SomeError:
       response = HttpResponse(status=403)
   return response

into this

from django_http_exceptions import HTTPExceptions
def some_function():
    raise HTTPExceptions.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.

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.register_base_exception(exception)

Given that exception is a class that inherits from HTTPException you can customize the exceptions. Keep in mind that HTTPException is an Exception subclass itself.

HTTPExceptions.BASE_EXCEPTION.with_response(response)

This is the method for raising 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.with_content(content)

This method allow to raise an HTTPException with a custom message (can be either str or bytes).

For instance, HTTPExceptions.NOT_FOUND.with_content("The user named 'username' could not be found") would return something equivalent to HttpResponse("The user named 'username' could not be found", status=404).

HTTPExceptions.BASE_EXCEPTION.with_json(json_data)

This method allow to raise an HTTPException with a custom json response,
json_data can be anything that JsonResponse accepts.

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.

errorify(error)

Decorator that turns a view (both class and function) into an http error

@errorify(HTTPExceptions.PAYMENT_REQUIRED)
class Subscribe(TemplateView):
    template = SUBSCRIBE_TEMPLATE

Avaliable Exceptions

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)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].