import argparse import os import json """ Dieses Programm erzeugt aus den Angaben in der config TOS-Gruppen.json einen Export String zur Pflege des TOS im Ruledesigner Fusion Pfad zur Datei:\\ruledesigner\RDF_Daten\Config\CampiEsterni.ini Codebereich liegt bei Calk Link 10 - Alle informieren das RuleDesigner beendet werden muss. - Auf den Rechner des RuleDesigner Servers einloggen. (nicht der selbe wie der SE-Admin) - Dort dann die Powershell "Tomcat-IIS_reset" ausführen. """ class TOSGroupsConfig: """Auslesen der Config Angaben zu den TOS Gruppen""" config_dir = os.environ.get('CREMIG_CFG') config_path = os.path.join(config_dir, 'TOS-Gruppen.json') def __init__(self): self.tos_hierarchy = None def get_children_keys(self, tos_hierarchy, currentId, result): # wenn eine Referenz nicht weiter in der TOS Hierarchy vorkommt, dann nicht mit einsammeln if currentId not in tos_hierarchy: return None childIds = tos_hierarchy[currentId]["reference-ids"].values() level = tos_hierarchy[currentId]["TOS-level"] if len(childIds) > 0: for cId in childIds: # prüfen, ob die Referenz sonst noch verwendet wird if cId in tos_hierarchy: result[cId] = level for cId in childIds: self.get_children_keys(tos_hierarchy, cId, result) def get_all_keywords(self): """hole alle TOS Keywords, welche in der config Datei definiert sind""" # lazy. nur einmal laden, wenn noch nicht geschehen if not self.tos_hierarchy: self.load_tos_hierarchy() # beginne mit root als ersten, vordefiniertem Keyword rootid = self.tos_hierarchy["root"] # und von dort aus folge dann allen Referenzen result = dict() # root als Nullte Ebene dazu result[rootid] = 0 self.get_children_keys(self.tos_hierarchy, rootid, result) return result def get_keywords_of_level(self, allKeywords, levelnum): """hole alle TOS Keywords der gegebenen Hierarchiestufe "levelnum" """ ret = list() for kw in allKeywords: if allKeywords[kw] == levelnum: ret.append(kw) return ret def load_tos_hierarchy(self): """lade die gegebenen Hierarchy aus dem Config File in eine json Objekt""" with open(self.config_path, 'r', encoding='utf-8') as fh: self.tos_hierarchy = json.loads(fh.read()) def create_tos_string(): TOS_CFG = TOSGroupsConfig() allKeywords = TOS_CFG.get_all_keywords() myIds = list() for level in range(0,5): myIds.extend(TOS_CFG.get_keywords_of_level(allKeywords, level)) res = 'CalcMaster=EdmCodVal("' res += '")&EdmCodVal("'.join(myIds) res += '")' return res # CalcMaster=EdmCodVal("TOS-Gruppe")&EdmCodVal("TOS_Schoenenberger_Produkt")&EdmCodVal("TOS_Automation")&EdmCodVal("TOS_Maschinenelement")&EdmCodVal("TOS_Schoenenberger_Komponenten")&EdmCodVal("TOS_Pneumatik")&EdmCodVal("TOS_Konfig")&EdmCodVal("TOS_ILS")&EdmCodVal("TOS_MAS")&EdmCodVal("TOS_Spinnereikomponente")&EdmCodVal("TOS_Betriebsmittel")&EdmCodVal("TOS_Geruest")&EdmCodVal("TOS_FremdTransport")&EdmCodVal("TOS_MAS_Konfig")&EdmCodVal("TOS_Schaltschrank")&EdmCodVal("TOS_Schalt_Einbau")&EdmCodVal("TOS_Dezentral")&EdmCodVal("TOS_Automation_Sensorik")&EdmCodVal("TOS_Kabel")&EdmCodVal("TOS_Installation")&EdmCodVal("TOS_Automation_Sonstiges")&EdmCodVal("TOS_Verbindungselement")&EdmCodVal("TOS_Lager")&EdmCodVal("TOS_Kraft_Drehmoment")&EdmCodVal("TOS_Sicherungselement")&EdmCodVal("TOS_Bedienungselement")&EdmCodVal("TOS_ILS_2")&EdmCodVal("TOS_ILS_Foerderer")&EdmCodVal("TOS_MAS_Fahrstecke")&EdmCodVal("TOS_Trolley")&EdmCodVal("TOS_Trolley_Projekte")&EdmCodVal("TOS_Trolley_Omniflo")&EdmCodVal("TOS_Trolley_Spinnerei")&EdmCodVal("TOS_Trolley_ILS") if __name__ == '__main__': parser = argparse.ArgumentParser(description='creates the string for the TOS System in Ruledesigner Fusion', prog='create_tos') parser.add_argument('-o', '--outfile', action='store', help='put the result into a textfile') parser.add_argument('-c', '--console', action='store_true', help='put the result to console') args = parser.parse_args() out_dir = os.environ.get('CREMIG_WORK') if args.outfile: tos_string = create_tos_string() out_path = os.path.join(out_dir, args.outfile) with open(out_path, "w") as fh_out: print(tos_string, file=fh_out) elif args.console: tos_string = create_tos_string() print(tos_string) else: parser.print_help()