From e86cac23b529d4e3e523109b9c176715388ded1a Mon Sep 17 00:00:00 2001 From: Ulrich Carmesin Date: Thu, 30 Dec 2021 11:18:35 +0100 Subject: [PATCH] rm testing tool --- utils/xmlt_tool.py | 462 --------------------------------------------- 1 file changed, 462 deletions(-) delete mode 100644 utils/xmlt_tool.py diff --git a/utils/xmlt_tool.py b/utils/xmlt_tool.py deleted file mode 100644 index fed6ed3..0000000 --- a/utils/xmlt_tool.py +++ /dev/null @@ -1,462 +0,0 @@ -import dpath.util -import json -import yaml -import re -import datetime -from tools.reader import fcts as reader -""" -Register-Meldung erstellen -""" -class register(): - def __init__(self): - self.absender = Absender() - self.vrfelder = Vrfelder() - pass - - def schreibeRegister(self, content, regAdr): - ausgabe = {} - content["vrfelder"] = self.vrfelder - content["absender"] = self.absender.keys[regAdr] - # - ausgabe = self.schreibeProtokoll(ausgabe, content) - print( "ausgabe vorher: " + str( ausgabe)) - ausgabe = self.schreibeAbsender(ausgabe, content, regAdr) - print("ausgabe vorher: "+str(ausgabe)) - ausgabe = self.schreibeEmpfaenger(ausgabe, content) - print("ausgabe vorher: "+str(ausgabe)) - ausgabe = self.schreibeMetadaten(ausgabe, content) - print("ausgabe vorher: "+str(ausgabe)) - ausgabe = self.schreibeSegmentkopf(ausgabe, content) - print("ausgabe vorher: "+str(ausgabe)) - ausgabe["nachricht"]["datensegment"] = [] - for row in content["tabelle"]["person"]["_data"]: - print ("foreach row") - print (row) - satz = {} - satz = self.schreibeSegmentsatz(satz, content, row["_lfdNR"]) - # print("ausgabe vorher: "+str(ausgabe)) - ausgabe["nachricht"]["datensegment"].append(satz["datensegment"]) - return ausgabe - - """ Fuellt und ordnet Protokollknoten ein""" - def schreibeProtokoll(self, ausgabe, content): - ausgabe["protokoll"] = self.setProtokoll(content)["protokoll"] - return ausgabe - - def setProtokoll(self, content): - ausgabe = {} - d = datetime.datetime.now() - ausgabe = fcts.setMerkmal(ausgabe, '/protokoll/dokumentinstanz/datum', d.strftime("%Y%m%d")) - ausgabe = fcts.setMerkmal(ausgabe, '/protokoll/dokumentinstanz/uhrzeit', d.strftime("%H%M%S")) - ausgabe = fcts.setMerkmal(ausgabe, '/protokoll/dokumentinstanz/anwendung/anwendungsname', "Anwendungsname") - ausgabe = fcts.setMerkmal(ausgabe, '/protokoll/dokumentinstanz/anwendung/version', "Version") - ausgabe = fcts.setMerkmal(ausgabe, '/protokoll/dokumentinstanz/anwendung/hersteller', "StBA") - ausgabe = fcts.setMerkmal(ausgabe, '/protokoll/dokumentinstanz/ressourceID[@klasse="SDFMETA"]', "--RessourceID") - return ausgabe - - """ Fuellt und ordnet Absenderknoten ein""" - def schreibeAbsender(self, ausgabe, content, regAdr): - ausgabe["absender"] = self.setAbsender(content, regAdr) - return ausgabe - - def setAbsender(self, content, regAdr): - ausgabe = {} - for feld in Absender.FELDER: - ausgabe = fcts.setMerkmalContent(ausgabe, content, 0, feld) - return ausgabe - - """ Fuellt und ordnet Empfaengerknoten ein""" - def schreibeEmpfaenger(self, ausgabe, content): - ausgabe["empfaenger"] = self.setEmpfaenger(content)["empfaenger"] - return ausgabe - - def setEmpfaenger(self, content): - ausgabe = {} - ausgabe = fcts.setMerkmal(ausgabe, '/empfaenger/kennung[@klasse="STAID"]', '99') - return ausgabe - - """ Fuellt und ordnet Metadatenknoten ein""" - def schreibeMetadaten(self, ausgabe, content): - nachricht = self.setMetadaten(content) - for knoten in nachricht: - if knoten != "datensegment": - ausgabe[knoten] = nachricht[knoten] - return ausgabe - - def setMetadaten(self, content): - ausgabe = {} - d = datetime.datetime.now() - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/erhebung/kennung[@klasse="ERHID"]', 'ERHEBUNG_KENNUNG') - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/erhebung/ressource[@klasse="SDFMETA"]', 'ERHEBUNG_RESSOURCE_1') - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/erhebung/ressource[@klasse="SDF-ERZEUGUNG"]', 'ERHEBUNG_RESSOURCE_2') - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/berichtszeitraum/jahr', d.strftime("%Y")) - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/berichtsempfaenger/kennung[@klasse ="STAID"]', 'BERICHTSEMPFÄNGER_KENNUNG') - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/datenattribute/attribute::dezimalzeichen', 'DEZIMAL_ZEICHEN') - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/datenattribute/attribute::tausender-trennzeichen', 'TAUSENDER_TRENNZEICHEN') - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/hmm[@name="BerichtseinheitID"]/wert', 'BERICHTSEINHEIT_ID') - return ausgabe - - def schreibeSegmentkopf(self, ausgabe, content, ): - ausgabe = fcts.setMerkmal(ausgabe, '/nachricht/datensegment/meldungsID', 'MELDUNGS_ID') - return ausgabe - - def schreibeSegmentsatz(self, ausgabe, content, index): - for feld in Person.FELDER: - ausgabe = fcts.setMerkmalContent(ausgabe, content, index, feld) - return ausgabe - - -class Absender(): - FELDER = ("ABSENDER_KENNUNG", "ABSENDER_IDENTITÄT", "ABSENDER_TELEFON", "ABSENDER_EMAIL", "ABSENDER_FAX", "ABSENDER_URL", "BERICHTSEINHEIT_ID", "REGNAME") - - def __init__(self): - content = reader.readCsv("testdaten/allgemein/absender.csv", "keys") - self.keys = content["tabelle"]["absender"]["_keys"] - -class Vrfelder(): - def __init__(self): - with open(r'src/config/vrFelder.yml') as file: - content = yaml.full_load(file) - self.conf = content - - def getVrfeld(self, feld): - print("gerVrfeld "+feld) - if feld in self.conf["config"]: - print("gerVrfeld treffer"+feld) - return self.conf["config"][feld] - pass - -class Anschrift(): - FELDER = ("GEMSCHL", "HNR", "HNR_BUCHST", "HNR_TEILNR", "HNR_UNST", "ORTSTEIL", "ORTSTEIL_POST", "PLZ", "STOCKNR_WHG", "STR", "STRSCHL", "WOHNORT", "ZUSATZ") - -class Person(): - FELDER = ("IDNR", "DR", "FAMNAME", "FAMNAME_AE", "FAMNAME_BEST", "FAMNAME_ZUS", "FAMNAME_VOR", "FAMNAME_UNST", "GEB_DAT", "GEBNAME", "GEBNAME_BEST1", "GEBNAME_BEST2", "GEBNAME_UNST", "GEBSTAAT", "GEB_ORT", "GESCHLECHT", "STAATSANG", "VORNAME", "VORNAME_AE") - -""" -Werkzeuge, um Register-Merkmale zu erstellen, setzen, ... -""" -class fcts: - #+MULTI_NODE = ("mm", "hmm", "omm", "erhebung") - MULTI_NODE = ("erhebung") - #+ARRAY_NODE = ("satz", "ressource") - ARRAY_NODE = ("mm", "hmm", "omm", "satz", "ressource") - - def get - - def addMerkmal(baum, pfad, index, wert, ids=[]): - """ - Eingabe: - baum inklusive Elternknoten - pfad kompletter Pfad von Wurzel bis Blatt - index auf den Pfad - wert einzutragender Wert - Verarbeitung - basis der zu bearbeitende Knotenname extrahiert von Attributen - elem zu bearbeitender Knoten - zu betrachtende Fälle: - a: basis intendiert ein Array: - b: basis intendiert ein Dictionary: - c: basis ist ein einfacher Knoten - Weiter zu betrachten hinsichtlich Komplexität des Knotens - .a einfacher Knoten - .b Knoten mit Attribut als Blatt (anode+bnode) oder mit Unterknoten (nur anode) - Weiter zu betrachten hinsichtlich Pfadposition - ..a: Blatt - Wert eintragen und - ..b: im Pfad - weiterer rekursiver Aufruf - Ausgabe: - baum inklusive Elternknoten - """ - logdebug = 3 # Schalter zur Debug-Einstellung innerhalb der Funktion - if logdebug >= 1: print("--- addMerkmal "+pfad+" "+str(index)+" "+wert) - if logdebug >= 3: print("--- addMerkmal "+str(baum)) - - # # # # # # # # # # # # # # # # # # # # - # basis der zu bearbeitende Knotenname extrahiert von Attributen - # elem zu bearbeitender Knoten - elem = {} - a = pfad.strip('/').split('/') - anode = None # optional fuer Attribute - bnode = None # optional fuer direkte Wertzuordnung #text - basis = "" # Knotenname - ohne Attribute - - if ("[@" in a[index]): - if logdebug >= 1: print("0b") - basis = a[index][0:a[index].find("[@")] - attribs = a[index][a[index].find("[@")+1:a[index].find("]")] - aname = attribs[0:attribs.find("=")] - aval = attribs[attribs.find("=")+2:-1] - if logdebug >= 3 : print("0b "+basis+" : "+aname+" = "+aval) - aarr = [aname , aval] - anode = {} - anode[aname] = aval - if (index == len(a)-1): - barr = ["#text", wert] - bnode = {} - bnode["#text"] = wert - if logdebug >= 3 : print("0b "+basis+" "+str(anode)+" "+str(bnode)) - else: - basis = a[index] - if logdebug >= 3 : print("0b "+basis+" "+str(anode)+" "+str(bnode)) - if (basis in baum): - elem[basis] = baum[basis] - nindex = index+1 - if logdebug >= 1: print("1 "+a[index]+" "+wert+" "+str(baum)) - - # # # # # # # # # # # # # # # # # # # # - # zu betrachtende Fälle: - # a: basis intendiert ein Array: - # b: basis intendiert ein Dictionary: - # c: basis ist ein einfacher Knoten - # Weiter zu betrachten - # .a: Blatt - Wert eintragen und - # .b: im Pfad - weiterer rekursiver Aufruf - # # # Fall a : Array - if (basis in fcts.ARRAY_NODE): - if logdebug >= 1: print("a: ARRAY "+a[index-1]+"-"+basis+" "+str(baum)) - if (basis in baum): - if (isinstance(baum[basis], dict)): - print ("200 dict vorhanden") - if (len(baum[basis].keys()) <1): - elem[basis] = [] - elem[basis].append({}) - if (isinstance(baum[basis], list)): - print ("201 array vorhanden") - elem[basis] = baum[basis] - else: - print ("203 neues array") - elem[basis] = [] - elem[basis].append({}) - xnode = {} - if (anode ): - xnode = {} # Komplexitaetsfaelle in xnode setzen - if (anode): - if logdebug >= 3: print("a-b "+basis+" "+str(anode)) - ##elem[basis].append(anode) - if (not aarr[0] in elem[basis]): #+ - if logdebug >= 3: print("a-b "+basis+" anode ergaenzt "+str(anode)) - #-elem[basis].append(anode) - elem[basis][0][aarr[0]] = aarr[1] - xnode = anode - if (bnode): - if logdebug >= 3: print("-->a-b-a> kompl. Blatt "+basis+" "+str(bnode)) - #-elem[basis].append(bnode) - elem[basis][0][barr[0]] = barr[1] - baum[basis] = elem[basis] - if logdebug >= 3: print("<--a-b-a< kompl. Blatt "+basis+" "+str(elem)) - return baum - if logdebug >= 3: print("-->a-b-b> kompl. Pfad "+basis+" "+str(nindex)) - if ("[@" in a[nindex]): - subnode = a[nindex][0:a[nindex].find("[@")] - else: - subnode = a[nindex] - if not subnode in elem[basis][0]: - elem[basis][0][subnode] = {} - #+elem[basis].append(fcts.addMerkmal(xnode, pfad, nindex, wert)) - elem[basis][0][subnode] = fcts.addMerkmal(elem[basis][0][subnode], pfad, nindex, wert) - baum[basis] = elem[basis] - if logdebug >= 3: print("<--a-b-b< kompl. Pfad "+basis+""+str(baum)) - return baum ## - ##### Fall 3ab ## Dict - elif (basis in fcts.MULTI_NODE): - if logdebug >= 1: print("b: DICT "+basis) - if (not basis in baum): - print ("elem angelegt") - elem[basis] = {} - if (anode ): - if logdebug >= 3: print("b-b "+basis+" "+str(anode)) - elem[basis][aarr[0]] = aarr[1] - if (bnode): - elem[basis][barr[0]] = barr[1] - baum[basis] = elem[basis] - #elem[basis].append(bnode) - if logdebug >= 3: print("<<--b-b-a< kompl. Blatt "+basis+" "+str(index)+" "+str(elem)) - return baum - if ("[@" in a[index+1]): - subbasis = a[index+1][0:a[index+1].find("[@")] - if logdebug >= 3: print("-->b-b-b> kompl. Pfad "+basis+" "+str(index)+" "+str(elem)) - elem[basis] = fcts.addMerkmal(elem[basis], pfad, nindex, wert) - baum[basis] = elem[basis] - if logdebug >= 3: print("<--b-b-b< kompl. Pfad "+basis+" "+str(index)+" "+str(baum)) - return baum - else: - subbasis = a[index+1] - if logdebug >= 3: print("-->b-a-b> einf. Pfad "+basis+" "+str(index)+" "+str(elem)) - elem[basis][subbasis] = fcts.addMerkmal({}, pfad, nindex, wert) - baum[basis] = elem[basis] - if logdebug >= 3: print("<--b-a-b< einf. Pfad "+basis+" "+str(index)+" "+str(elem)) - return baum - # baum[basis] = elem[basis] - return baum[basis] - ###### Fall einfach + vorhanden - else: - if (basis in baum): - elem[basis] = baum[basis] - else: - elem[basis] = {} - if logdebug >= 1: print("c: EINFACH "+a[index-1]+"-"+basis+" "+str(baum)) - if (1 == len(a)-index): - if logdebug >= 3 : print("3b "+basis+" "+str(anode)+" "+str(bnode)) - if (anode): - elem[basis] = {} - elem[basis][aarr[0]] = aarr[1] - if logdebug >= 3 : print("3b1") - if (bnode): - elem[basis][barr[0]] = barr[1] - baum[basis] = elem[basis] - if logdebug >= 3 : print("<<-- c-b-a kompl. Blatt "+basis+" "+str(baum)) - return baum - elem[basis] = {} - elem[basis] = wert - baum[basis] = elem[basis] - if logdebug >= 3 : print("<<-- c-a-a einf. Blatt "+basis+" "+str(anode)+" "+str(baum)) - return baum - if (anode): - if logdebug >= 3: print("-->c-b-b> kompl. Pfad "+basis+" "+nindex) - elem[basis] = fcts.addMerkmal(elem[basis], pfad, nindex, wert) - baum[basis] = elem[basis] - if logdebug >= 3: print("<--c-b-b< kompl. Pfad "+basis+" "+nindex+" "+str(baum)) - return baum[basis][basis] ## - if logdebug >= 3: print("-->c-a-b> einf. Pfad "+basis) - baum[basis] = fcts.addMerkmal(elem[basis], pfad, nindex, wert) - if logdebug >= 3: print("<--c-a-b< einf. Pfad "+basis+" "+str(index)+" "+str(baum)) - return baum - - # ----------------------------------------- - def setMerkmal(baum, pfad, wert): - logdebug = 3 # Schalter zur Debug-Einstellung innerhalb der Funktion - if logdebug >= 1: print("----------------------------------------- setMerkmal ---------------------") - if logdebug >= 1: print("setMerkmal "+pfad+" "+wert) - #MULTI_NODE = ("mm", "hmm", "omm", "ressource") - elem = baum - if logdebug >= 2 : print ("setMerkmal "+pfad+" "+wert) - a = pfad.strip('/').split('/') - if ("[@" in a[0]): - basis = a[0][0:a[0].find("[@")] - else: - basis = a[0] - if (1 == len(a)): - baum[basis] = wert - return baum - if (basis in baum): - elem = baum[basis] - else: - elem = {} - # for i in range(0, len(a)): - if logdebug >= 1: print("setMerkmal "+basis+" "+str(elem)) - baum = fcts.addMerkmal(baum, pfad, 0, wert) - if logdebug >= 1: print("setMerkmal "+basis+" "+str(baum)) - if True: - return baum - if (1 == len(a)): - elem[a[0]] = wert - for i in range(0, len(a)): - if logdebug >= 3 : print("for "+str(i)+" "+a[i]) - if ("[@" in a[i]): - basis = a[i][0:a[i].find("[@")] - else: - basis = a[i] - print ("basis "+basis ) - #if (a[i] in elem): - if ((not basis in fcts.MULTI_NODE) and (basis in elem)): - if logdebug >= 3 : print("a "+basis) - elem = elem[basis] - else: - if ("[@" in a[i]): - if logdebug >= 3 : print("b "+a[i]) - node = a[i][0:a[i].find("[@")] - attribs = a[i][a[i].find("[@")+1:a[i].find("]")] - aname = attribs[0:attribs.find("=")] - aval = attribs[attribs.find("=")+2:-1] - if logdebug >= 3 : print("b "+node+" : "+aname+" = "+aval) - - if (node in elem): - if logdebug >= 3 : print("b "+node+" in elem ") - #if logdebug >= 3 : print(json.dumps(elem[node])) - if ("dict" in str(type(elem[node]))): - if logdebug >= 3 : print(node +" elem[node] ist dict") - xnode = elem[node] - elem[node] = [] - elem[node].append(xnode) - else: - if logdebug >= 3 : print(node+" elem[node] ist nicht dict"+str(type(elem[node]))) - pnode = {} - pnode[aname] = aval - print (str(i)+" ?= "+str(len(a))) - if (i == len(a)-1): - pnode["#text"] = wert - elem[node].append(pnode) - else: - elem[node] = {} - elem = elem[node] - elem[aname] = aval - if (i == len(a)-1): - elem["#text"] = wert - elif (i == len(a)-1): - if logdebug >= 3 : print("c "+a[i]) - elem[a[i]] = wert - else: - if logdebug >= 3 : print("d "+a[i]) - elem[str(a[i])] = {} - elem = elem[str(a[i])] - return baum - - def setMerkmalContent(baum, content, index, feld): - logdebug = 1 # Schalter zur Debug-Einstellung innerhalb der Funktion - if logdebug >= 1 : print ("setMerkmalContent "+feld+" "+content["absender"]["REGNAME"]) - vrfeld = content["vrfelder"].getVrfeld(feld) - if logdebug >= 2 : print(type(vrfeld)) - if logdebug >= 2 : print(json.dumps(vrfeld)) - tabelle = "#" - - - #print (type(vrfeld)+" "+str(vrfeld)) - if (("tabelle" in vrfeld.keys()) and (vrfeld["tabelle"] == "absender")): - if logdebug >= 2 : print ("absender") - pass - elif (not "Register" in vrfeld): - if logdebug >= 2 : print ("kein Register") - return baum - elif (vrfeld["Register"].find(content["absender"]["REGNAME"])<0): - if logdebug >= 2 : print("verboten ") - return baum - if (not ("tabelle" in vrfeld.keys())): - if logdebug >= 2 : print ("keine tabelle") - return baum - elif (vrfeld["tabelle"][0:1] == "#"): - if logdebug >= 2 : print ("# tabelle") - return baum - xpath = vrfeld["Xpath"] - tabelle = vrfeld["tabelle"] - if logdebug >= 3 : print ("args "+tabelle+" "+xpath) - # pfadkennung ersetzen - if (xpath.find('${')>0): - ersatz = xpath[xpath.find('${')+2:xpath.find('}')] - npath = xpath[0:xpath.find('${')]+content["absender"][ersatz]+xpath[xpath.find('}')+1:] - else: - npath = xpath - if logdebug >= 2 : print ("npath "+npath) - npath = npath.replace('nachricht/', '') - if logdebug >= 2 : print ("npath "+npath) - if (tabelle == "absender"): - baum = fcts.setMerkmal(baum, npath, content["absender"][feld]) - return baum - # Wert ermitteln aus Content - if logdebug >= 3 : print (str(index) +" tabelle "+str(content)) - if (not content["tabelle"][tabelle]["_data"][int(index)-1]): - if logdebug >= 2 : print ("Zeile fehlt") - return baum - if logdebug >= 3 : print (content["tabelle"][tabelle]["_data"][int(index)-1]) - if (not feld in content["tabelle"][tabelle]["_data"][int(index)-1].keys()): - if logdebug >= 2 : print ("Feld fehlt") - return baum - wert = content["tabelle"][tabelle]["_data"][int(index)-1][feld] - baum = fcts.setMerkmal(baum, npath, wert) - #print("ausgabe "+str(baum)) - return baum - - def test(): - print("test in fcts") - -class merkmal: - def __init__(self): - self.merkmale = "loadyaml" \ No newline at end of file