Created
October 11, 2019 09:57
-
-
Save hashlash/88ace6c7b3f5f5f7fe3d1b46291dc7d5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@classonlymethod | |
def as_view(cls, **initkwargs): | |
"""Main entry point for a request-response process.""" | |
for key in initkwargs: | |
if key in cls.http_method_names: | |
raise TypeError("You tried to pass in the %s method name as a " | |
"keyword argument to %s(). Don't do that." | |
% (key, cls.__name__)) | |
if not hasattr(cls, key): | |
raise TypeError("%s() received an invalid keyword %r. as_view " | |
"only accepts arguments that are already " | |
"attributes of the class." % (cls.__name__, key)) | |
def view(request, *args, **kwargs): | |
self = cls(**initkwargs) | |
if hasattr(self, 'get') and not hasattr(self, 'head'): | |
self.head = self.get | |
self.setup(request, *args, **kwargs) | |
if not hasattr(self, 'request'): | |
raise AttributeError( | |
"%s instance has no 'request' attribute. Did you override " | |
"setup() and forget to call super()?" % cls.__name__ | |
) | |
return self.dispatch(request, *args, **kwargs) | |
view.view_class = cls | |
view.view_initkwargs = initkwargs | |
# take name and docstring from class | |
update_wrapper(view, cls, updated=()) | |
# and possible attributes set by decorators | |
# like csrf_exempt from dispatch | |
update_wrapper(view, cls.dispatch, assigned=()) | |
return view |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment