From a872eb66d670d078b3cab9618deeef6aa13d36f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristi=20V=C3=AEjdea?= Date: Mon, 17 Feb 2020 02:28:03 +0200 Subject: [PATCH] Add Django 3.0, DRF 3.11, drop Python 3.5, Django 2.1 --- .travis.yml | 1 - CONTRIBUTING.rst | 2 +- README.rst | 6 +++--- requirements/dev.txt | 1 + requirements/testproj.txt | 5 ++--- src/drf_yasg/utils.py | 5 ++++- testproj/testproj/settings/base.py | 10 ---------- .../migrations/0001_create_admin_user.py | 19 ++++++++++--------- tests/reference.yaml | 19 ++++++++++++------- tox.ini | 16 ++++++++-------- 10 files changed, 41 insertions(+), 43 deletions(-) diff --git a/.travis.yml b/.travis.yml index 57e57fa9..d23f2755 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: python python: - '2.7' - - '3.5' - '3.6' - '3.7' - '3.8' diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index a6afb164..cfa63e2c 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -57,7 +57,7 @@ You want to contribute some code? Great! Here are a few steps to get you started .. code:: console - (venv) $ python testproj/manage.py generate_swagger ../tests/reference.yaml --overwrite --user admin --url http://test.local:8002/ + (venv) $ python testproj/manage.py generate_swagger tests/reference.yaml --overwrite --user admin --url http://test.local:8002/ After checking the git diff to verify that no unexpected changes appeared, you should commit the new ``reference.yaml`` together with your changes. diff --git a/README.rst b/README.rst index f30f3167..639517e1 100644 --- a/README.rst +++ b/README.rst @@ -13,9 +13,9 @@ Generate **real** Swagger/OpenAPI 2.0 specifications from a Django Rest Framewor Compatible with -- **Django Rest Framework**: 3.8, 3.9, 3.10 -- **Django**: 1.11, 2.1, 2.2 -- **Python**: 2.7, 3.5, 3.6, 3.7, 3.8 +- **Django Rest Framework**: 3.8, 3.9, 3.10, 3.11 +- **Django**: 1.11, 2.2, 3.0 +- **Python**: 2.7, 3.6, 3.7, 3.8 Only the latest patch version of each ``major.minor`` series of Python, Django and Django REST Framework is supported. diff --git a/requirements/dev.txt b/requirements/dev.txt index 964a19d4..207d133e 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -4,3 +4,4 @@ -r lint.txt tox-battery>=0.5 +django-oauth-toolkit diff --git a/requirements/testproj.txt b/requirements/testproj.txt index 209a481f..92c9a718 100644 --- a/requirements/testproj.txt +++ b/requirements/testproj.txt @@ -2,9 +2,8 @@ Pillow>=4.3.0 django-filter>=1.1.0,<2.0; python_version == "2.7" django-filter>=1.1.0; python_version >= "3.5" -#djangorestframework-camel-case>=0.2.0 -# tempory replacement of broken lib --e git+https://github.com/tfranzel/djangorestframework-camel-case.git@bd556d38fa7382acadfe91d93d92d99c663248a9#egg=djangorestframework_camel_case +djangorestframework-camel-case>=1.1.2 djangorestframework-recursive>=0.1.2 dj-database-url>=0.4.2 user_agents>=1.1.0 +django-cors-headers diff --git a/src/drf_yasg/utils.py b/src/drf_yasg/utils.py index 5b36d621..b535fff9 100644 --- a/src/drf_yasg/utils.py +++ b/src/drf_yasg/utils.py @@ -481,7 +481,10 @@ def get_field_default(field): try: if hasattr(default, 'set_context'): default.set_context(field) - default = default() + if getattr(default, 'requires_context', False): + default = default(field) + else: + default = default() except Exception: # pragma: no cover logger.warning("default for %s is callable but it raised an exception when " "called; 'default' will not be set on schema", field, exc_info=True) diff --git a/testproj/testproj/settings/base.py b/testproj/testproj/settings/base.py index dcdb830b..30b4d2f1 100644 --- a/testproj/testproj/settings/base.py +++ b/testproj/testproj/settings/base.py @@ -193,16 +193,6 @@ 'propagate': False, }, 'django': { - 'handlers': ['console_log'], - 'level': 'DEBUG', - 'propagate': False, - }, - 'django.db.backends': { - 'handlers': ['console_log'], - 'level': 'INFO', - 'propagate': False, - }, - 'django.template': { 'handlers': ['console_log'], 'level': 'INFO', 'propagate': False, diff --git a/testproj/users/migrations/0001_create_admin_user.py b/testproj/users/migrations/0001_create_admin_user.py index b59ee214..a0436ba8 100644 --- a/testproj/users/migrations/0001_create_admin_user.py +++ b/testproj/users/migrations/0001_create_admin_user.py @@ -3,7 +3,7 @@ from django.conf import settings from django.contrib.auth.hashers import make_password -from django.db import migrations, IntegrityError +from django.db import migrations, IntegrityError, transaction def add_default_user(apps, schema_editor): @@ -13,14 +13,15 @@ def add_default_user(apps, schema_editor): User = apps.get_model(settings.AUTH_USER_MODEL) try: - admin = User( - username=username, - email=email, - password=make_password(password), - is_superuser=True, - is_staff=True - ) - admin.save() + with transaction.atomic(): + admin = User( + username=username, + email=email, + password=make_password(password), + is_superuser=True, + is_staff=True + ) + admin.save() except IntegrityError: sys.stdout.write(" User '%s <%s>' already exists..." % (username, email)) else: diff --git a/tests/reference.yaml b/tests/reference.yaml index 9b9b8a60..2ef4d24d 100644 --- a/tests/reference.yaml +++ b/tests/reference.yaml @@ -1,11 +1,14 @@ swagger: '2.0' info: title: Snippets API - description: "This is a demo project for the [drf-yasg](https://github.com/axnsan12/drf-yasg)\ - \ Django Rest Framework library.\n\nThe `swagger-ui` view can be found [here](/cached/swagger).\ - \nThe `ReDoc` view can be found [here](/cached/redoc).\nThe swagger YAML\ - \ document can be found [here](/cached/swagger.yaml).\n\nYou can log in using\ - \ the pre-existing `admin` user with password `passwordadmin`." + description: |- + This is a demo project for the [drf-yasg](https://github.com/axnsan12/drf-yasg) Django Rest Framework library. + + The `swagger-ui` view can be found [here](/cached/swagger). + The `ReDoc` view can be found [here](/cached/redoc). + The swagger YAML document can be found [here](/cached/swagger.yaml). + + You can log in using the pre-existing `admin` user with password `passwordadmin`. termsOfService: https://www.google.com/policies/terms/ contact: email: contact@snippets.local @@ -1502,7 +1505,9 @@ definitions: readOnly: true help_text_example_3: title: Help text example 3 - description: "\n docstring is set so should appear in swagger as fallback\n\ - \ :return:\n " + description: |2 + + docstring is set so should appear in swagger as fallback + :return: type: integer readOnly: true diff --git a/tox.ini b/tox.ini index d357f42b..58e95926 100644 --- a/tox.ini +++ b/tox.ini @@ -7,9 +7,9 @@ isolated_build_env = .package envlist = py27-django111-drf39-typing, py27-django111-drf{38,39}, - py{35,36}-django{111,21,22}-drf{38,39}, - py37-django{21,22}-drf{38,39,310}, - py38-django22-drf310, + py36-django{111,22}-drf{38,39}, + py37-django22-drf{38,39,310,311}, + py38-django{22,3}-drf{310,311}, djmaster, lint, docs skip_missing_interpreters = true @@ -20,21 +20,21 @@ deps = [testenv] deps = django111: Django>=1.11,<2.0 - django111: django-cors-headers>=2.1.0 django111: django-oauth-toolkit>=1.1.0,<1.2.0 django21: Django>=2.1,<2.2 - django21: django-cors-headers>=2.1.0 django21: django-oauth-toolkit>=1.2.0 django22: Django>=2.2,<2.3 - django22: django-cors-headers>=2.1.0 - django22: django-oauth-toolkit>=1.2.0 + django21: django-oauth-toolkit>=1.2.0 + django3: Django>=2.2,<2.3 + django21: django-oauth-toolkit>=1.2.0 drf38: djangorestframework>=3.8,<3.9 drf39: djangorestframework>=3.9,<3.10 - drf310: djangorestframework>=3.10 + drf310: djangorestframework>=3.10,<3.11 + drf311: djangorestframework>=3.11,<3.12 typing: typing>=3.6.6