From daffad52fb6b5d98593e2168540521016a41784a Mon Sep 17 00:00:00 2001 From: Kaushal Mishra Date: Sat, 30 Jan 2021 20:24:54 +0530 Subject: [PATCH] Added support for generic view set --- drf_generators/generators.py | 11 ++++- .../management/commands/generate.py | 2 + drf_generators/templates/genericviewset.py | 42 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 drf_generators/templates/genericviewset.py diff --git a/drf_generators/generators.py b/drf_generators/generators.py index 8963687..c95c9ba 100644 --- a/drf_generators/generators.py +++ b/drf_generators/generators.py @@ -6,9 +6,11 @@ from drf_generators.templates.viewset import VIEW_SET_URL, VIEW_SET_VIEW from drf_generators.templates.function import FUNCTION_URL, FUNCTION_VIEW from drf_generators.templates.modelviewset import MODEL_URL, MODEL_VIEW +from drf_generators.templates.genericviewset import GENERIC_URL, GENERIC_VIEW + __all__ = ['BaseGenerator', 'APIViewGenerator', 'ViewSetGenerator', - 'FunctionViewGenerator', 'ModelViewSetGenerator'] + 'FunctionViewGenerator', 'ModelViewSetGenerator', 'GenericViewSetGenerator'] class BaseGenerator(object): @@ -110,3 +112,10 @@ def __init__(self, app_config, force): super(ModelViewSetGenerator, self).__init__(app_config, force) self.view_template = Template(MODEL_VIEW) self.url_template = Template(MODEL_URL) + +class GenericViewSetGenerator(BaseGenerator): + + def __init__(self, app_config, force): + super(GenericViewSetGenerator, self).__init__(app_config, force) + self.view_template = Template(GENERIC_VIEW) + self.url_template = Template(GENERIC_URL) diff --git a/drf_generators/management/commands/generate.py b/drf_generators/management/commands/generate.py index 16999af..400d326 100644 --- a/drf_generators/management/commands/generate.py +++ b/drf_generators/management/commands/generate.py @@ -60,6 +60,8 @@ def handle_app_config(self, app_config, **options): generator = FunctionViewGenerator(app_config, force) elif fmt == 'modelviewset': generator = ModelViewSetGenerator(app_config, force) + elif fmt == 'genericviewset': + generator = GenericViewSetGenerator(app_config, force) else: message = '\'%s\' is not a valid format. ' % options['format'] message += '(viewset, modelviewset, apiview, function)' diff --git a/drf_generators/templates/genericviewset.py b/drf_generators/templates/genericviewset.py new file mode 100644 index 0000000..be43bb0 --- /dev/null +++ b/drf_generators/templates/genericviewset.py @@ -0,0 +1,42 @@ + +__all__ = ['GENERIC_URL', 'GENERIC_VIEW'] + + +GENERIC_URL = """from django.conf.urls import include, url +from {{ app }} import views + + +urlpatterns = [ +{% for model in models %} + url(r'^{{ model|lower }}/(?P[0-9]+)/$', views.{{ model }}Detail.as_view()), + url(r'^{{ model|lower }}/$', views.{{ model }}List.as_view()), +{% endfor %} +] +""" + + +GENERIC_VIEW = """from rest_framework.permissions import IsAuthenticated +from rest_framework import generics + +from {{ app }}.serializers import {{ serializers|join:', ' }} +from {{ app }}.models import {{ models|join:', ' }} +{% for model in models %} + +class {{ model }}List(generics.ListCreateAPIView): + + def get_queryset(self): + queryset = {{ model }}.objects.all() + return queryset + + permission_classes = ( IsAuthenticated,) + serializer_class = {{ model }}Serializer + +class {{ model }}Detail(generics.RetrieveUpdateDestroyAPIView): + + def get_queryset(self): + queryset = {{ model }}.objects.all() + return queryset + serializer_class = {{ model }}Serializer + permission_classes = ( IsAuthenticated,) + +{% endfor %}"""