From f0cccb42d9462c90cd340d24c6aaa470dd70dd73 Mon Sep 17 00:00:00 2001 From: Johannes Maron Date: Tue, 24 Oct 2023 17:43:27 +0200 Subject: [PATCH] Switch to Django-CITEXT for PG citext support --- .github/workflows/ci.yml | 13 ++++++------- .../user/migrations/0003_ci_unique_index.py | 7 +++---- ...5_emailuser_email_hash_alter_emailuser_email.py | 2 +- mailauth/contrib/user/models.py | 2 +- pyproject.toml | 14 +++++++++----- tests/test_models.py | 12 +----------- tests/testapp/settings.py | 2 +- 7 files changed, 22 insertions(+), 30 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index da099f7..975c0be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,6 +65,10 @@ jobs: - "3.9" - "3.10" - "3.11" + django-version: + - "4.0" + - "4.1" + - "4.2" steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 @@ -102,12 +106,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [ "3.10" ] - django-version: - - "4.0" - - "4.1" - extras: - - postgres + python-version: [ "3.x" ] services: postgres: image: postgres @@ -123,7 +122,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - uses: actions/checkout@v4 - - run: python -m pip install Django~=${{ matrix.django-version }}.0 -e ".[test,${{ matrix.extras }}]" + - run: python -m pip install -e ".[test,postgres]" - run: python -m pytest env: DB_PORT: ${{ job.services.postgres.ports[5432] }} diff --git a/mailauth/contrib/user/migrations/0003_ci_unique_index.py b/mailauth/contrib/user/migrations/0003_ci_unique_index.py index 6ac8d16..7b57632 100644 --- a/mailauth/contrib/user/migrations/0003_ci_unique_index.py +++ b/mailauth/contrib/user/migrations/0003_ci_unique_index.py @@ -1,15 +1,14 @@ from django.db import migrations try: - from django.contrib.postgres.fields import CIEmailField + from citext import CIEmailField, CITextExtension except ImportError: + CITextExtension = None CIEmailField = None -else: - from django.contrib.postgres.operations import CITextExtension def _operations(): - if CIEmailField: + if CITextExtension: yield CITextExtension() yield migrations.AlterField( model_name="emailuser", diff --git a/mailauth/contrib/user/migrations/0005_emailuser_email_hash_alter_emailuser_email.py b/mailauth/contrib/user/migrations/0005_emailuser_email_hash_alter_emailuser_email.py index df41e1c..a5f72df 100644 --- a/mailauth/contrib/user/migrations/0005_emailuser_email_hash_alter_emailuser_email.py +++ b/mailauth/contrib/user/migrations/0005_emailuser_email_hash_alter_emailuser_email.py @@ -1,7 +1,7 @@ from django.db import migrations, models try: - from django.contrib.postgres.fields import CIEmailField + from citext import CIEmailField except ImportError: CIEmailField = models.EmailField diff --git a/mailauth/contrib/user/models.py b/mailauth/contrib/user/models.py index 23b41cf..61bbc44 100644 --- a/mailauth/contrib/user/models.py +++ b/mailauth/contrib/user/models.py @@ -7,7 +7,7 @@ from . import signals try: - from django.contrib.postgres.fields import CIEmailField + from citext import CIEmailField except ImportError: from django.db.models import EmailField as CIEmailField diff --git a/pyproject.toml b/pyproject.toml index 0ee7a31..b55d925 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,10 +14,7 @@ keywords = [ "otp", "email", "authentication", - "login", - "2fa", "passwordless", - "password", ] dynamic = ["version", "description"] classifiers = [ @@ -34,13 +31,20 @@ classifiers = [ "Framework :: Django", "Framework :: Django :: 4.0", "Framework :: Django :: 4.1", + "Framework :: Django :: 4.2", + "Framework :: Wagtail", + "Framework :: Wagtail :: 2", + "Framework :: Wagtail :: 3", + "Framework :: Wagtail :: 4", "Topic :: Internet", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Quality Assurance", "Topic :: Software Development :: Testing", ] requires-python = ">=3.9" -dependencies = ["django>=4.0"] +dependencies = [ + "django>=4.0" +] [project.optional-dependencies] test = [ @@ -55,7 +59,7 @@ wagtail = [ "wagtail>=2.8", ] postgres = [ - "psycopg2-binary", + "django-citext", ] [project.urls] diff --git a/tests/test_models.py b/tests/test_models.py index 06144e9..f6f29d2 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -3,20 +3,10 @@ from mailauth.contrib.user import models -try: - import psycopg2 -except ImportError: - psycopg2 = None - - -postgres_only = pytest.mark.skipif( - psycopg2 is None, reason="at least mymodule-1.1 required" -) - class TestEmailUser: - @postgres_only def test_email__ci_unique(self, db): + pytest.importorskip("psycopg") models.EmailUser.objects.create_user("IronMan@avengers.com") with pytest.raises(IntegrityError): models.EmailUser.objects.create_user("ironman@avengers.com") diff --git a/tests/testapp/settings.py b/tests/testapp/settings.py index 50a7f44..5258dee 100644 --- a/tests/testapp/settings.py +++ b/tests/testapp/settings.py @@ -52,7 +52,7 @@ "mailauth.contrib.wagtail", "wagtail.admin", "wagtail.users", - "wagtail.core", + "wagtail", ] AUTHENTICATION_BACKENDS = ("mailauth.backends.MailAuthBackend",)