Skip to content

Commit 0694863

Browse files
refactor: jsonfield pkg->Django JSONField (ietf-tools#9284)
* refactor: drop jsonfield pkg in code It still exists in migrations * refactor: callable JSONField defaults * chore: migrations * chore: unused import * chore: fix nulls in authors; renumber migrations * fix: rename IETFJSONField to fix migration * chore: update names.json JSONField representation has changed * fix: missed renaming; hide dead code from coverage
1 parent f13a1a5 commit 0694863

11 files changed

Lines changed: 1259 additions & 273 deletions
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Generated by Django 4.2.23 on 2025-08-15 16:46
2+
3+
from django.db import migrations, models
4+
import ietf.group.models
5+
import ietf.name.models
6+
import ietf.utils.db
7+
import ietf.utils.validators
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
dependencies = [
13+
("group", "0007_used_roles"),
14+
]
15+
16+
operations = [
17+
migrations.AlterField(
18+
model_name="group",
19+
name="used_roles",
20+
field=models.JSONField(
21+
blank=True,
22+
default=list,
23+
help_text="Leave an empty list to get the group_type's default used roles",
24+
max_length=256,
25+
),
26+
),
27+
migrations.AlterField(
28+
model_name="groupfeatures",
29+
name="admin_roles",
30+
field=ietf.utils.db.EmptyAwareJSONField(
31+
default=ietf.group.models.default_admin_roles, max_length=64
32+
),
33+
),
34+
migrations.AlterField(
35+
model_name="groupfeatures",
36+
name="default_used_roles",
37+
field=ietf.utils.db.EmptyAwareJSONField(default=list, max_length=256),
38+
),
39+
migrations.AlterField(
40+
model_name="groupfeatures",
41+
name="docman_roles",
42+
field=ietf.utils.db.EmptyAwareJSONField(
43+
default=ietf.group.models.default_docman_roles, max_length=128
44+
),
45+
),
46+
migrations.AlterField(
47+
model_name="groupfeatures",
48+
name="groupman_authroles",
49+
field=ietf.utils.db.EmptyAwareJSONField(
50+
default=ietf.group.models.default_groupman_authroles, max_length=128
51+
),
52+
),
53+
migrations.AlterField(
54+
model_name="groupfeatures",
55+
name="groupman_roles",
56+
field=ietf.utils.db.EmptyAwareJSONField(
57+
default=ietf.group.models.default_groupman_roles, max_length=128
58+
),
59+
),
60+
migrations.AlterField(
61+
model_name="groupfeatures",
62+
name="material_types",
63+
field=ietf.utils.db.EmptyAwareJSONField(
64+
default=ietf.group.models.default_material_types, max_length=64
65+
),
66+
),
67+
migrations.AlterField(
68+
model_name="groupfeatures",
69+
name="matman_roles",
70+
field=ietf.utils.db.EmptyAwareJSONField(
71+
default=ietf.group.models.default_matman_roles, max_length=128
72+
),
73+
),
74+
migrations.AlterField(
75+
model_name="groupfeatures",
76+
name="role_order",
77+
field=ietf.utils.db.EmptyAwareJSONField(
78+
default=ietf.group.models.default_role_order,
79+
help_text="The order in which roles are shown, for instance on photo pages. Enter valid JSON.",
80+
max_length=128,
81+
),
82+
),
83+
migrations.AlterField(
84+
model_name="groupfeatures",
85+
name="session_purposes",
86+
field=ietf.utils.db.EmptyAwareJSONField(
87+
default=list,
88+
help_text="Allowed session purposes for this group type",
89+
max_length=256,
90+
validators=[
91+
ietf.utils.validators.JSONForeignKeyListValidator(
92+
ietf.name.models.SessionPurposeName
93+
)
94+
],
95+
),
96+
),
97+
migrations.AlterField(
98+
model_name="grouphistory",
99+
name="used_roles",
100+
field=models.JSONField(
101+
blank=True,
102+
default=list,
103+
help_text="Leave an empty list to get the group_type's default used roles",
104+
max_length=256,
105+
),
106+
),
107+
]

ietf/group/models.py

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44

55
import email.utils
6-
import jsonfield
76
import os
87
import re
98

@@ -21,7 +20,7 @@
2120
AgendaTypeName, AgendaFilterTypeName, ExtResourceName, SessionPurposeName,
2221
AppealArtifactTypeName )
2322
from ietf.person.models import Email, Person
24-
from ietf.utils.db import IETFJSONField
23+
from ietf.utils.db import EmptyAwareJSONField
2524
from ietf.utils.mail import formataddr, send_mail_text
2625
from ietf.utils import log
2726
from ietf.utils.models import ForeignKey, OneToOneField
@@ -46,7 +45,7 @@ class GroupInfo(models.Model):
4645
unused_states = models.ManyToManyField('doc.State', help_text="Document states that have been disabled for the group.", blank=True)
4746
unused_tags = models.ManyToManyField(DocTagName, help_text="Document tags that have been disabled for the group.", blank=True)
4847

49-
used_roles = jsonfield.JSONField(max_length=256, blank=True, default=[], help_text="Leave an empty list to get the group_type's default used roles")
48+
used_roles = models.JSONField(max_length=256, blank=True, default=list, help_text="Leave an empty list to get the group_type's default used roles")
5049

5150
uses_milestone_dates = models.BooleanField(default=True)
5251

@@ -235,6 +234,36 @@ def chat_archive_url(self):
235234
)
236235

237236

237+
# JSONFields need callable defaults that work with migrations to avoid sharing
238+
# data structures between instances. These helpers provide that.
239+
def default_material_types():
240+
return ["slides"]
241+
242+
243+
def default_admin_roles():
244+
return ["chair"]
245+
246+
247+
def default_docman_roles():
248+
return ["ad", "chair", "delegate", "secr"]
249+
250+
251+
def default_groupman_roles():
252+
return ["ad", "chair"]
253+
254+
255+
def default_groupman_authroles():
256+
return ["Secretariat"]
257+
258+
259+
def default_matman_roles():
260+
return ["ad", "chair", "delegate", "secr"]
261+
262+
263+
def default_role_order():
264+
return ["chair", "secr", "member"]
265+
266+
238267
class GroupFeatures(models.Model):
239268
type = OneToOneField(GroupTypeName, primary_key=True, null=False, related_name='features')
240269
#history = HistoricalRecords()
@@ -268,16 +297,16 @@ class GroupFeatures(models.Model):
268297
agenda_type = models.ForeignKey(AgendaTypeName, null=True, default="ietf", on_delete=CASCADE)
269298
about_page = models.CharField(max_length=64, blank=False, default="ietf.group.views.group_about" )
270299
default_tab = models.CharField(max_length=64, blank=False, default="ietf.group.views.group_about" )
271-
material_types = IETFJSONField(max_length=64, accepted_empty_values=[[], {}], blank=False, default=["slides"])
272-
default_used_roles = IETFJSONField(max_length=256, accepted_empty_values=[[], {}], blank=False, default=[])
273-
admin_roles = IETFJSONField(max_length=64, accepted_empty_values=[[], {}], blank=False, default=["chair"]) # Trac Admin
274-
docman_roles = IETFJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=["ad","chair","delegate","secr"])
275-
groupman_roles = IETFJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=["ad","chair",])
276-
groupman_authroles = IETFJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=["Secretariat",])
277-
matman_roles = IETFJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=["ad","chair","delegate","secr"])
278-
role_order = IETFJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=["chair","secr","member"],
279-
help_text="The order in which roles are shown, for instance on photo pages. Enter valid JSON.")
280-
session_purposes = IETFJSONField(max_length=256, accepted_empty_values=[[], {}], blank=False, default=[],
300+
material_types = EmptyAwareJSONField(max_length=64, accepted_empty_values=[[], {}], blank=False, default=default_material_types)
301+
default_used_roles = EmptyAwareJSONField(max_length=256, accepted_empty_values=[[], {}], blank=False, default=list)
302+
admin_roles = EmptyAwareJSONField(max_length=64, accepted_empty_values=[[], {}], blank=False, default=default_admin_roles) # Trac Admin
303+
docman_roles = EmptyAwareJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=default_docman_roles)
304+
groupman_roles = EmptyAwareJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=default_groupman_roles)
305+
groupman_authroles = EmptyAwareJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=default_groupman_authroles)
306+
matman_roles = EmptyAwareJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=default_matman_roles)
307+
role_order = EmptyAwareJSONField(max_length=128, accepted_empty_values=[[], {}], blank=False, default=default_role_order,
308+
help_text="The order in which roles are shown, for instance on photo pages. Enter valid JSON.")
309+
session_purposes = EmptyAwareJSONField(max_length=256, accepted_empty_values=[[], {}], blank=False, default=list,
281310
help_text="Allowed session purposes for this group type",
282311
validators=[JSONForeignKeyListValidator(SessionPurposeName)])
283312

0 commit comments

Comments
 (0)