custom views: remove frequent calls to criteria-less select() (#68324)

This commit is contained in:
Pierre Ducroquet 2022-08-22 18:03:28 +02:00 committed by Frédéric Péters
parent 5f3deb17f7
commit 33f6acea6a
1 changed files with 17 additions and 8 deletions

View File

@ -799,14 +799,19 @@ class FormPage(Directory):
def set_default_view(self):
if not get_request():
return
custom_views = list(self.get_custom_views())
custom_views = list(
self.get_custom_views(
[
Equal('is_default', True),
Contains('visibility', ['any', 'owner']),
]
)
)
# search for first default user custom view
for view in custom_views:
if view.visibility != 'owner':
continue
if not view.is_default:
continue
self.default_view = view
return
@ -814,8 +819,6 @@ class FormPage(Directory):
for view in custom_views:
if view.visibility != 'any':
continue
if not view.is_default:
continue
self.default_view = view
return
@ -840,6 +843,10 @@ class FormPage(Directory):
raise errors.AccessUnauthorizedError()
def get_custom_views(self, criterias=None):
criterias = [
Equal('formdef_type', self.formdef.xml_root_node),
Equal('formdef_id', str(self.formdef.id)),
] + (criterias or [])
for view in get_publisher().custom_view_class.select(clause=criterias):
if view.match(get_request().user, self.formdef):
yield view
@ -2869,9 +2876,11 @@ class FormPage(Directory):
return self.ics()
if not self.view:
for view in self.get_custom_views():
if view.get_url_slug() == component:
return self.__class__(formdef=self.formdef, view=view)
view_slug = component
if view_slug.startswith('user-'):
view_slug = view_slug[5:]
for view in self.get_custom_views([Contains('slug', [view_slug, component])]):
return self.__class__(formdef=self.formdef, view=view)
if component.startswith('user-'):
get_session().message = (
'warning',