diff --git a/requirements/base.in b/requirements/base.in index 7d7aeec6..9373601a 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -5,3 +5,4 @@ celery # Asynchronous task execution library Django # Web application framework django-model-utils>=2.0 # Provides TimeStampedModel abstract base class djangorestframework>=3.0.4 # REST API framework +drf_yasg diff --git a/requirements/base.txt b/requirements/base.txt index d1d1dcb6..389ea92b 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -14,6 +14,10 @@ celery==5.2.7 # via # -c requirements/constraints.txt # -r requirements/base.in +certifi==2022.6.15 + # via requests +charset-normalizer==2.1.0 + # via requests click==8.1.3 # via # celery @@ -26,29 +30,67 @@ click-plugins==1.1.1 # via celery click-repl==0.2.0 # via celery +coreapi==2.3.3 + # via drf-yasg +coreschema==0.0.4 + # via + # coreapi + # drf-yasg django==3.2.14 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.in # django-model-utils # djangorestframework + # drf-yasg django-model-utils==4.2.0 # via -r requirements/base.in djangorestframework==3.13.1 + # via + # -r requirements/base.in + # drf-yasg +drf-yasg==1.21.3 # via -r requirements/base.in +idna==3.3 + # via requests +inflection==0.5.1 + # via drf-yasg +itypes==1.2.0 + # via coreapi +jinja2==3.1.2 + # via coreschema kombu==5.2.4 # via celery +markupsafe==2.1.1 + # via jinja2 +packaging==21.3 + # via drf-yasg prompt-toolkit==3.0.30 # via click-repl +pyparsing==3.0.9 + # via packaging pytz==2022.1 # via # celery # django # djangorestframework + # drf-yasg +requests==2.28.1 + # via coreapi +ruamel-yaml==0.17.21 + # via drf-yasg +ruamel-yaml-clib==0.2.6 + # via ruamel-yaml six==1.16.0 # via click-repl sqlparse==0.4.2 # via django +uritemplate==4.1.1 + # via + # coreapi + # drf-yasg +urllib3==1.26.11 + # via requests vine==5.0.0 # via # amqp diff --git a/requirements/ci.txt b/requirements/ci.txt index f6b9a7c3..b94d76f5 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -33,9 +33,7 @@ pyparsing==3.0.9 requests==2.28.1 # via codecov six==1.16.0 - # via - # tox - # virtualenv + # via tox toml==0.10.2 # via tox tox==3.25.1 @@ -44,7 +42,7 @@ tox==3.25.1 # tox-battery tox-battery==0.6.1 # via -r requirements/ci.in -urllib3==1.26.10 +urllib3==1.26.11 # via requests -virtualenv==20.15.1 +virtualenv==20.16.2 # via tox diff --git a/requirements/dev.txt b/requirements/dev.txt index 560a256c..d87914a5 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -17,7 +17,7 @@ astroid==2.11.7 # -r requirements/quality.txt # pylint # pylint-celery -attrs==21.4.0 +attrs==22.1.0 # via # -r requirements/test.txt # pytest @@ -36,10 +36,12 @@ celery==5.2.7 certifi==2022.6.15 # via # -r requirements/ci.txt + # -r requirements/test.txt # requests charset-normalizer==2.1.0 # via # -r requirements/ci.txt + # -r requirements/test.txt # requests click==8.1.3 # via @@ -76,6 +78,15 @@ code-annotations==1.3.0 # edx-lint codecov==2.1.12 # via -r requirements/ci.txt +coreapi==2.3.3 + # via + # -r requirements/test.txt + # drf-yasg +coreschema==0.0.4 + # via + # -r requirements/test.txt + # coreapi + # drf-yasg coverage[toml]==6.4.2 # via # -r requirements/ci.txt @@ -96,10 +107,15 @@ django==3.2.14 # -r requirements/test.txt # django-model-utils # djangorestframework + # drf-yasg # edx-i18n-tools django-model-utils==4.2.0 # via -r requirements/test.txt djangorestframework==3.13.1 + # via + # -r requirements/test.txt + # drf-yasg +drf-yasg==1.21.3 # via -r requirements/test.txt edx-i18n-tools==0.9.1 # via -r requirements/dev.in @@ -115,7 +131,12 @@ filelock==3.7.1 idna==3.3 # via # -r requirements/ci.txt + # -r requirements/test.txt # requests +inflection==0.5.1 + # via + # -r requirements/test.txt + # drf-yasg iniconfig==1.1.1 # via # -r requirements/test.txt @@ -124,10 +145,16 @@ isort==5.10.1 # via # -r requirements/quality.txt # pylint +itypes==1.2.0 + # via + # -r requirements/test.txt + # coreapi jinja2==3.1.2 # via # -r requirements/quality.txt + # -r requirements/test.txt # code-annotations + # coreschema kombu==5.2.4 # via # -r requirements/test.txt @@ -139,6 +166,7 @@ lazy-object-proxy==1.7.1 markupsafe==2.1.1 # via # -r requirements/quality.txt + # -r requirements/test.txt # jinja2 mccabe==0.7.0 # via @@ -152,6 +180,7 @@ packaging==21.3 # -r requirements/pip-tools.txt # -r requirements/test.txt # build + # drf-yasg # pytest # tox path==16.4.0 @@ -160,7 +189,7 @@ pbr==5.9.0 # via # -r requirements/quality.txt # stevedore -pep517==0.12.0 +pep517==0.13.0 # via # -r requirements/pip-tools.txt # build @@ -190,7 +219,7 @@ py==1.11.0 # -r requirements/test.txt # pytest # tox -pycodestyle==2.8.0 +pycodestyle==2.9.0 # via -r requirements/quality.txt pydocstyle==6.1.1 # via -r requirements/quality.txt @@ -239,6 +268,7 @@ pytz==2022.1 # celery # django # djangorestframework + # drf-yasg pyyaml==5.4.1 # via # -c requirements/constraints.txt @@ -248,7 +278,17 @@ pyyaml==5.4.1 requests==2.28.1 # via # -r requirements/ci.txt + # -r requirements/test.txt # codecov + # coreapi +ruamel-yaml==0.17.21 + # via + # -r requirements/test.txt + # drf-yasg +ruamel-yaml-clib==0.2.6 + # via + # -r requirements/test.txt + # ruamel-yaml rules==3.3 # via -r requirements/test.txt six==1.16.0 @@ -259,7 +299,6 @@ six==1.16.0 # click-repl # edx-lint # tox - # virtualenv snowballstemmer==2.2.0 # via # -r requirements/quality.txt @@ -307,9 +346,10 @@ typing-extensions==4.3.0 # -r requirements/quality.txt # astroid # pylint -urllib3==1.26.10 +urllib3==1.26.11 # via # -r requirements/ci.txt + # -r requirements/test.txt # requests vine==5.0.0 # via @@ -317,7 +357,7 @@ vine==5.0.0 # amqp # celery # kombu -virtualenv==20.15.1 +virtualenv==20.16.2 # via # -r requirements/ci.txt # tox diff --git a/requirements/doc.txt b/requirements/doc.txt index 6a7ae18b..1c4cd4f6 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -14,7 +14,7 @@ asgiref==3.5.2 # via # -r requirements/base.txt # django -attrs==21.4.0 +attrs==22.1.0 # via jsonschema babel==2.10.3 # via sphinx @@ -31,11 +31,15 @@ celery==5.2.7 # -c requirements/constraints.txt # -r requirements/base.txt certifi==2022.6.15 - # via requests + # via + # -r requirements/base.txt + # requests cffi==1.15.1 # via cryptography charset-normalizer==2.1.0 - # via requests + # via + # -r requirements/base.txt + # requests click==8.1.3 # via # -r requirements/base.txt @@ -59,10 +63,15 @@ commonmark==0.9.1 # via rich coreapi==2.3.3 # via + # -r requirements/base.txt # django-rest-swagger + # drf-yasg # openapi-codec coreschema==0.0.4 - # via coreapi + # via + # -r requirements/base.txt + # coreapi + # drf-yasg cryptography==37.0.4 # via secretstorage django==3.2.14 @@ -71,6 +80,7 @@ django==3.2.14 # -r requirements/base.txt # django-model-utils # djangorestframework + # drf-yasg django-model-utils==4.2.0 # via -r requirements/base.txt django-rest-swagger==2.2.0 @@ -79,18 +89,22 @@ djangorestframework==3.13.1 # via # -r requirements/base.txt # django-rest-swagger -doc8==0.11.2 +doc8==1.0.0 # via -r requirements/doc.in -docutils==0.18.1 +docutils==0.19 # via # doc8 # readme-renderer # restructuredtext-lint # sphinx +drf-yasg==1.21.3 + # via -r requirements/base.txt edx-sphinx-theme==3.0.0 # via -r requirements/doc.in idna==3.3 - # via requests + # via + # -r requirements/base.txt + # requests imagesize==1.4.1 # via sphinx importlib-metadata==4.12.0 @@ -98,20 +112,27 @@ importlib-metadata==4.12.0 # keyring # sphinx # twine -importlib-resources==5.8.0 +importlib-resources==5.9.0 # via jsonschema +inflection==0.5.1 + # via + # -r requirements/base.txt + # drf-yasg itypes==1.2.0 - # via coreapi + # via + # -r requirements/base.txt + # coreapi jeepney==0.8.0 # via # keyring # secretstorage jinja2==3.1.2 # via + # -r requirements/base.txt # coreschema # sphinx # swagger2rst -jsonschema==4.7.2 +jsonschema==4.9.0 # via swagger2rst keyring==23.7.0 # via twine @@ -120,15 +141,22 @@ kombu==5.2.4 # -r requirements/base.txt # celery markupsafe==2.1.1 - # via jinja2 + # via + # -r requirements/base.txt + # jinja2 openapi-codec==1.3.2 # via django-rest-swagger packaging==21.3 - # via sphinx + # via + # -r requirements/base.txt + # drf-yasg + # sphinx pbr==5.9.0 # via stevedore pkginfo==1.8.3 # via twine +pkgutil-resolve-name==1.3.10 + # via jsonschema prompt-toolkit==3.0.30 # via # -r requirements/base.txt @@ -142,7 +170,9 @@ pygments==2.12.0 # rich # sphinx pyparsing==3.0.9 - # via packaging + # via + # -r requirements/base.txt + # packaging pyrsistent==0.18.1 # via jsonschema pytz==2022.1 @@ -152,6 +182,7 @@ pytz==2022.1 # celery # django # djangorestframework + # drf-yasg pyyaml==5.4.1 # via # -c requirements/constraints.txt @@ -160,6 +191,7 @@ readme-renderer==35.0 # via twine requests==2.28.1 # via + # -r requirements/base.txt # coreapi # requests-toolbelt # sphinx @@ -172,6 +204,14 @@ rfc3986==2.0.0 # via twine rich==12.5.1 # via twine +ruamel-yaml==0.17.21 + # via + # -r requirements/base.txt + # drf-yasg +ruamel-yaml-clib==0.2.6 + # via + # -r requirements/base.txt + # ruamel-yaml rules==3.3 # via -r requirements/doc.in secretstorage==3.3.2 @@ -186,7 +226,7 @@ six==1.16.0 # edx-sphinx-theme snowballstemmer==2.2.0 # via sphinx -sphinx==5.0.2 +sphinx==5.1.1 # via # -r requirements/doc.in # edx-sphinx-theme @@ -212,13 +252,15 @@ strict-rfc3339==0.7 # via swagger2rst swagger2rst==0.0.4 # via -r requirements/doc.in +tomli==2.0.1 + # via doc8 twine==4.0.1 # via -r requirements/doc.in typing-extensions==4.3.0 # via rich uritemplate==4.1.1 # via coreapi -urllib3==1.26.10 +urllib3==1.26.11 # via # requests # twine diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index f49a9d41..ebb8aa6a 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -10,7 +10,7 @@ click==8.1.3 # via pip-tools packaging==21.3 # via build -pep517==0.12.0 +pep517==0.13.0 # via build pip-tools==6.8.0 # via -r requirements/pip-tools.in diff --git a/requirements/pip.txt b/requirements/pip.txt index e0a3431e..031cb1d8 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -8,7 +8,7 @@ wheel==0.37.1 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==22.1.2 +pip==22.2.1 # via -r requirements/pip.in setuptools==59.8.0 # via diff --git a/requirements/quality.txt b/requirements/quality.txt index 52fc83db..a6ce733c 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -37,7 +37,7 @@ pbr==5.9.0 # via stevedore platformdirs==2.5.2 # via pylint -pycodestyle==2.8.0 +pycodestyle==2.9.0 # via -r requirements/quality.in pydocstyle==6.1.1 # via -r requirements/quality.in diff --git a/requirements/test.txt b/requirements/test.txt index cf166c5d..83d70f9f 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -11,7 +11,7 @@ asgiref==3.5.2 # via # -r requirements/base.txt # django -attrs==21.4.0 +attrs==22.1.0 # via pytest # via # -r requirements/base.txt @@ -19,6 +19,14 @@ attrs==21.4.0 # via # -c requirements/constraints.txt # -r requirements/base.txt +certifi==2022.6.15 + # via + # -r requirements/base.txt + # requests +charset-normalizer==2.1.0 + # via + # -r requirements/base.txt + # requests # via # -r requirements/base.txt # celery @@ -36,6 +44,15 @@ click-repl==0.2.0 # via # -r requirements/base.txt # celery +coreapi==2.3.3 + # via + # -r requirements/base.txt + # drf-yasg +coreschema==0.0.4 + # via + # -r requirements/base.txt + # coreapi + # drf-yasg coverage[toml]==6.4.2 # via pytest-cov # via @@ -43,19 +60,46 @@ coverage[toml]==6.4.2 # -r requirements/base.txt # django-model-utils # djangorestframework + # drf-yasg django-model-utils==4.2.0 # via -r requirements/base.txt + # via + # -r requirements/base.txt + # drf-yasg +drf-yasg==1.21.3 # via -r requirements/base.txt +idna==3.3 + # via + # -r requirements/base.txt + # requests +inflection==0.5.1 + # via + # -r requirements/base.txt + # drf-yasg iniconfig==1.1.1 # via pytest +itypes==1.2.0 + # via + # -r requirements/base.txt + # coreapi +jinja2==3.1.2 + # via + # -r requirements/base.txt + # coreschema # via # -r requirements/base.txt # celery +markupsafe==2.1.1 + # via + # -r requirements/base.txt + # jinja2 mock==4.0.3 # via -r requirements/test.in packaging==21.3 # via + # -r requirements/base.txt # -r requirements/test.in + # drf-yasg # pytest pluggy==1.0.0 # via pytest @@ -65,7 +109,9 @@ pluggy==1.0.0 py==1.11.0 # via pytest pyparsing==3.0.9 - # via packaging + # via + # -r requirements/base.txt + # packaging pytest==7.1.2 # via # pytest-cov @@ -80,6 +126,19 @@ pytz==2022.1 # celery # django # djangorestframework + # drf-yasg +requests==2.28.1 + # via + # -r requirements/base.txt + # coreapi +ruamel-yaml==0.17.21 + # via + # -r requirements/base.txt + # drf-yasg +ruamel-yaml-clib==0.2.6 + # via + # -r requirements/base.txt + # ruamel-yaml rules==3.3 # via -r requirements/test.in six==1.16.0 @@ -96,6 +155,15 @@ tomli==2.0.1 # via # coverage # pytest +uritemplate==4.1.1 + # via + # -r requirements/base.txt + # coreapi + # drf-yasg +urllib3==1.26.11 + # via + # -r requirements/base.txt + # requests # via # -r requirements/base.txt # amqp diff --git a/schema/settings.py b/schema/settings.py index fb9481fa..6e1a2020 100644 --- a/schema/settings.py +++ b/schema/settings.py @@ -10,7 +10,7 @@ INSTALLED_APPS += ( 'django.contrib.staticfiles', - 'rest_framework_swagger', + 'drf_yasg', ) MIDDLEWARE = ( diff --git a/schema/urls.py b/schema/urls.py index 93ed8a28..77bb4b71 100644 --- a/schema/urls.py +++ b/schema/urls.py @@ -2,15 +2,29 @@ URLs for REST API schema generation. """ +from drf_yasg import openapi +from drf_yasg.views import get_schema_view + from django.conf.urls import include, url from django.contrib import admin +from rest_framework import permissions + from user_tasks.urls import urlpatterns as base_patterns -from .views import swagger +SCHEMA = get_schema_view( + openapi.Info( + title="Django User Tasks API", + default_version='v1', + description="Django User Tasks API docs", + ), + public=False, + permission_classes=[permissions.AllowAny], +) # The Swagger/Open API JSON file can be found at http://localhost:8000/?format=openapi urlpatterns = [ url(r'^admin/', include(admin.site.urls)), - url('^$', swagger), + url(r'^swagger(?P\.json|\.yaml)$', SCHEMA.without_ui(cache_timeout=0), name='schema-json'), + url(r'^swagger/$', SCHEMA.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), ] + base_patterns