Skip to content

Commit 1273d6c

Browse files
committed
Django tests: create unmanaged modules using a pre_migrate signal
1 parent 13b0fa6 commit 1273d6c

File tree

8 files changed

+59
-47
lines changed

8 files changed

+59
-47
lines changed

django/config/settings/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,4 @@
171171
##########################################
172172

173173
UPSTREAM_NUXT = env.str("UPSTREAM_NUXT")
174+
CREATE_UNMANAGED_TABLES = False

django/config/settings/test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
)
77
SESSION_COOKIE_SECURE = False
88
SECURE_SSL_REDIRECT = False
9+
CREATE_UNMANAGED_TABLES = True

django/docurba/core/apps.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,31 @@
1+
from typing import Any
2+
13
from django.apps import AppConfig
4+
from django.conf import settings
5+
from django.db import connection, models
26

37

48
class CoreAppConfig(AppConfig):
59
name = "docurba.core"
610
verbose_name = "Cœur"
11+
12+
def ready(self) -> None:
13+
super().ready()
14+
models.signals.pre_migrate.connect(create_unmanaged_tables, sender=self)
15+
16+
17+
def create_unmanaged_tables(*args: list[str, Any], **kwargs: dict[str, Any]) -> None: # noqa: ARG001
18+
if not settings.CREATE_UNMANAGED_TABLES:
19+
return
20+
21+
from docurba.core.models import ( # noqa: PLC0415
22+
CommuneProcedure,
23+
Event,
24+
Procedure,
25+
)
26+
27+
unmanaged_core_models = [Procedure, CommuneProcedure, Event]
28+
29+
for model in unmanaged_core_models:
30+
with connection.schema_editor() as schema_editor:
31+
schema_editor.create_model(model)

django/docurba/core/migrations/0001_initial.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
class Migration(migrations.Migration):
1111
initial = True
1212

13-
dependencies = []
13+
dependencies = [
14+
("users", "0001_initial"),
15+
]
1416

1517
operations = [
1618
migrations.CreateModel(

django/docurba/core/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,7 @@ class Procedure(models.Model):
371371
objects = ProcedureManager.from_queryset(ProcedureQuerySet)()
372372

373373
class Meta:
374+
# Table created by a pre_migrate signal in apps.py.
374375
managed = False
375376
db_table = "procedures"
376377
constraints = (
@@ -585,6 +586,7 @@ class Event(models.Model):
585586
visibility = models.TextField(db_default="public")
586587

587588
class Meta:
589+
# Table created by a pre_migrate signal in apps.py.
588590
managed = False
589591
db_table = "doc_frise_events"
590592
ordering = ("-date_evenement",)
@@ -922,6 +924,7 @@ class CommuneProcedure(models.Model): # noqa: DJ008
922924
procedure = models.ForeignKey(Procedure, models.DO_NOTHING)
923925

924926
class Meta:
927+
# Table created by a pre_migrate signal in apps.py.
925928
managed = False
926929
db_table = "procedures_perimetres"
927930
verbose_name = "Périmètre"

django/docurba/users/apps.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,31 @@
1+
from typing import Any
2+
13
from django.apps import AppConfig
4+
from django.conf import settings
5+
from django.db import connection, models
26

37

48
class UsersConfig(AppConfig):
59
default_auto_field = "django.db.models.BigAutoField"
610
name = "docurba.users"
711
verbose_name = "Utilisateurs"
12+
13+
def ready(self) -> None:
14+
super().ready()
15+
models.signals.pre_migrate.connect(create_unmanaged_tables, sender=self)
16+
17+
18+
def create_unmanaged_tables(*args: list[str, Any], **kwargs: dict[str, Any]) -> None: # noqa: ARG001
19+
if not settings.CREATE_UNMANAGED_TABLES:
20+
return
21+
22+
from docurba.users.models import Profile, User # noqa: PLC0415
23+
24+
unmanaged_user_models = [User, Profile]
25+
26+
with connection.schema_editor() as schema_editor:
27+
schema_editor.execute("CREATE SCHEMA auth;")
28+
29+
for model in unmanaged_user_models:
30+
with connection.schema_editor() as schema_editor:
31+
schema_editor.create_model(model)

django/docurba/users/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class User(models.Model):
1717
email = models.EmailField(verbose_name="Email", blank=True)
1818

1919
class Meta:
20+
# Table created by a pre_migrate signal in apps.py.
2021
managed = False
2122
db_table = '"auth"."users"'
2223
verbose_name = "utilisateur"
@@ -123,6 +124,7 @@ class Profile(models.Model):
123124
)
124125

125126
class Meta:
127+
# Table created by a pre_migrate signal in apps.py.
126128
managed = False
127129
db_table = "profiles"
128130
verbose_name = "profil"

django/tests/conftest.py

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)