From 9f743db22b7f064111fec17cf3a21bcc1ef11bd4 Mon Sep 17 00:00:00 2001 From: Alex Bourret Date: Mon, 11 May 2026 13:19:50 +0200 Subject: [PATCH 1/3] adding get attribute from template endpoint --- resource/browse_af_tree.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/resource/browse_af_tree.py b/resource/browse_af_tree.py index bea164a..6932c24 100644 --- a/resource/browse_af_tree.py +++ b/resource/browse_af_tree.py @@ -107,6 +107,26 @@ def do(payload, config, plugin_config, inputs): "get_element_categories_from_db", lambda: get_items_from_db(client, parent, "ElementCategories", database_name=database_name) ) + if method=="get_attribute_for_template": + database_name = config.get("database_name") + template_name = config.get("template", None) + if template_name is None: + return {"choices": [], "attributes": []} + # when searching for template : attribute_name=None, element_category=None, attribute_category=None + elements_max_count, attributes_max_count = get_max_counts(config) + for result in client.batched_search( + database_name, None, None, + None, None, template_name, [], + elements_max_count=elements_max_count, attributes_max_count=attributes_max_count + ): + attributes.append(result) + attributes = split_real_from_linked_paths(attributes) + items = [] + for attribute in attributes: + item = get_item_details(attribute) + items.append(item) + items = expand_items_by_paths(items) + return {"choices": [], "attributes": items} if method == "do_search": template_name = config.get("template", None) category_name = config.get("element_category", None) From 337f560874cbcc15b59c7b158c8eefe6163a730a Mon Sep 17 00:00:00 2001 From: Alex Bourret Date: Mon, 11 May 2026 14:49:53 +0200 Subject: [PATCH 2/3] fix --- resource/browse_af_tree.py | 1 + 1 file changed, 1 insertion(+) diff --git a/resource/browse_af_tree.py b/resource/browse_af_tree.py index 6932c24..a34c43b 100644 --- a/resource/browse_af_tree.py +++ b/resource/browse_af_tree.py @@ -114,6 +114,7 @@ def do(payload, config, plugin_config, inputs): return {"choices": [], "attributes": []} # when searching for template : attribute_name=None, element_category=None, attribute_category=None elements_max_count, attributes_max_count = get_max_counts(config) + attributes = [] for result in client.batched_search( database_name, None, None, None, None, template_name, [], From bd961c356f7eccb2f9615fa9fcbf80abf4437953 Mon Sep 17 00:00:00 2001 From: Alex Bourret Date: Mon, 11 May 2026 15:58:26 +0200 Subject: [PATCH 3/3] add get_elements_for_template endpoint --- python-lib/osisoft_client.py | 5 +++-- resource/browse_af_tree.py | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/python-lib/osisoft_client.py b/python-lib/osisoft_client.py index 1f06024..d43438c 100644 --- a/python-lib/osisoft_client.py +++ b/python-lib/osisoft_client.py @@ -758,14 +758,15 @@ def search_attributes(self, database_webid, **kwargs): else: json_response = None - def search_elements(self, database_webid, name=None, description=None, category=None, template=None, full_search=True): + def search_elements(self, database, name=None, description=None, category=None, template=None, full_search=True): headers = self.get_requests_headers() tempo_maxcount = OSIsoftConstants.DEFAULT_MAXCOUNT params = { "maxCount": tempo_maxcount, "associations": "Paths", } - url = self.endpoint.get_base_url() + "/assetdatabases/{}/elements".format(database_webid) + # url = self.endpoint.get_base_url() + "/assetdatabases/{}/elements".format(database_webid) + url = "{}/elements".format(database) if name: params["nameFilter"] = name if description: diff --git a/resource/browse_af_tree.py b/resource/browse_af_tree.py index a34c43b..83e7523 100644 --- a/resource/browse_af_tree.py +++ b/resource/browse_af_tree.py @@ -77,6 +77,7 @@ def do(payload, config, plugin_config, inputs): ) method = payload.get("method") + logger.info("Running do for method '{}'".format(method)) if method == "get_query_catalogs": return get_query_catalogs(None, config) if method == "get_children_from_db": @@ -107,6 +108,13 @@ def do(payload, config, plugin_config, inputs): "get_element_categories_from_db", lambda: get_items_from_db(client, parent, "ElementCategories", database_name=database_name) ) + if method == "get_elements_for_template": + database_name = config.get("database_name") + template_name = config.get("template", None) + elements = [] + for element in client.search_elements(database_name, name=None, description=None, category=None, template=template_name, full_search=True): + elements.append(get_item_details(element)) + return {"choices": [], "elements": elements} if method=="get_attribute_for_template": database_name = config.get("database_name") template_name = config.get("template", None)