utilisation de Select plutôt que SelectId à certains endroits; garde en cache
le résultat de getObjectLabelsTranslated (qui est ultra-lent dans le cas des identités car pour chacune, il y a un appel à la fiche person pour récupérer son label (nécessiterait d'utiliser le cache au niveau du serveur d'identité, pas prudent pour le moment))
This commit is contained in:
parent
81a0e142ae
commit
9557708376
|
@ -1542,8 +1542,8 @@ class Id(BaseKind):
|
|||
|
||||
thingPublicName = N_('Object')
|
||||
|
||||
widgetName = 'SelectId'
|
||||
#widgetName = 'Select'
|
||||
#widgetName = 'SelectId'
|
||||
widgetName = 'Select'
|
||||
|
||||
def checkModelValue(self, slot, value):
|
||||
BaseKind.checkModelValue(self, slot, value)
|
||||
|
|
|
@ -1154,10 +1154,21 @@ class ObjectsProxy(ObjectsCommonMixin, AdministrableProxyMixin, Proxy):
|
|||
|
||||
userToken = context.getVar('userToken', default = '')
|
||||
serverId = self.getServerId(serverId = serverId)
|
||||
return callServer(
|
||||
|
||||
cache = context.getVar('temporaryCache')
|
||||
cacheKey = 'getObjectIds_%s' % serverId
|
||||
if cache is not None and cache.has_key(cacheKey):
|
||||
return cache[cacheKey]
|
||||
|
||||
result = callServer(
|
||||
serverId,
|
||||
'getObjectIds',
|
||||
[serverId, getApplicationToken(), userToken])
|
||||
|
||||
if cache is not None:
|
||||
cache[cacheKey] = result
|
||||
return result
|
||||
|
||||
|
||||
def getObjectIdsWithCriteria(self, criteria, serverId = None):
|
||||
userToken = context.getVar('userToken', default = '')
|
||||
|
@ -1255,6 +1266,15 @@ class ObjectsProxy(ObjectsCommonMixin, AdministrableProxyMixin, Proxy):
|
|||
|
||||
"""
|
||||
|
||||
cache = context.getVar('temporaryCache')
|
||||
if cache is not None:
|
||||
cacheKey = 'getObjectLabelsTranslated-%r-%r' % (
|
||||
objectIds, destinationLanguages)
|
||||
try:
|
||||
return cache[cacheKey]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
multiCall = MultiCall()
|
||||
for objectId in objectIds:
|
||||
try:
|
||||
|
@ -1279,6 +1299,7 @@ class ObjectsProxy(ObjectsCommonMixin, AdministrableProxyMixin, Proxy):
|
|||
label, objectId, 'self.getLabel()', language,
|
||||
destinationLanguages, multiCall = multiCall)
|
||||
except faults.UnknownDispatcherInId:
|
||||
labels[objectId] = objectId
|
||||
del labelsAndLanguages[objectId]
|
||||
lazyTranslations = multiCall.call()
|
||||
objectIds = labelsAndLanguages.keys()
|
||||
|
@ -1296,6 +1317,9 @@ class ObjectsProxy(ObjectsCommonMixin, AdministrableProxyMixin, Proxy):
|
|||
label += _(' (at <%s>)') \
|
||||
% extractApplicationHostNameAndPort(objectId)
|
||||
labels[id] = label
|
||||
|
||||
if cache is not None:
|
||||
cache[cacheKey] = labels
|
||||
return labels
|
||||
|
||||
def getObjectLabelTranslated(self, objectId, destinationLanguages):
|
||||
|
|
|
@ -60,15 +60,15 @@ import WebAPI
|
|||
|
||||
class AdminRubrics(AdminMixin, AdminRubrics):
|
||||
mainRubricId_kind_widget_fieldLabel = N_('Main Rubric')
|
||||
mainRubricId_kind_widgetName = 'SelectId'
|
||||
mainRubricId_kind_widgetName = 'Select'
|
||||
register(AdminRubrics)
|
||||
|
||||
|
||||
class Rubric(ObjectWebMixin, Rubric):
|
||||
contentId_kind_widget_fieldLabel = N_('Content')
|
||||
contentId_kind_widgetName = 'SelectId'
|
||||
contentId_kind_widgetName = 'Select'
|
||||
|
||||
membersSet_kind_itemKind_value_widgetName = 'SelectId'
|
||||
membersSet_kind_itemKind_value_widgetName = 'Select'
|
||||
membersSet_kind_widget_fieldLabel = N_('Members')
|
||||
membersSet_kind_widgetName = 'Multi'
|
||||
|
||||
|
|
|
@ -1400,6 +1400,7 @@ class Select(ExclusiveChoiceMixin, proxyWidgets.Select):
|
|||
if values is None:
|
||||
raise Exception('Kind "%s" of slot "%s" has no values' % (
|
||||
kind, slot))
|
||||
|
||||
labels = self.getLabels(slot)
|
||||
|
||||
layout = X.array()
|
||||
|
@ -1424,13 +1425,16 @@ class Select(ExclusiveChoiceMixin, proxyWidgets.Select):
|
|||
noneLabel = _(self.noneLabel)
|
||||
select += X.option(value = '')(noneLabel)
|
||||
itemsCount += 1
|
||||
|
||||
if itemsCount == 1:
|
||||
# The menu has only one item. Replace it by a read-only value.
|
||||
layout += self.getHtmlReadOnlyValue(slot, fields, **keywords)
|
||||
return layout
|
||||
|
||||
|
||||
layout += self.getModelHelpLayout(slot, fields)
|
||||
|
||||
groupedValues = {}
|
||||
if hasattr(kind, 'getGroupedValues'):
|
||||
groupedValues = kind.getGroupedValues(slot)
|
||||
|
||||
|
|
Reference in New Issue