Store benefit class default values as structure instead of text
authorMagnus Hagander <magnus@hagander.net>
Wed, 20 Jun 2018 11:38:13 +0000 (13:38 +0200)
committerMagnus Hagander <magnus@hagander.net>
Wed, 20 Jun 2018 11:47:59 +0000 (13:47 +0200)
Then we can easily and cheaply convert them to JSON text as necessary

postgresqleu/confsponsor/admin.py
postgresqleu/confsponsor/backendforms.py
postgresqleu/confsponsor/benefitclasses/base.py
postgresqleu/confsponsor/benefitclasses/entryvouchers.py
postgresqleu/confsponsor/benefitclasses/imageupload.py
postgresqleu/confsponsor/benefitclasses/providetext.py

index a9e941850d71add91a9a7d78f2757afb0c13996a..f04754b0d20fe51df2337cf491fefc233b0ba8a8 100644 (file)
@@ -16,6 +16,8 @@ from models import SponsorshipBenefit, SponsorClaimedBenefit
 
 from benefits import get_benefit_class
 
+import json
+
 class SponsorshipBenefitInlineFormset(BaseInlineFormSet):
        def clean(self):
                for f in self.forms:
@@ -23,9 +25,10 @@ class SponsorshipBenefitInlineFormset(BaseInlineFormSet):
                                params = f.cleaned_data.get('class_parameters')
                                benefit = get_benefit_class(f.cleaned_data.get('benefit_class'))(self.instance, params)
                                if params == "" and benefit.default_params:
-                                       f.cleaned_data['class_parameters'] = benefit.default_params
-                                       f.instance.class_parameters = benefit.default_params
-                                       params = benefit.default_params
+                                       dp = json.dumps(benefit.default_params)
+                                       f.cleaned_data['class_parameters'] = dp
+                                       f.instance.class_parameters = dp
+                                       params = dp
                                s = benefit.validate_params()
                                if s:
                                        f._errors['class_parameters'] = ErrorList([s])
index 51e85382c7b632617b8553c61b2e87f29f0b84ff..cf3984764b9cd8e2d9d50718d0384d2ffd3115f5 100644 (file)
@@ -25,9 +25,10 @@ class BackendSponsorshipLevelBenefitForm(BackendForm):
                        if params in ("","{}") and benefit.default_params:
                                # Need a copy of the local data to make it mutable and change our default
                                self.data = self.data.copy()
-                               self.data['class_parameters'] = benefit.default_params
-                               self.instance.class_parameters = benefit.default_params
-                               benefit.params = benefit.default_params
+                               dp = json.dumps(benefit.default_params)
+                               self.data['class_parameters'] = dp
+                               self.instance.class_parameters = dp
+                               benefit.params = dp
                        s = benefit.validate_params()
                        if s:
                                self.add_error('class_parameters', s)
index 87f62ad98c3a02a6a2154a8d5a8bfa407433c623..7b2167714351807d511d5bc8d9a97fd422611555 100644 (file)
@@ -1,5 +1,5 @@
 class BaseBenefit(object):
-       default_params = ''
+       default_params = {}
        def __init__(self, level, params):
                self.level = level
                self.params = params
index 173845b7e6a7fc9e56551c60e797baaefaf5db63..41ed30b2fce712c3625854d792a5c52245278ccc 100644 (file)
@@ -39,7 +39,7 @@ class EntryVouchersForm(forms.Form):
 
 class EntryVouchers(BaseBenefit):
        description = "Claim entry vouchers"
-       default_params = '{"num": 1, "type": ""}'
+       default_params = {"num": 1, "type": ""}
        def validate_params(self):
                try:
                        _validate_params(self.level, self.params)
index eb0909a643bfa4961dd48c7d9fb45411daef3cba..13bd32ed5d297ecefb0fd710a3fdb31e21bfdd67 100644 (file)
@@ -84,7 +84,7 @@ class ImageUploadForm(forms.Form):
 
 class ImageUpload(BaseBenefit):
        description = 'Require uploaded image'
-       default_params = '{"format": "png", "xres": 0, "yres": 0, "transparent": 0}'
+       default_params = {"format": "png", "xres": 0, "yres": 0, "transparent": 0}
        def validate_params(self):
                try:
                        _validate_params(self.params)
index 887bdbd96c75c278d2387b77b44bdddfccedf533..6ffd2bf1d5e0d805209714c9d1af84e433d12a67 100644 (file)
@@ -54,7 +54,7 @@ class ProvideTextForm(forms.Form):
 
 class ProvideText(BaseBenefit):
        description = "Provide text string"
-       default_params = '{"minwords": 0, "maxwords": 0, "minchars": 0, "maxchars": 0}'
+       default_params = {"minwords": 0, "maxwords": 0, "minchars": 0, "maxchars": 0}
        def validate_params(self):
                try:
                        _validate_params(self.params)