Drop old Python and Django versions (#220)
* drop old python and django versions * fix tests * remove compat module entirely Co-authored-by: Fabio Caccamo <fabio.caccamo@gmail.com>master
parent
333025f877
commit
d62593e01b
|
|
@ -19,9 +19,6 @@ jobs:
|
|||
id: create_matrix
|
||||
with:
|
||||
matrix: |
|
||||
python-version {2.7}, django-version {1.8,1.9,1.10,1.11}, database {sqlite,postgres}
|
||||
python-version {3.6}, django-version {1.8,1.9,1.10,1.11,2.0,2.1,2.2,3.0,3.1,3.2}, database {sqlite,postgres}
|
||||
python-version {3.7}, django-version {2.0,2.1,2.2,3.0,3.1,3.2}, database {sqlite,postgres}
|
||||
python-version {3.8}, django-version {2.2,3.0,3.1,3.2}, database {sqlite,postgres}
|
||||
python-version {3.9}, django-version {2.2,3.0,3.1,3.2}, database {sqlite,postgres}
|
||||
python-version {3.10}, django-version {3.2,4.0,4.1}, database {sqlite,postgres}
|
||||
|
|
|
|||
|
|
@ -47,20 +47,17 @@ django-admin-interface is a modern **responsive flat admin interface customizabl
|
|||
|
||||
## Installation
|
||||
- Run `pip install django-admin-interface`
|
||||
- Add `admin_interface`, `flat_responsive`, `flat` and `colorfield` to `settings.INSTALLED_APPS` **before** `django.contrib.admin`
|
||||
- Add `admin_interface` and `colorfield` to `settings.INSTALLED_APPS` **before** `django.contrib.admin`
|
||||
```python
|
||||
INSTALLED_APPS = (
|
||||
#...
|
||||
"admin_interface",
|
||||
"flat_responsive", # only if django version < 2.0
|
||||
"flat", # only if django version < 1.9
|
||||
"colorfield",
|
||||
#...
|
||||
"django.contrib.admin",
|
||||
#...
|
||||
)
|
||||
|
||||
# only if django version >= 3.0
|
||||
X_FRAME_OPTIONS = "SAMEORIGIN"
|
||||
SILENCED_SYSTEM_CHECKS = ["security.W019"]
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.contrib import admin
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from admin_interface.compat import gettext_lazy as _
|
||||
from admin_interface.models import Theme
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.apps import AppConfig
|
||||
from django.db.models.signals import post_migrate
|
||||
|
||||
from admin_interface.compat import gettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class AdminInterfaceConfig(AppConfig):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache, caches
|
||||
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import django
|
||||
|
||||
if django.VERSION >= (1, 11):
|
||||
from django.core.validators import FileExtensionValidator
|
||||
else:
|
||||
|
||||
def FileExtensionValidator(*args, **kwargs):
|
||||
def noop(*args, **kwargs):
|
||||
pass
|
||||
|
||||
return noop
|
||||
|
||||
|
||||
if django.VERSION < (1, 10):
|
||||
from django.core.urlresolvers import NoReverseMatch, reverse
|
||||
else:
|
||||
from django.urls import NoReverseMatch, reverse
|
||||
|
||||
if django.VERSION < (2, 0):
|
||||
from django.utils.encoding import force_text as force_str
|
||||
from django.utils.translation import ugettext_lazy as gettext_lazy
|
||||
else:
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.translation import gettext_lazy
|
||||
|
|
@ -2,10 +2,9 @@
|
|||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.core.validators import FileExtensionValidator
|
||||
from django.db import migrations, models
|
||||
|
||||
from admin_interface.compat import FileExtensionValidator
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,13 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from colorfield.fields import ColorField
|
||||
from django.core.validators import FileExtensionValidator
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_delete, post_save, pre_save
|
||||
from six import python_2_unicode_compatible
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from admin_interface.cache import del_cached_active_theme
|
||||
from admin_interface.compat import FileExtensionValidator, force_str
|
||||
from admin_interface.compat import gettext_lazy as _
|
||||
from .cache import del_cached_active_theme
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Theme(models.Model):
|
||||
@staticmethod
|
||||
def post_migrate_handler(**kwargs):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import django
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
|
@ -29,5 +27,3 @@ def check_installed_app(app, max_dj_version=None):
|
|||
|
||||
def check_installed_apps():
|
||||
check_installed_app("colorfield")
|
||||
check_installed_app("flat", max_dj_version=(1, 9))
|
||||
check_installed_app("flat_responsive", max_dj_version=(2, 0))
|
||||
|
|
|
|||
|
|
@ -42,10 +42,6 @@
|
|||
if (typeof(openerRef.dismissAddRelatedObjectPopup) === 'function') {
|
||||
openerRef.dismissAddRelatedObjectPopup(windowRef, initData.value, initData.obj);
|
||||
}
|
||||
else if (typeof(openerRef.dismissAddAnotherPopup) === 'function') {
|
||||
// django 1.7 compatibility
|
||||
openerRef.dismissAddAnotherPopup(windowRef, initData.value, initData.obj);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
|
|||
}
|
||||
}
|
||||
|
||||
// fix for django 1.7
|
||||
// fix for django 1.7 TODO remove
|
||||
if (iframeSrc.indexOf('_popup=1') === -1) {
|
||||
if (iframeSrc.indexOf('?') === -1) {
|
||||
iframeSrc += '?_popup=1';
|
||||
|
|
@ -135,10 +135,6 @@ if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
|
|||
window.presentRelatedObjectModal = presentRelatedObjectModal;
|
||||
window.presentRelatedObjectModalOnClickOn = presentRelatedObjectModalOnClickOn;
|
||||
|
||||
// django 1.7 compatibility
|
||||
presentRelatedObjectModalOnClickOn('a.add-another');
|
||||
|
||||
// django 1.8 and above
|
||||
presentRelatedObjectModalOnClickOn('a.related-widget-wrapper-link');
|
||||
|
||||
// raw_id_fields support
|
||||
|
|
|
|||
|
|
@ -1,28 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import hashlib
|
||||
import re
|
||||
|
||||
import django
|
||||
from django import template
|
||||
from django.conf import settings
|
||||
from django.template.loader import get_template
|
||||
from django.urls import NoReverseMatch, reverse
|
||||
from django.utils import translation
|
||||
|
||||
from admin_interface.cache import get_cached_active_theme, set_cached_active_theme
|
||||
from admin_interface.compat import NoReverseMatch, reverse
|
||||
from admin_interface.models import Theme
|
||||
from admin_interface.version import __version__
|
||||
|
||||
register = template.Library()
|
||||
|
||||
if django.VERSION < (1, 9):
|
||||
simple_tag = register.assignment_tag
|
||||
else:
|
||||
simple_tag = register.simple_tag
|
||||
|
||||
|
||||
@simple_tag(takes_context=True)
|
||||
@register.simple_tag(takes_context=True)
|
||||
def get_admin_interface_languages(context):
|
||||
if not settings.USE_I18N:
|
||||
# i18n disabled
|
||||
|
|
@ -65,7 +57,7 @@ def get_admin_interface_languages(context):
|
|||
return langs_data
|
||||
|
||||
|
||||
@simple_tag()
|
||||
@register.simple_tag()
|
||||
def get_admin_interface_theme():
|
||||
theme = get_cached_active_theme()
|
||||
if not theme:
|
||||
|
|
@ -74,20 +66,20 @@ def get_admin_interface_theme():
|
|||
return theme
|
||||
|
||||
|
||||
@simple_tag()
|
||||
@register.simple_tag()
|
||||
def get_admin_interface_setting(setting):
|
||||
theme = get_admin_interface_theme()
|
||||
return getattr(theme, setting)
|
||||
|
||||
|
||||
@simple_tag()
|
||||
@register.simple_tag()
|
||||
def get_admin_interface_inline_template(template):
|
||||
template_path = template.split("/")
|
||||
template_path[-1] = "headerless_" + template_path[-1]
|
||||
return "/".join(template_path)
|
||||
|
||||
|
||||
@simple_tag(takes_context=False)
|
||||
@register.simple_tag()
|
||||
def get_admin_interface_version():
|
||||
return __version__
|
||||
|
||||
|
|
@ -98,17 +90,17 @@ def hash_string(text):
|
|||
return sha224_hash
|
||||
|
||||
|
||||
@simple_tag(takes_context=False)
|
||||
@register.simple_tag()
|
||||
def get_admin_interface_nocache():
|
||||
return hash_string(__version__)
|
||||
|
||||
|
||||
@simple_tag()
|
||||
@register.simple_tag()
|
||||
def admin_interface_clear_filter_qs(changelist, list_filter):
|
||||
return changelist.get_query_string(remove=list_filter.expected_parameters())
|
||||
|
||||
|
||||
@simple_tag()
|
||||
@register.simple_tag()
|
||||
def admin_interface_filter_removal_link(changelist, list_filter):
|
||||
template = get_template("admin_interface/list_filter_removal_link.html")
|
||||
title = list_filter.title
|
||||
|
|
@ -130,7 +122,7 @@ def admin_interface_filter_removal_link(changelist, list_filter):
|
|||
)
|
||||
|
||||
|
||||
@simple_tag()
|
||||
@register.simple_tag()
|
||||
def admin_interface_use_changeform_tabs(adminform, inline_forms):
|
||||
theme = get_admin_interface_theme()
|
||||
has_fieldset_tabs = theme.show_fieldsets_as_tabs and len(adminform.fieldsets) > 1
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
__version__ = "0.23.0"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
|
|
|||
23
setup.py
23
setup.py
|
|
@ -1,6 +1,4 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
|
@ -18,10 +16,7 @@ long_description_file_path = os.path.join(package_path, "README.md")
|
|||
long_description_content_type = "text/markdown"
|
||||
long_description = ""
|
||||
try:
|
||||
long_description_file_options = (
|
||||
{} if sys.version_info[0] < 3 else {"encoding": "utf-8"}
|
||||
)
|
||||
with open(long_description_file_path, "r", **long_description_file_options) as f:
|
||||
with open(long_description_file_path, "r", encoding="utf-8") as f:
|
||||
long_description = f.read()
|
||||
except IOError:
|
||||
pass
|
||||
|
|
@ -54,7 +49,6 @@ setup(
|
|||
"custom",
|
||||
"ui",
|
||||
],
|
||||
requires=["django(>=1.7)"],
|
||||
install_requires=[
|
||||
"django-colorfield >= 0.2, < 1.0",
|
||||
"django-flat-theme >= 1.0, < 2.0",
|
||||
|
|
@ -65,13 +59,6 @@ setup(
|
|||
"Development Status :: 5 - Production/Stable",
|
||||
"Environment :: Web Environment",
|
||||
"Framework :: Django",
|
||||
"Framework :: Django :: 1.7",
|
||||
"Framework :: Django :: 1.8",
|
||||
"Framework :: Django :: 1.9",
|
||||
"Framework :: Django :: 1.10",
|
||||
"Framework :: Django :: 1.11",
|
||||
"Framework :: Django :: 2.0",
|
||||
"Framework :: Django :: 2.1",
|
||||
"Framework :: Django :: 2.2",
|
||||
"Framework :: Django :: 3.0",
|
||||
"Framework :: Django :: 3.1",
|
||||
|
|
@ -82,19 +69,13 @@ setup(
|
|||
"License :: OSI Approved :: MIT License",
|
||||
"Natural Language :: English",
|
||||
"Operating System :: OS Independent",
|
||||
"Programming Language :: Python :: 2",
|
||||
"Programming Language :: Python :: 2.7",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.4",
|
||||
"Programming Language :: Python :: 3.5",
|
||||
"Programming Language :: Python :: 3.6",
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Topic :: Software Development :: Build Tools",
|
||||
],
|
||||
license="MIT",
|
||||
test_suite="runtests.runtests",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
import django
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
SECRET_KEY = "django-admin-interface"
|
||||
|
|
@ -18,17 +12,6 @@ INSTALLED_APPS = [
|
|||
"colorfield",
|
||||
]
|
||||
|
||||
if django.VERSION < (1, 9):
|
||||
# ONLY if django version < 1.9
|
||||
INSTALLED_APPS += [
|
||||
"flat",
|
||||
]
|
||||
|
||||
if django.VERSION < (2, 0):
|
||||
# ONLY if django version < 2.0
|
||||
INSTALLED_APPS += [
|
||||
"flat_responsive",
|
||||
]
|
||||
|
||||
INSTALLED_APPS += [
|
||||
"django.contrib.admin",
|
||||
|
|
@ -38,20 +21,12 @@ INSTALLED_APPS += [
|
|||
"django.contrib.sessions",
|
||||
]
|
||||
|
||||
if django.VERSION < (2, 0):
|
||||
MIDDLEWARE_CLASSES = [
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
]
|
||||
else:
|
||||
MIDDLEWARE = [
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
]
|
||||
MIDDLEWARE = [
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
]
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.test import TestCase
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import random
|
||||
import shutil
|
||||
from unittest import expectedFailure
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
from unittest import skipIf
|
||||
|
||||
from django import VERSION
|
||||
from django.test import TestCase
|
||||
|
||||
from admin_interface.models import Theme
|
||||
|
|
@ -24,9 +23,6 @@ class AdminInterfaceModelsWithDBRoutingTestCase(TestCase):
|
|||
db_for_theme = router.db_for_read(Theme)
|
||||
assert db_for_theme == "replica"
|
||||
|
||||
@skipIf(
|
||||
VERSION[0] < 2, "TestCase does not respect database param on older versions"
|
||||
)
|
||||
def test_dbrouter_errors_when_fetching_from_default(self):
|
||||
with self.assertRaises(Exception):
|
||||
Theme.get_active_theme()
|
||||
|
|
|
|||
|
|
@ -1,8 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import django
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.test import TestCase, override_settings
|
||||
|
|
@ -27,24 +22,10 @@ class AdminInterfaceSettingsTestCase(TestCase):
|
|||
pass
|
||||
|
||||
def __test_installed_apps(self):
|
||||
dj_version = django.VERSION
|
||||
installed_apps = settings.INSTALLED_APPS
|
||||
|
||||
if "colorfield" not in installed_apps:
|
||||
self.assertRaises(ImproperlyConfigured, check_installed_apps)
|
||||
|
||||
elif "flat" not in installed_apps and dj_version < (1, 9):
|
||||
self.assertRaises(ImproperlyConfigured, check_installed_apps)
|
||||
|
||||
elif "flat" in installed_apps and dj_version >= (1, 9):
|
||||
self.assertRaises(ImproperlyConfigured, check_installed_apps)
|
||||
|
||||
elif "flat_responsive" not in installed_apps and dj_version < (2, 0):
|
||||
self.assertRaises(ImproperlyConfigured, check_installed_apps)
|
||||
|
||||
elif "flat_responsive" in installed_apps and dj_version >= (2, 0):
|
||||
self.assertRaises(ImproperlyConfigured, check_installed_apps)
|
||||
|
||||
else:
|
||||
check_installed_apps()
|
||||
|
||||
|
|
@ -52,8 +33,6 @@ class AdminInterfaceSettingsTestCase(TestCase):
|
|||
INSTALLED_APPS=[
|
||||
"admin_interface",
|
||||
"colorfield",
|
||||
"flat",
|
||||
"flat_responsive",
|
||||
]
|
||||
+ DJANGO_APPS
|
||||
)
|
||||
|
|
@ -64,34 +43,8 @@ class AdminInterfaceSettingsTestCase(TestCase):
|
|||
INSTALLED_APPS=[
|
||||
"admin_interface",
|
||||
# 'colorfield',
|
||||
"flat",
|
||||
"flat_responsive",
|
||||
]
|
||||
+ DJANGO_APPS
|
||||
)
|
||||
def test_installed_apps_no_colorfield(self):
|
||||
self.__test_installed_apps()
|
||||
|
||||
@override_settings(
|
||||
INSTALLED_APPS=[
|
||||
"admin_interface",
|
||||
"colorfield",
|
||||
# 'flat',
|
||||
"flat_responsive",
|
||||
]
|
||||
+ DJANGO_APPS
|
||||
)
|
||||
def test_installed_apps_no_flat(self):
|
||||
self.__test_installed_apps()
|
||||
|
||||
@override_settings(
|
||||
INSTALLED_APPS=[
|
||||
"admin_interface",
|
||||
"colorfield",
|
||||
"flat",
|
||||
# 'flat_responsive',
|
||||
]
|
||||
+ DJANGO_APPS
|
||||
)
|
||||
def test_installed_apps_no_flat_responsive(self):
|
||||
self.__test_installed_apps()
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.template import Context, Template
|
||||
from django.test import TestCase, override_settings
|
||||
from django.test.client import RequestFactory
|
||||
|
|
|
|||
|
|
@ -1,22 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import django
|
||||
from django.contrib import admin
|
||||
|
||||
if django.VERSION < (2, 0):
|
||||
from django.conf.urls import include
|
||||
from django.conf.urls import url as re_path
|
||||
else:
|
||||
from django.urls import include, re_path
|
||||
|
||||
from django.conf.urls.i18n import i18n_patterns
|
||||
from django.contrib import admin
|
||||
from django.urls import include, path
|
||||
|
||||
urlpatterns = []
|
||||
urlpatterns += [
|
||||
re_path(r"^i18n/", include("django.conf.urls.i18n")),
|
||||
path("i18n/", include("django.conf.urls.i18n")),
|
||||
]
|
||||
urlpatterns += i18n_patterns(
|
||||
re_path(r"^admin/", admin.site.urls),
|
||||
path("admin/", admin.site.urls),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,16 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import django
|
||||
from django.contrib import admin
|
||||
|
||||
if django.VERSION < (2, 0):
|
||||
from django.conf.urls import url as re_path
|
||||
else:
|
||||
from django.urls import re_path
|
||||
|
||||
from django.urls import path
|
||||
|
||||
urlpatterns = [
|
||||
re_path(r"^admin/", admin.site.urls),
|
||||
path("admin/", admin.site.urls),
|
||||
]
|
||||
|
|
|
|||
13
tox.ini
13
tox.ini
|
|
@ -1,8 +1,5 @@
|
|||
[tox]
|
||||
envlist =
|
||||
py27-{dj17,dj18,dj19,dj110,dj111}-{sqlite,postgres},
|
||||
py36-{dj18,dj19,dj110,dj111,dj20,dj21,dj22,dj30,dj31,dj32}-{sqlite,postgres},
|
||||
py37-{dj20,dj21,dj22,dj30,dj31,dj32}-{sqlite,postgres},
|
||||
py38-{dj22,dj30,dj31,dj32}-{sqlite,postgres},
|
||||
py39-{dj22,dj30,dj31,dj32}-{sqlite,postgres},
|
||||
py310-{dj32,dj40,dj41}-{sqlite,postgres},
|
||||
|
|
@ -10,9 +7,6 @@ envlist =
|
|||
|
||||
[gh-actions]
|
||||
python =
|
||||
2.7: py27
|
||||
3.6: py36
|
||||
3.7: py37
|
||||
3.8: py38
|
||||
3.9: py39
|
||||
3.10: py310
|
||||
|
|
@ -21,13 +15,6 @@ python =
|
|||
[testenv]
|
||||
passenv = CI GITHUB_WORKFLOW
|
||||
deps =
|
||||
dj17: Django == 1.7.*
|
||||
dj18: Django == 1.8.*
|
||||
dj19: Django == 1.9.*
|
||||
dj110: Django == 1.10.*
|
||||
dj111: Django == 1.11.*
|
||||
dj20: Django == 2.0.*
|
||||
dj21: Django == 2.1.*
|
||||
dj22: Django == 2.2.*
|
||||
dj30: Django == 3.0.*
|
||||
dj31: Django == 3.1.*
|
||||
|
|
|
|||
Loading…
Reference in New Issue