Add Django 3.0, DRF 3.11, drop Python 3.5, Django 2.1

master
Cristi Vîjdea 2020-02-17 02:28:03 +02:00
parent 6a1166deb5
commit a872eb66d6
10 changed files with 41 additions and 43 deletions

View File

@ -1,7 +1,6 @@
language: python language: python
python: python:
- '2.7' - '2.7'
- '3.5'
- '3.6' - '3.6'
- '3.7' - '3.7'
- '3.8' - '3.8'

View File

@ -57,7 +57,7 @@ You want to contribute some code? Great! Here are a few steps to get you started
.. code:: console .. 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 After checking the git diff to verify that no unexpected changes appeared, you should commit the new
``reference.yaml`` together with your changes. ``reference.yaml`` together with your changes.

View File

@ -13,9 +13,9 @@ Generate **real** Swagger/OpenAPI 2.0 specifications from a Django Rest Framewor
Compatible with Compatible with
- **Django Rest Framework**: 3.8, 3.9, 3.10 - **Django Rest Framework**: 3.8, 3.9, 3.10, 3.11
- **Django**: 1.11, 2.1, 2.2 - **Django**: 1.11, 2.2, 3.0
- **Python**: 2.7, 3.5, 3.6, 3.7, 3.8 - **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. Only the latest patch version of each ``major.minor`` series of Python, Django and Django REST Framework is supported.

View File

@ -4,3 +4,4 @@
-r lint.txt -r lint.txt
tox-battery>=0.5 tox-battery>=0.5
django-oauth-toolkit

View File

@ -2,9 +2,8 @@
Pillow>=4.3.0 Pillow>=4.3.0
django-filter>=1.1.0,<2.0; python_version == "2.7" django-filter>=1.1.0,<2.0; python_version == "2.7"
django-filter>=1.1.0; python_version >= "3.5" django-filter>=1.1.0; python_version >= "3.5"
#djangorestframework-camel-case>=0.2.0 djangorestframework-camel-case>=1.1.2
# tempory replacement of broken lib
-e git+https://github.com/tfranzel/djangorestframework-camel-case.git@bd556d38fa7382acadfe91d93d92d99c663248a9#egg=djangorestframework_camel_case
djangorestframework-recursive>=0.1.2 djangorestframework-recursive>=0.1.2
dj-database-url>=0.4.2 dj-database-url>=0.4.2
user_agents>=1.1.0 user_agents>=1.1.0
django-cors-headers

View File

@ -481,7 +481,10 @@ def get_field_default(field):
try: try:
if hasattr(default, 'set_context'): if hasattr(default, 'set_context'):
default.set_context(field) default.set_context(field)
default = default() if getattr(default, 'requires_context', False):
default = default(field)
else:
default = default()
except Exception: # pragma: no cover except Exception: # pragma: no cover
logger.warning("default for %s is callable but it raised an exception when " 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) "called; 'default' will not be set on schema", field, exc_info=True)

View File

@ -193,16 +193,6 @@ LOGGING = {
'propagate': False, 'propagate': False,
}, },
'django': { 'django': {
'handlers': ['console_log'],
'level': 'DEBUG',
'propagate': False,
},
'django.db.backends': {
'handlers': ['console_log'],
'level': 'INFO',
'propagate': False,
},
'django.template': {
'handlers': ['console_log'], 'handlers': ['console_log'],
'level': 'INFO', 'level': 'INFO',
'propagate': False, 'propagate': False,

View File

@ -3,7 +3,7 @@ import sys
from django.conf import settings from django.conf import settings
from django.contrib.auth.hashers import make_password 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): 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) User = apps.get_model(settings.AUTH_USER_MODEL)
try: try:
admin = User( with transaction.atomic():
username=username, admin = User(
email=email, username=username,
password=make_password(password), email=email,
is_superuser=True, password=make_password(password),
is_staff=True is_superuser=True,
) is_staff=True
admin.save() )
admin.save()
except IntegrityError: except IntegrityError:
sys.stdout.write(" User '%s <%s>' already exists..." % (username, email)) sys.stdout.write(" User '%s <%s>' already exists..." % (username, email))
else: else:

View File

@ -1,11 +1,14 @@
swagger: '2.0' swagger: '2.0'
info: info:
title: Snippets API title: Snippets API
description: "This is a demo project for the [drf-yasg](https://github.com/axnsan12/drf-yasg)\ description: |-
\ Django Rest Framework library.\n\nThe `swagger-ui` view can be found [here](/cached/swagger).\ This is a demo project for the [drf-yasg](https://github.com/axnsan12/drf-yasg) Django Rest Framework library.
\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 `swagger-ui` view can be found [here](/cached/swagger).
\ the pre-existing `admin` user with password `passwordadmin`." 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/ termsOfService: https://www.google.com/policies/terms/
contact: contact:
email: contact@snippets.local email: contact@snippets.local
@ -1502,7 +1505,9 @@ definitions:
readOnly: true readOnly: true
help_text_example_3: help_text_example_3:
title: Help text example 3 title: Help text example 3
description: "\n docstring is set so should appear in swagger as fallback\n\ description: |2
\ :return:\n "
docstring is set so should appear in swagger as fallback
:return:
type: integer type: integer
readOnly: true readOnly: true

16
tox.ini
View File

@ -7,9 +7,9 @@ isolated_build_env = .package
envlist = envlist =
py27-django111-drf39-typing, py27-django111-drf39-typing,
py27-django111-drf{38,39}, py27-django111-drf{38,39},
py{35,36}-django{111,21,22}-drf{38,39}, py36-django{111,22}-drf{38,39},
py37-django{21,22}-drf{38,39,310}, py37-django22-drf{38,39,310,311},
py38-django22-drf310, py38-django{22,3}-drf{310,311},
djmaster, lint, docs djmaster, lint, docs
skip_missing_interpreters = true skip_missing_interpreters = true
@ -20,21 +20,21 @@ deps =
[testenv] [testenv]
deps = deps =
django111: Django>=1.11,<2.0 django111: Django>=1.11,<2.0
django111: django-cors-headers>=2.1.0
django111: django-oauth-toolkit>=1.1.0,<1.2.0 django111: django-oauth-toolkit>=1.1.0,<1.2.0
django21: Django>=2.1,<2.2 django21: Django>=2.1,<2.2
django21: django-cors-headers>=2.1.0
django21: django-oauth-toolkit>=1.2.0 django21: django-oauth-toolkit>=1.2.0
django22: Django>=2.2,<2.3 django22: Django>=2.2,<2.3
django22: django-cors-headers>=2.1.0 django21: django-oauth-toolkit>=1.2.0
django22: 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 drf38: djangorestframework>=3.8,<3.9
drf39: djangorestframework>=3.9,<3.10 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 typing: typing>=3.6.6