wip/73775-delete-custom-view-digest (#73775) #69

Merged
lguerin merged 2 commits from wip/73775-delete-custom-view-digest into main 2023-01-27 12:19:36 +01:00
4 changed files with 49 additions and 17 deletions

View File

@ -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)

View File

@ -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

View File

@ -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()

View File

@ -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