From 36ca9caa9a95b73dec565382132af926963c25b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Tue, 27 Sep 2022 13:36:09 +0200 Subject: [PATCH] Performance: prioritize raw getter for AllowedMethods field --- CHANGES.rst | 1 + src/bika/lims/browser/analyses/view.py | 4 ++-- src/bika/lims/content/abstractanalysis.py | 11 ++++++++++- src/bika/lims/content/analysisservice.py | 7 ++----- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index ebd9471468..c242aac608 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,7 @@ Changelog 2.3.0 (unreleased) ------------------ +- #2150 Performance: prioritize raw getter for AllowedMethods field - #2147 Remove stale function workflow.getReviewHistory - #2146 Fix "No object found for UID: " in report preview - #2145 Crop page navigation for DX reference widget diff --git a/src/bika/lims/browser/analyses/view.py b/src/bika/lims/browser/analyses/view.py index 944a209d43..6fe35123aa 100644 --- a/src/bika/lims/browser/analyses/view.py +++ b/src/bika/lims/browser/analyses/view.py @@ -1516,11 +1516,11 @@ def is_method_required(self, analysis): """ # Always return true if the analysis has a method assigned obj = self.get_object(analysis) - method = obj.getMethod() + method = obj.getRawMethod() if method: return True - methods = obj.getAllowedMethods() + methods = obj.getRawAllowedMethods() return len(methods) > 0 def is_instrument_required(self, analysis): diff --git a/src/bika/lims/content/abstractanalysis.py b/src/bika/lims/content/abstractanalysis.py index 848c8fba6b..36719e52ae 100644 --- a/src/bika/lims/content/abstractanalysis.py +++ b/src/bika/lims/content/abstractanalysis.py @@ -739,7 +739,7 @@ def isMethodAllowed(self, method): :rtype: bool """ uid = api.get_uid(method) - return uid in map(api.get_uid, self.getAllowedMethods()) + return uid in self.getRawAllowedMethods() @security.public def getAllowedMethods(self): @@ -756,6 +756,15 @@ def getAllowedMethods(self): # get the available methods of the service return service.getMethods() + @security.public + def getRawAllowedMethods(self): + """Returns the UIDs of the allowed methods for this analysis + """ + service = self.getAnalysisService() + if not service: + return [] + return service.getRawMethods() + @security.public def getAllowedInstruments(self): """Returns the allowed instruments from the service diff --git a/src/bika/lims/content/analysisservice.py b/src/bika/lims/content/analysisservice.py index 105079e55a..d64e66c49d 100644 --- a/src/bika/lims/content/analysisservice.py +++ b/src/bika/lims/content/analysisservice.py @@ -315,17 +315,14 @@ def getMethods(self): :returns: List of method objects """ - field = self.getField("Methods") - methods = field.get(self) - return methods + return self.getField("Methods").get(self) def getRawMethods(self): """Returns the assigned method UIDs :returns: List of method UIDs """ - methods = self.getMethods() - return map(api.get_uid, methods) + return self.getField("Methods").getRaw(self) def getMethod(self): """Get the default method