From e68333a30c5b280680f3d3216be497ddcedb256e Mon Sep 17 00:00:00 2001 From: Tonye Jack Date: Sun, 9 Jan 2022 16:24:23 -0500 Subject: [PATCH] chore: Move mixin to a module and dropped support for python3.5 (#534) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/lint.yml | 10 ++--- .github/workflows/test.yml | 13 +++--- model_clone/__init__.py | 2 +- model_clone/admin.py | 2 +- model_clone/{mixins/clone.py => mixin.py} | 44 +++++++------------ model_clone/mixins/__init__.py | 1 - model_clone/models.py | 2 +- sample/migrations/0002_library.py | 4 +- sample/migrations/0005_page.py | 4 +- sample/migrations/0006_assignment.py | 4 +- .../migrations/0010_furniture_house_room.py | 8 ++-- sample/migrations/0012_backcover_cover.py | 4 +- sample/migrations/0013_edition.py | 4 +- sample/migrations/0014_auto_20210422_1449.py | 4 +- sample/migrations/0015_auto_20210423_0935.py | 6 +-- sample/migrations/0022_ending_sentence.py | 6 +-- sample_assignment/migrations/0001_initial.py | 4 +- sample_company/migrations/0001_initial.py | 4 +- sample_driver/migrations/0001_initial.py | 4 +- setup.py | 8 ++-- tox.ini | 2 - 21 files changed, 60 insertions(+), 80 deletions(-) rename model_clone/{mixins/clone.py => mixin.py} (94%) delete mode 100644 model_clone/mixins/__init__.py diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1e2ef10d..f594e492 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -10,7 +10,7 @@ jobs: if: github.actor != 'dependabot[bot]' && github.actor != 'dependabot' && github.event.pull_request.head.repo.owner.login == github.repository_owner strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2.4.0 @@ -30,14 +30,12 @@ jobs: pip install -U pip pip install flake8==3.8.4 - name: Install black - if: ${{ matrix.python-version != '3.5' }} - run: | - pip install black + run: pip install black - name: Run Lint uses: wearerequired/lint-action@v1.10.0 with: github_token: ${{ secrets.github_token }} - black: ${{ matrix.python-version != '3.5' }} + black: true flake8: true git_email: "github-action[bot]@github.com" - auto_fix: ${{ matrix.python-version != '3.5' }} + auto_fix: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dca3868c..c145be33 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: fail-fast: true matrix: platform: [ubuntu-latest, macos-latest, windows-latest] - python-version: [3.5, 3.6, 3.7, 3.8, 3.9, '3.10.0-beta.1'] + python-version: [3.6, 3.7, 3.8, 3.9, '3.10.0-beta.1'] steps: - uses: actions/checkout@v2.4.0 @@ -52,8 +52,9 @@ jobs: CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} PLATFORM: ${{ matrix.platform }} -# - name: "Upload coverage to Codecov" -# uses: codecov/codecov-action@v2.1.0 -# with: -# token: ${{ secrets.CODECOV_TOKEN }} -# fail_ci_if_error: true + - name: "Upload coverage to Codecov" + if: ${{ runner.os }} == "Linux" + uses: codecov/codecov-action@v2.1.0 + with: + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true diff --git a/model_clone/__init__.py b/model_clone/__init__.py index e858ef7b..747b326d 100644 --- a/model_clone/__init__.py +++ b/model_clone/__init__.py @@ -5,7 +5,7 @@ __version__ = "2.9.6" from model_clone.admin import CloneModelAdmin, CloneModelAdminMixin -from model_clone.mixins.clone import CloneMixin +from model_clone.mixin import CloneMixin from model_clone.utils import create_copy_of_instance __all__ = [ diff --git a/model_clone/admin.py b/model_clone/admin.py index 5e09bb4b..fe4a3d62 100644 --- a/model_clone/admin.py +++ b/model_clone/admin.py @@ -6,7 +6,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ -from model_clone.mixins.clone import CloneMixin +from model_clone.mixin import CloneMixin class CloneModelAdminMixin(object): diff --git a/model_clone/mixins/clone.py b/model_clone/mixin.py similarity index 94% rename from model_clone/mixins/clone.py rename to model_clone/mixin.py index 31553fdc..0fcf9cec 100644 --- a/model_clone/mixins/clone.py +++ b/model_clone/mixin.py @@ -110,12 +110,10 @@ def check(cls, **kwargs): # pragma: no cover "UNIQUE_DUPLICATE_SUFFIX is required.", hint=( "Please provide UNIQUE_DUPLICATE_SUFFIX" - + " for {} or set USE_UNIQUE_DUPLICATE_SUFFIX=False".format( - cls.__name__ - ) + f" for {cls.__name__} or set USE_UNIQUE_DUPLICATE_SUFFIX=False" ), obj=cls, - id="{}.E001".format(ModelCloneConfig.name), + id=f"{ModelCloneConfig.name}.E001", ) ) @@ -124,13 +122,11 @@ def check(cls, **kwargs): # pragma: no cover Error( "UNIQUE_DUPLICATE_SUFFIX is required.", hint=( - "Please provide DUPLICATE_SUFFIX" - + " for {} or set USE_DUPLICATE_SUFFIX_FOR_NON_UNIQUE_FIELDS=False".format( - cls.__name__ - ) + f"Please provide DUPLICATE_SUFFIX for {cls.__name__} " + "or set USE_DUPLICATE_SUFFIX_FOR_NON_UNIQUE_FIELDS=False" ), obj=cls, - id="{}.E001".format(ModelCloneConfig.name), + id=f"{ModelCloneConfig.name}.E001", ) ) @@ -140,12 +136,10 @@ def check(cls, **kwargs): # pragma: no cover "Conflicting configuration.", hint=( 'Please provide either "_clone_fields"' - + ' or "_clone_excluded_fields" for model {}'.format( - cls.__name__ - ) + f' or "_clone_excluded_fields" for model {cls.__name__}' ), obj=cls, - id="{}.E002".format(ModelCloneConfig.name), + id=f"{ModelCloneConfig.name}.E002", ) ) @@ -155,12 +149,10 @@ def check(cls, **kwargs): # pragma: no cover "Conflicting configuration.", hint=( 'Please provide either "_clone_m2m_fields"' - + ' or "_clone_excluded_m2m_fields" for model {}'.format( - cls.__name__ - ) + f' or "_clone_excluded_m2m_fields" for model {cls.__name__}' ), obj=cls, - id="{}.E002".format(ModelCloneConfig.name), + id=f"{ModelCloneConfig.name}.E002", ) ) @@ -174,15 +166,11 @@ def check(cls, **kwargs): # pragma: no cover Error( "Conflicting configuration.", hint=( - "Please provide either " - + '"_clone_m2o_or_o2m_fields"' - + " or " - + '"_clone_excluded_m2o_or_o2m_fields" for model {}'.format( - cls.__name__ - ) + 'Please provide either "_clone_m2o_or_o2m_fields" or ' + f'"_clone_excluded_m2o_or_o2m_fields" for model {cls.__name__}' ), obj=cls, - id="{}.E002".format(ModelCloneConfig.name), + id=f"{ModelCloneConfig.name}.E002", ) ) @@ -191,13 +179,11 @@ def check(cls, **kwargs): # pragma: no cover Error( "Conflicting configuration.", hint=( - 'Please provide either "_clone_o2o_fields"' - + ' or "_clone_excluded_o2o_fields" for model {}'.format( - cls.__name__ - ) + 'Please provide either "_clone_o2o_fields" or ' + f'"_clone_excluded_o2o_fields" for model {cls.__name__}' ), obj=cls, - id="{}.E002".format(ModelCloneConfig.name), + id=f"{ModelCloneConfig.name}.E002", ) ) diff --git a/model_clone/mixins/__init__.py b/model_clone/mixins/__init__.py deleted file mode 100644 index ae1f172d..00000000 --- a/model_clone/mixins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from model_clone.mixins.clone import CloneMixin # noqa diff --git a/model_clone/models.py b/model_clone/models.py index 47794b5b..ef1bbfc5 100644 --- a/model_clone/models.py +++ b/model_clone/models.py @@ -1,6 +1,6 @@ from django.db import models -from model_clone.mixins.clone import CloneMixin +from model_clone.mixin import CloneMixin class CloneModel(CloneMixin, models.Model): diff --git a/sample/migrations/0002_library.py b/sample/migrations/0002_library.py index ce3a42a7..714115ce 100644 --- a/sample/migrations/0002_library.py +++ b/sample/migrations/0002_library.py @@ -5,7 +5,7 @@ from django.conf import settings from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -34,6 +34,6 @@ class Migration(migrations.Migration): ), ), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample/migrations/0005_page.py b/sample/migrations/0005_page.py index d94b84a8..afd0d299 100644 --- a/sample/migrations/0005_page.py +++ b/sample/migrations/0005_page.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -37,6 +37,6 @@ class Migration(migrations.Migration): options={ "abstract": False, }, - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample/migrations/0006_assignment.py b/sample/migrations/0006_assignment.py index 43ed9e61..513d2911 100644 --- a/sample/migrations/0006_assignment.py +++ b/sample/migrations/0006_assignment.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -135,6 +135,6 @@ class Migration(migrations.Migration): "verbose_name": "Assigment", "verbose_name_plural": "Assignments", }, - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample/migrations/0010_furniture_house_room.py b/sample/migrations/0010_furniture_house_room.py index 2d810e00..47fd5bbc 100644 --- a/sample/migrations/0010_furniture_house_room.py +++ b/sample/migrations/0010_furniture_house_room.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -27,7 +27,7 @@ class Migration(migrations.Migration): ), ("name", models.CharField(max_length=255)), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), migrations.CreateModel( name="Room", @@ -51,7 +51,7 @@ class Migration(migrations.Migration): ), ), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), migrations.CreateModel( name="Furniture", @@ -75,6 +75,6 @@ class Migration(migrations.Migration): ), ), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample/migrations/0012_backcover_cover.py b/sample/migrations/0012_backcover_cover.py index b5e7dcd4..50081618 100644 --- a/sample/migrations/0012_backcover_cover.py +++ b/sample/migrations/0012_backcover_cover.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -36,7 +36,7 @@ class Migration(migrations.Migration): options={ "abstract": False, }, - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), migrations.CreateModel( name="BackCover", diff --git a/sample/migrations/0013_edition.py b/sample/migrations/0013_edition.py index c3059559..43d73c82 100644 --- a/sample/migrations/0013_edition.py +++ b/sample/migrations/0013_edition.py @@ -4,7 +4,7 @@ import django.utils.timezone from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -37,6 +37,6 @@ class Migration(migrations.Migration): ), ), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample/migrations/0014_auto_20210422_1449.py b/sample/migrations/0014_auto_20210422_1449.py index 184eb0ed..0a466c6a 100644 --- a/sample/migrations/0014_auto_20210422_1449.py +++ b/sample/migrations/0014_auto_20210422_1449.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -30,7 +30,7 @@ class Migration(migrations.Migration): options={ "abstract": False, }, - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), migrations.AlterField( model_name="assignment", diff --git a/sample/migrations/0015_auto_20210423_0935.py b/sample/migrations/0015_auto_20210423_0935.py index 22700767..a054c69b 100644 --- a/sample/migrations/0015_auto_20210423_0935.py +++ b/sample/migrations/0015_auto_20210423_0935.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -30,7 +30,7 @@ class Migration(migrations.Migration): options={ "abstract": False, }, - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), migrations.CreateModel( name="BookSaleTag", @@ -60,7 +60,7 @@ class Migration(migrations.Migration): options={ "unique_together": {("book", "sale_tag")}, }, - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), migrations.AddField( model_name="book", diff --git a/sample/migrations/0022_ending_sentence.py b/sample/migrations/0022_ending_sentence.py index 2fb2d264..e9f0ab3b 100644 --- a/sample/migrations/0022_ending_sentence.py +++ b/sample/migrations/0022_ending_sentence.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -27,7 +27,7 @@ class Migration(migrations.Migration): ), ("value", models.TextField()), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), migrations.CreateModel( name="Ending", @@ -50,6 +50,6 @@ class Migration(migrations.Migration): ), ), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample_assignment/migrations/0001_initial.py b/sample_assignment/migrations/0001_initial.py index 5894211f..3e800c0a 100644 --- a/sample_assignment/migrations/0001_initial.py +++ b/sample_assignment/migrations/0001_initial.py @@ -2,7 +2,7 @@ from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -26,6 +26,6 @@ class Migration(migrations.Migration): ), ("title", models.CharField(max_length=255)), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample_company/migrations/0001_initial.py b/sample_company/migrations/0001_initial.py index 88d11742..b1229d13 100644 --- a/sample_company/migrations/0001_initial.py +++ b/sample_company/migrations/0001_initial.py @@ -2,7 +2,7 @@ from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -26,6 +26,6 @@ class Migration(migrations.Migration): ), ("name", models.CharField(max_length=255)), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/sample_driver/migrations/0001_initial.py b/sample_driver/migrations/0001_initial.py index fa5db61f..71b22247 100644 --- a/sample_driver/migrations/0001_initial.py +++ b/sample_driver/migrations/0001_initial.py @@ -2,7 +2,7 @@ from django.db import migrations, models -import model_clone.mixins.clone +import model_clone.mixin class Migration(migrations.Migration): @@ -27,6 +27,6 @@ class Migration(migrations.Migration): ("name", models.CharField(max_length=255)), ("age", models.SmallIntegerField()), ], - bases=(model_clone.mixins.clone.CloneMixin, models.Model), + bases=(model_clone.mixin.CloneMixin, models.Model), ), ] diff --git a/setup.py b/setup.py index ddc885f6..08542eee 100644 --- a/setup.py +++ b/setup.py @@ -17,6 +17,7 @@ "mock", "unittest-xml-reporting", "codacy-coverage", + "django-migration-fixer", ] deploy_requires = [ @@ -31,6 +32,7 @@ "flake8", "yamllint", "isort", + "black", ] local_dev_requires = [ @@ -45,11 +47,8 @@ test_requires, lint_requires, ], - 'development:python_version >= "3.6"': ["black"], "test": test_requires, - "test:python_version >= '3.6'": ["django-migration-fixer"], "lint": lint_requires, - 'lint:python_version >= "3.6"': ["black"], "deploy": deploy_requires, } @@ -67,7 +66,7 @@ name="django-clone", version="2.9.6", description="Create a clone of a django model instance.", - python_requires=">=3.5", + python_requires=">=3.6", long_description=LONG_DESCRIPTION, long_description_content_type=LONG_DESCRIPTION_TYPE, author="Tonye Jack", @@ -96,7 +95,6 @@ "Natural Language :: English", "Topic :: Internet :: WWW/HTTP", "Operating System :: OS Independent", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", diff --git a/tox.ini b/tox.ini index 34172acc..420c82b0 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,6 @@ skipsdist = false envlist = yamllint flake8 - py35-django{20,21}-{linux,macos,windows} py36-django{20,21,22,30,31,32,main}-{linux,macos,windows} py37-django{20,21,22,30,31,32,main}-{linux,macos,windows} py38-django{20,21,22,30,31,32,main}-{linux,macos,windows} @@ -15,7 +14,6 @@ skip_missing_interpreters = true [gh-actions] python = 2.7: py27 - 3.5: py35 3.6: py36 3.7: py37 3.8: py38