33
44
55import email .utils
6- import jsonfield
76import os
87import re
98
2120 AgendaTypeName , AgendaFilterTypeName , ExtResourceName , SessionPurposeName ,
2221 AppealArtifactTypeName )
2322from ietf .person .models import Email , Person
24- from ietf .utils .db import IETFJSONField
23+ from ietf .utils .db import EmptyAwareJSONField
2524from ietf .utils .mail import formataddr , send_mail_text
2625from ietf .utils import log
2726from 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+
238267class 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