From: Benjamin Braatz Date: Wed, 1 Sep 2021 10:31:43 +0000 (+0200) Subject: Cache get_templates results. X-Git-Tag: v0.3.0~25 X-Git-Url: http://git.graph-it.com/?a=commitdiff_plain;h=a6da5e159f1bb9a15490a1a2a1cefc1b82885860;p=graphit%2Fcontrolpi.git Cache get_templates results. --- diff --git a/controlpi/messagebus.py b/controlpi/messagebus.py index 30ec4b8..02e45b5 100644 --- a/controlpi/messagebus.py +++ b/controlpi/messagebus.py @@ -733,6 +733,7 @@ class MessageTemplateRegistry: """ self._clients: List[str] = [] self._children: Dict[str, Dict[str, MessageTemplateRegistry]] = {} + self._templates: Dict[str, List[MessageTemplate]] = {} def insert(self, template: MessageTemplate, client: str) -> None: """Register a client for a template. @@ -806,6 +807,8 @@ class MessageTemplateRegistry: if schema_string not in self._children[key]: self._children[key][schema_string] = MessageTemplateRegistry() self._children[key][schema_string].insert(reduced_template, client) + if client in self._templates: + del self._templates[client] def delete(self, client: str) -> bool: """Unregister a client from all templates. @@ -861,6 +864,8 @@ class MessageTemplateRegistry: if not new_children[key]: del new_children[key] self._children = new_children + if client in self._templates: + del self._templates[client] if self._clients or self._children: return True return False @@ -969,18 +974,19 @@ class MessageTemplateRegistry: >>> r.get_templates('Client 6') [{'k1': {'const': 'v1'}}, {'k2': {'const': 'v1'}}] """ - result = [] - if client in self._clients: - result.append(MessageTemplate()) - for key in self._children: - for schema_string in self._children[key]: - schema = json.loads(schema_string) - child = self._children[key][schema_string] - for template in child.get_templates(client): - current = MessageTemplate({key: schema}) - current.update(template) - result.append(current) - return result + if client not in self._templates: + self._templates[client] = [] + if client in self._clients: + self._templates[client].append(MessageTemplate()) + for key in self._children: + for schema_string in self._children[key]: + schema = json.loads(schema_string) + child = self._children[key][schema_string] + for template in child.get_templates(client): + current = MessageTemplate({key: schema}) + current.update(template) + self._templates[client].append(current) + return self._templates[client] class BusException(Exception):