SAT9/.resources/ad8099bb47552ada05968195a6f8e6da15a4c18dd7fc01427a4a8f89bc682347
2025-04-18 19:44:27 +04:00

125 lines
4.3 KiB
Plaintext

import re
import os
import json
import sys
#Stores the page configuration for the project.
#This global variable is accesible form all gateway scoped events using "." notation
#congig.project_config.global_project_page_ids
global_project_page_ids = {}
def get_project_config():
"""
Function searches through the project directory Detailed-Views.
It looks for all the source ids on each Detailed-View and returns a
Dict with source ids as the keys and page ids as the values.
Args:
param1: self. refrence to the object being called.
param2: source_id. The source_id of the alarm.
Returns:
N/A.
Raises:
KeyError: Will log an error message to the console if the basepath is not found.
logger = {whid}_get_project_config
"""
if not global_project_page_ids:
try:
basePath = os.getcwd().replace('\\','/') + '/data/projects/' + system.util.getProjectName() + '/com.inductiveautomation.perspective/views/Detailed-Views'
files = os.listdir(basePath)
files_found = True
except:
whid = system.tag.readBlocking("Configuration/FC")[0].value
logger = system.util.getLogger("%s-get_project_config" % (whid))
exc_type, exc_obj, tb = sys.exc_info()
lineno = tb.tb_lineno
# logger.error("Error: %s, %s, %s" % (lineno, exc_type, exc_obj)) #JCM
files_found = False
if files_found:
for i in files:
jsonPath = basePath+'/'+str(i)+'/view.json'
with open(jsonPath, 'r') as f:
data= f.read()
obj = json.loads(data)
for child in obj['root']['children']:
tag_props = child.get("props",{}).get("params", {}).get("tagProps")
if tag_props:
source_id = tag_props[0]
global global_project_page_ids
global_project_page_ids[source_id] = i
def open_pop_up(message):
error_message = message
system.perspective.openPopup("ErrorPopUP", "PopUp-Views/Error",
params ={"Error_message":error_message},
showCloseIcon = False, modal = True,
viewportBound = True,
draggable = False,
overlayDismiss = True
)
def navigate_to_url(self, source_id, page_id):
url_to_navigate = "/DetailedView/%s/%s" % (page_id, page_id)
navigation.amzl_navigation.set_session_variables(self, source_id, False)
system.perspective.navigate(page = url_to_navigate)
def source_id_lookup(self, source_id):
"""
This function looks for the source_id in
the global_project_page_ids variable.
If found it returns the corrresponding page id.
If no page id is found it will search up the hierachy
of the source_id until it finds a match. It will then
navigate the user to the correct page and set the session
custom variable search_id.
Args:
param1: self. refrence to the object being called.
param2: source_id. The source_id of the alarm.
Returns:
N/A.
Raises:
KeyError: N/A.
"""
logger = system.util.getLogger("Naviagtion function")
# logger.info(str(global_project_page_ids))
page_id = global_project_page_ids.get(source_id)
found = False
if page_id:
found = True
navigate_to_url(self, source_id, page_id)
else:
items = source_id.split("/")
length_of_items = len(items)-1
while length_of_items > 0:
items.pop()
source_id = "/".join(items)
page_id = global_project_page_ids.get(source_id)
if page_id:
found = True
navigate_to_url(self, source_id, page_id)
break
length_of_items -= 1
if not found:
open_pop_up("No page id found")
def get_child_scada_projects():
"""
This function returns an alphabetically sorted list of
child SCADA projects, that inherit the SCADA_PERSPECTIVE_PARENT_PROJECT.
Each of these projects follow the naming convention "{WHID}_SCADA"
:return: List[str]; List of project names on gateway
"""
pattern = '[A-Z]{3}[0-9]|K[A-Z]{3}_SCADA'
all_projects = system.project.getProjectNames()
return sorted([x for x in all_projects if re.match(pattern, x)])