misc: load roles lazily when loading objects from xml storage (#59891)

This commit is contained in:
Frédéric Péters 2021-12-18 13:07:09 +01:00
parent f20d63c9af
commit 77fac42e1c
3 changed files with 43 additions and 5 deletions

View File

@ -25,7 +25,7 @@ class ApiAccess(XmlStorableObject):
access_key = None
description = None
restrict_to_anonymised_data = False
roles = None
_roles = None
# declarations for serialization
XML_NODES = [
@ -84,3 +84,11 @@ class ApiAccess(XmlStorableObject):
if not api_access or api_access.access_key != password:
raise KeyError
return api_access.get_as_api_user()
@property
def roles(self):
return self._roles() if callable(self._roles) else self._roles
@roles.setter
def roles(self, value):
self._roles = value

View File

@ -37,9 +37,9 @@ class Category(XmlStorableObject):
position = None
redirect_url = None
export_roles = None
statistics_roles = None
management_roles = None
_export_roles = None
_statistics_roles = None
_management_roles = None
# declarations for serialization
XML_NODES = [
@ -183,6 +183,30 @@ class Category(XmlStorableObject):
obj.category_id = c.id
break
@property
def export_roles(self):
return self._export_roles() if callable(self._export_roles) else self._export_roles
@export_roles.setter
def export_roles(self, value):
self._export_roles = value
@property
def statistics_roles(self):
return self._statistics_roles() if callable(self._statistics_roles) else self._statistics_roles
@statistics_roles.setter
def statistics_roles(self, value):
self._statistics_roles = value
@property
def management_roles(self):
return self._management_roles() if callable(self._management_roles) else self._management_roles
@management_roles.setter
def management_roles(self, value):
self._management_roles = value
class CardDefCategory(Category):
_names = 'carddef_categories'

View File

@ -147,4 +147,10 @@ class XmlStorableObject(StorableObject):
role_name = xml_node_text(sub)
if role_name:
criterias.append(Equal('name', role_name))
return get_publisher().role_class.select([Or(criterias)], order_by='name')
if not criterias:
return []
def lazy_roles():
return get_publisher().role_class.select([Or(criterias)], order_by='name')
return lazy_roles