diff --git a/.vscode/launch.json b/.vscode/launch.json index aa416fd..b25fd18 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,10 +20,33 @@ "request": "launch", "program": "${file}", "console": "integratedTerminal", - "justMyCode": true + "justMyCode": true, "args": [ "--sivas=829522001" ], } + { + "name": "Python: create TOS sring", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "justMyCode": true, + "args": [ + "--console" + ], + } + { + "name": "Python: TOS string to file", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "justMyCode": true, + "args": [ + "--outfile=blubb.txt" + ], + } + ] } \ No newline at end of file diff --git a/lib/create_tos.py b/lib/create_tos.py index 8d89e87..c0e49cc 100644 --- a/lib/create_tos.py +++ b/lib/create_tos.py @@ -13,58 +13,74 @@ Codebereich liegt bei Calk Link 10 - Dort dann die Powershell "Tomcat-IIS_reset" ausführen. """ -def get_children_keys(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: - get_children_keys(tos_hierarchy, cId, result) -def get_all_keywords(tos_hierarchy): - # hole dir das erste Keyword - rootid = tos_hierarchy["root"] - # und von dort aus alle Referenzen - result = dict() - # root als Nullte Ebene dazu - result[rootid] = 0 - get_children_keys(tos_hierarchy, rootid, result) - return result +class TOSGroupsConfig: + """Auslesen der Config Angaben zu den TOS Gruppen""" -def get_keywords_of_level(allKeywords, levelnum): - ret = list() - for kw in allKeywords: - if allKeywords[kw] == levelnum: - ret.append(kw) - return ret + 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(config_path): +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("' - if os.path.isfile(config_path): - tos_hierarchy = "" - with open(config_path, 'r', encoding='utf-8') as fh: - tos_hierarchy = json.loads(fh.read()) - allKeywords = get_all_keywords(tos_hierarchy) - - myIds = list() - for level in range(0,5): - myIds.extend(get_keywords_of_level(allKeywords, level)) - - res += '")&EdmCodVal("'.join(myIds) - res += '")' - return res - else: - print(f"Can't create tos string.") - return None + 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") @@ -75,15 +91,16 @@ if __name__ == '__main__': args = parser.parse_args() - out_dir = os.environ.get('CREMIG_DATA') - config_dir = os.environ.get('CREMIG_CFG') - config_path = os.path.join(config_dir, 'TOS-Gruppen.json') + out_dir = os.environ.get('CREMIG_WORK') if args.outfile: - res = create_tos_string(config_path) + 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: - res = create_tos_string(config_path) - print(res) + tos_string = create_tos_string() + print(tos_string) else: parser.print_help()