misc: load roles lazily when loading objects from xml storage (#59891)
This commit is contained in:
parent
f20d63c9af
commit
77fac42e1c
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue