From aa6ce7c35d41e55042c3e97e3f818d060ae6a65b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Thu, 26 Jan 2023 17:09:31 +0100 Subject: [PATCH 1/2] misc: remove old digest migrations (#73775) --- wcs/formdata.py | 8 -------- wcs/formdef.py | 8 -------- 2 files changed, 16 deletions(-) diff --git a/wcs/formdata.py b/wcs/formdata.py index 40b50a57b..fb6af0fba 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -333,14 +333,6 @@ class FormData(StorableObject): self.submission_agent_id = str(self.submission_context.get('agent_id')) changed = True - if 'digest' in self.__dict__: # 2021-06-24 - # migration from a simple digest to digests - if not self.digests: - self.digests = {} - self.digests['default'] = self.__dict__['digest'] - del self.__dict__['digest'] - changed = True - if changed: self.store() diff --git a/wcs/formdef.py b/wcs/formdef.py index e093a1574..2f32e6b97 100644 --- a/wcs/formdef.py +++ b/wcs/formdef.py @@ -225,14 +225,6 @@ class FormDef(StorableObject): # don't run migration on lightweight objects return - if 'digest_template' in self.__dict__: - # 2021-06-22 - migration from a simple template to templates - if not self.digest_templates: - self.digest_templates = {} - self.digest_templates['default'] = self.__dict__['digest_template'] - del self.__dict__['digest_template'] - changed = True - if self.max_field_id is None and self.fields: self.max_field_id = max(lax_int(x.id) for x in self.fields) changed = True -- 2.39.2 From 204ba88ba802cd73c65baa934b2117531ad58a32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Thu, 26 Jan 2023 17:24:43 +0100 Subject: [PATCH 2/2] custom-views: remove digest on deletion (#73775) --- tests/backoffice_pages/test_custom_view.py | 38 +++++++++++++++++++++- wcs/custom_views.py | 12 +++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/tests/backoffice_pages/test_custom_view.py b/tests/backoffice_pages/test_custom_view.py index d14cd0095..a840ce509 100644 --- a/tests/backoffice_pages/test_custom_view.py +++ b/tests/backoffice_pages/test_custom_view.py @@ -455,7 +455,7 @@ def test_backoffice_custom_view_status_filter(pub): def test_backoffice_custom_view_delete(pub): - create_superuser(pub) + user = create_superuser(pub) FormDef.wipe() pub.custom_view_class.wipe() @@ -481,6 +481,42 @@ def test_backoffice_custom_view_delete(pub): resp = resp.follow() assert 'custom test view' not in resp.text + CardDef.wipe() + carddef = CardDef() + carddef.name = 'foo' + carddef.fields = [ + fields.StringField(id='1', label='Test', type='string', varname='foo'), + ] + carddef.backoffice_submission_roles = user.roles + carddef.workflow_roles = {'_editor': user.roles[0]} + carddef.digest_templates = { + 'default': 'plop', + 'custom-view:custom-test-view': 'FOO {{ form_var_foo }}', + 'custom-view:another-view': '{{ form_var_foo }}', + } + carddef.store() + + custom_view = pub.custom_view_class() + custom_view.title = 'custom test view' + custom_view.formdef = carddef + custom_view.visibility = 'datasource' + custom_view.columns = {'list': [{'id': 'id'}]} + custom_view.filters = {} + custom_view.store() + + resp = app.get('/backoffice/data/foo/custom-test-view/') + resp = resp.click('Delete') + resp = resp.form.submit() + assert resp.location.endswith('/data/foo/') + resp = resp.follow() + assert 'custom test view' not in resp.text + + carddef.refresh_from_storage() + assert carddef.digest_templates == { + 'default': 'plop', + 'custom-view:another-view': '{{ form_var_foo }}', + } + def test_backoffice_custom_map_view(pub): user = create_superuser(pub) diff --git a/wcs/custom_views.py b/wcs/custom_views.py index 035051077..9e1ff87b5 100644 --- a/wcs/custom_views.py +++ b/wcs/custom_views.py @@ -65,6 +65,18 @@ class CustomView(StorableObject): self.formdef_id = str(value.id) self.formdef_type = value.xml_root_node + def remove_self(self): + try: + formdef = self.formdef + except KeyError: + pass + else: + view_digest_key = 'custom-view:%s' % self.get_url_slug() + if view_digest_key in (formdef.digest_templates or {}): + del formdef.digest_templates[view_digest_key] + formdef.store() + super().remove_self() + def match(self, user, formdef): if self.formdef_type != formdef.xml_root_node: return False -- 2.39.2