diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py index cdbec51e431e6f2d26f92de7ec46edb891090da8..390343d49b2e931127dd574c727eafd939503d65 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py +++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py @@ -45,8 +45,10 @@ class RADatabase: self.conn = None self.cursor = None self.log_queries = log_queries - self._taskStatusCache = {} - self._taskTypeCache = {} + self._taskStatusName2IdCache = {} + self._taskTypeName2IdCache = {} + self._claimStatusName2IdCache = {} + self._claimStatusId2NameCache = {} def _connect(self): self.conn = None @@ -119,16 +121,16 @@ class RADatabase: def getTaskStatusNames(self): return [x['name'] for x in self.getTaskStatuses()] - def getTaskStatusId(self, status_name, from_cache=False): - if from_cache and status_name in self._taskStatusCache: - return self._taskStatusCache[status_name] + def getTaskStatusId(self, status_name, from_cache=True): + if from_cache and status_name in self._taskStatusName2IdCache: + return self._taskStatusName2IdCache[status_name] query = '''SELECT id from resource_allocation.task_status WHERE name = %s;''' result = self._executeQuery(query, [status_name], fetch=_FETCH_ONE) if result: - self._taskStatusCache[status_name] = result['id'] + self._taskStatusName2IdCache[status_name] = result['id'] return result['id'] raise KeyError('No such status: %s Valid values are: %s' % (status_name, ', '.join(self.getTaskStatusNames()))) @@ -141,16 +143,16 @@ class RADatabase: def getTaskTypeNames(self): return [x['name'] for x in self.getTaskTypes()] - def getTaskTypeId(self, type_name, from_cache=False): - if from_cache and type_name in self._taskStatusCache: - return self._taskTypeCache[type_name] + def getTaskTypeId(self, type_name, from_cache=True): + if from_cache and type_name in self._taskTypeName2IdCache: + return self._taskTypeName2IdCache[type_name] query = '''SELECT id from resource_allocation.task_type WHERE name = %s;''' result = self._executeQuery(query, [type_name], fetch=_FETCH_ONE) if result: - self._taskTypeCache[type_name] = result['id'] + self._taskTypeName2IdCache[type_name] = result['id'] return result['id'] raise KeyError('No such type: %s Valid values are: %s' % (type_name, ', '.join(self.getTaskTypeNames()))) @@ -163,22 +165,32 @@ class RADatabase: def getResourceClaimStatusNames(self): return [x['name'] for x in self.getResourceClaimStatuses()] - def getResourceClaimStatusId(self, status_name): + def getResourceClaimStatusId(self, status_name, from_cache=True): + if from_cache and status_name in self._claimStatusName2IdCache: + return self._claimStatusName2IdCache[status_name] + query = '''SELECT id from resource_allocation.resource_claim_status WHERE name = %s;''' result = self._executeQuery(query, [status_name], fetch=_FETCH_ONE) if result: + self._claimStatusName2IdCache[status_name] = result['id'] + self._claimStatusId2NameCache[result['id']] = status_name return result['id'] raise KeyError('No such status: %s. Valid values are: %s' % (status_name, ', '.join(self.getResourceClaimStatusNames()))) - def getResourceClaimStatusName(self, status_id): + def getResourceClaimStatusName(self, status_id, from_cache=True): + if from_cache and status_id in self._claimStatusId2NameCache: + return self._claimStatusId2NameCache[status_id] + query = '''SELECT name from resource_allocation.resource_claim_status WHERE id = %s;''' result = self._executeQuery(query, [status_id], fetch=_FETCH_ONE) if result: + self._claimStatusId2NameCache[status_id] = result['name'] + self._claimStatusName2IdCache[result['name']] = status_id return result['name'] raise KeyError('No such status_id: %s. Valid values are: %s' % (status_id, ', '.join([x['id'] for x in self.getResourceClaimStatuses()])))