From 4b2c6f8e020430e951c66d164cec0cdd9a2a01a1 Mon Sep 17 00:00:00 2001 From: Hasan Ramezani Date: Sun, 22 Nov 2020 23:07:36 +0100 Subject: [PATCH] Drop Python2.7 support. --- .travis.yml | 1 - README.rst | 6 +++++- defender/connection.py | 9 +++------ .../management/commands/cleanup_django_defender.py | 1 - defender/middleware.py | 2 +- defender/migrations/0001_initial.py | 3 --- defender/models.py | 10 ---------- defender/south_migrations/0001_initial.py | 1 - defender/test.py | 2 +- defender/tests.py | 7 +------ requirements.txt | 1 - setup.py | 6 +++--- tox.ini | 4 +--- 13 files changed, 15 insertions(+), 38 deletions(-) diff --git a/.travis.yml b/.travis.yml index e3bce4c..7d513b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: python dist: xenial cache: pip python: -- '2.7' - '3.5' - '3.6' - '3.7' diff --git a/README.rst b/README.rst index eed1a3b..7921768 100644 --- a/README.rst +++ b/README.rst @@ -6,6 +6,10 @@ django-defender :target: https://jazzband.co/ :alt: Jazzband +.. image:: https://img.shields.io/pypi/pyversions/django-defender.svg + :alt: Supported Python versions + :target: https://pypi.org/project/django-defender/ + .. image:: https://travis-ci.org/jazzband/django-defender.svg :target: https://travis-ci.org/jazzband/django-defender :alt: Build Status @@ -100,7 +104,7 @@ Admin pages Requirements ------------ -* Python: 2.7, 3.5, 3.6, 3.7, 3.8, PyPy +* Python: 3.5, 3.6, 3.7, 3.8, PyPy * Django: 1.11, 2.1, 2.2, 3.x * Redis diff --git a/defender/connection.py b/defender/connection.py index 55c64c6..7d6b2a1 100644 --- a/defender/connection.py +++ b/defender/connection.py @@ -1,12 +1,9 @@ -from django.core.cache import caches -from django.core.cache.backends.base import InvalidCacheBackendError +import urllib.parse as urlparse import redis -try: - import urlparse -except ImportError: # pragma: no cover - import urllib.parse as urlparse # pragma: no cover # Python3 # pylint: disable=import-error,no-name-in-module,line-too-long +from django.core.cache import caches +from django.core.cache.backends.base import InvalidCacheBackendError from . import config diff --git a/defender/management/commands/cleanup_django_defender.py b/defender/management/commands/cleanup_django_defender.py index 12af5d2..9168ab1 100644 --- a/defender/management/commands/cleanup_django_defender.py +++ b/defender/management/commands/cleanup_django_defender.py @@ -1,4 +1,3 @@ -from __future__ import print_function from datetime import timedelta from django.core.management.base import BaseCommand diff --git a/defender/middleware.py b/defender/middleware.py index f6ef56b..914c5af 100644 --- a/defender/middleware.py +++ b/defender/middleware.py @@ -14,7 +14,7 @@ class FailedLoginMiddleware(MIDDLEWARE_BASE_CLASS): patched = False def __init__(self, *args, **kwargs): - super(FailedLoginMiddleware, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # Watch the auth login. # Monkey-patch only once - otherwise we would be recording # failed attempts multiple times! diff --git a/defender/migrations/0001_initial.py b/defender/migrations/0001_initial.py index 195a541..0d1bba7 100644 --- a/defender/migrations/0001_initial.py +++ b/defender/migrations/0001_initial.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/defender/models.py b/defender/models.py index d5377f8..1dd8398 100644 --- a/defender/models.py +++ b/defender/models.py @@ -1,16 +1,6 @@ -from __future__ import unicode_literals - -import django from django.db import models -if django.VERSION[0] < 3: - from django.utils.encoding import python_2_unicode_compatible -else: - # noop stub - def python_2_unicode_compatible(cls): - return cls -@python_2_unicode_compatible class AccessAttempt(models.Model): """ Access Attempt log """ diff --git a/defender/south_migrations/0001_initial.py b/defender/south_migrations/0001_initial.py index c60bad3..d491445 100644 --- a/defender/south_migrations/0001_initial.py +++ b/defender/south_migrations/0001_initial.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration diff --git a/defender/test.py b/defender/test.py index b02f209..ffcd277 100644 --- a/defender/test.py +++ b/defender/test.py @@ -8,7 +8,7 @@ class DefenderTestCaseMixin(object): def tearDown(self): """cleanup django-defender cache after each test""" - super(DefenderTestCaseMixin, self).tearDown() + super().tearDown() get_redis_connection().flushdb() diff --git a/defender/tests.py b/defender/tests.py index 598d64c..99b4528 100644 --- a/defender/tests.py +++ b/defender/tests.py @@ -2,12 +2,7 @@ import random import string import time from distutils.version import StrictVersion - -# Python 3 has mock in the stdlib -try: - from mock import patch -except ImportError: - from unittest.mock import patch +from unittest.mock import patch from django import get_version from django.contrib.auth.models import User diff --git a/requirements.txt b/requirements.txt index 475d290..a5320a1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,3 @@ coverage mockredispy django-redis-cache==2.1.1 celery<5 -mock; python_version < '3.0' diff --git a/setup.py b/setup.py index f17745c..cba40bb 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,4 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- import os from setuptools import setup, find_packages @@ -36,7 +35,8 @@ setup( "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 2.7", + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3 :: Only', "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", @@ -56,9 +56,9 @@ setup( include_package_data=True, packages=find_packages(), package_data=get_package_data("defender"), + python_requires='~=3.5', install_requires=["Django>=1.8,<3.2", "redis<3.6"], tests_require=[ - "mock", "mockredispy>=2.9.0.11,<3.0", "coverage", "celery", diff --git a/tox.ini b/tox.ini index 55af8a1..0fceacb 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ envlist = # list of supported Django/Python versioons: # https://docs.djangoproject.com/en/2.2/faq/install/#what-python-version-can-i-use-with-django - py{27,35,36,37,py3}-django111 + py{35,36,37,py3}-django111 py35-django(21,22) py{36,37,py3}-django{21,22,master} py38-django22 @@ -10,7 +10,6 @@ envlist = [travis] python = - 2.7: py27 3.5: py35 3.6: py36 3.7: py37 @@ -20,7 +19,6 @@ python = [testenv] deps = -rrequirements.txt - py27: mock django111: django>=1.11,<2.0 django21: django>=2.1,<2.2 django22: django>=2.2,<2.3