From: Magnus Hagander Date: Wed, 20 Jun 2018 11:38:13 +0000 (+0200) Subject: Store benefit class default values as structure instead of text X-Git-Url: http://git.postgresql.org/gitweb/static/session/%7B%7Bsession.id%7D%7D-%7B%7Bsession.title%7Cslugify%7D%7D?a=commitdiff_plain;h=84cb1d0164e3e7c251a095e751b2512c58bded2e;p=pgeu-website.git Store benefit class default values as structure instead of text Then we can easily and cheaply convert them to JSON text as necessary --- diff --git a/postgresqleu/confsponsor/admin.py b/postgresqleu/confsponsor/admin.py index a9e9418..f04754b 100644 --- a/postgresqleu/confsponsor/admin.py +++ b/postgresqleu/confsponsor/admin.py @@ -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]) diff --git a/postgresqleu/confsponsor/backendforms.py b/postgresqleu/confsponsor/backendforms.py index 51e8538..cf39847 100644 --- a/postgresqleu/confsponsor/backendforms.py +++ b/postgresqleu/confsponsor/backendforms.py @@ -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) diff --git a/postgresqleu/confsponsor/benefitclasses/base.py b/postgresqleu/confsponsor/benefitclasses/base.py index 87f62ad..7b21677 100644 --- a/postgresqleu/confsponsor/benefitclasses/base.py +++ b/postgresqleu/confsponsor/benefitclasses/base.py @@ -1,5 +1,5 @@ class BaseBenefit(object): - default_params = '' + default_params = {} def __init__(self, level, params): self.level = level self.params = params diff --git a/postgresqleu/confsponsor/benefitclasses/entryvouchers.py b/postgresqleu/confsponsor/benefitclasses/entryvouchers.py index 173845b..41ed30b 100644 --- a/postgresqleu/confsponsor/benefitclasses/entryvouchers.py +++ b/postgresqleu/confsponsor/benefitclasses/entryvouchers.py @@ -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) diff --git a/postgresqleu/confsponsor/benefitclasses/imageupload.py b/postgresqleu/confsponsor/benefitclasses/imageupload.py index eb0909a..13bd32e 100644 --- a/postgresqleu/confsponsor/benefitclasses/imageupload.py +++ b/postgresqleu/confsponsor/benefitclasses/imageupload.py @@ -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) diff --git a/postgresqleu/confsponsor/benefitclasses/providetext.py b/postgresqleu/confsponsor/benefitclasses/providetext.py index 887bdbd..6ffd2bf 100644 --- a/postgresqleu/confsponsor/benefitclasses/providetext.py +++ b/postgresqleu/confsponsor/benefitclasses/providetext.py @@ -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)