diff --git a/newmodeljsonparse.py b/newmodeljsonparse.py index d0b5accaa191b62ddcdf2ef7fb49caa42764bc71..3f79f25c28560afc194f91ac836db89dbe3a5f0c 100644 --- a/newmodeljsonparse.py +++ b/newmodeljsonparse.py @@ -76,12 +76,13 @@ class Function: def dimensionchange(string): dimarr = string["dimension"] - if dimarr: - value = dimarr[0] - else: - value = 0 - newdimension = {"dimension": value} - string.update(newdimension) + if type(dimarr) == list: + if dimarr: + value = dimarr[0] + else: + value = 0 + newdimension = {"dimension": value} + string.update(newdimension) def getdatatypes(argarray): @@ -97,14 +98,14 @@ def getdatatypes(argarray): def changerange(string): #print(type(string["range"][0])) - if string["range"] != "[None, None]": + if iskeythere(string, "range"): rangeval = string["range"] rangetuple = (rangeval[0], rangeval[1]) #print(rangetuple) string.update({"range": rangetuple}) #print(string["range"]) else: - del string["range"] + string.update({"range": (None, None)}) # print(string) def getParameters(parametersDict): @@ -134,6 +135,8 @@ def getMeasurements(measurementsDict): obj["value"] = getdefaultvalue(obj["dimension"], obj["datatype"]) #if i["range"]: changerange(obj) + if not iskeythere(obj, "unit"): + obj["unit"] = "UNITLESS" obj = json.dumps(i) measurementobji = json.loads(obj, object_hook=measurementJsonDecod) measurementobj.append(measurementobji) @@ -197,7 +200,7 @@ def getInterfaceparam(list1, interface, searched, jsoncomponents, searchinglist) else: return list1 -def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters): +def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone): for obj in jsoninterfaces: rootobj = {} if obj["elementType"] == "interface": @@ -206,6 +209,8 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur rootobj = search else: rootobj = obj + if obj["name"] in list(interfacesreturn.keys()): + continue objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents) if obj["name"] not in interfacesreturn.keys(): interfacesreturn[str(obj["name"])] = wf.openobject(obj["name"], rootobj["description"]) @@ -222,6 +227,7 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur # wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"]) #wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict) objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements) + print(objmeasurementlist) measurementsobjs = getMeasurements(objmeasurementlist) #print(objmeasurementlist) # print(interfacesreturn) @@ -231,41 +237,73 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur parameterobjs = getParameters(objparameterlist) # print(objparameterlist) wf.writeparameter(parameterobjs, interfacesreturn[str(obj["name"])]) - if len(objcomponentslist) <= 0: - return interfacesreturn - else: - for component in objcomponentslist: - return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters) - else: - if len(objcomponentslist) > 0: - return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters) - else: - - - + buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone) + return interfacesreturn + # if len(objcomponentslist) > 0: + # print("I got called") + # objcomponentsclone = objcomponentslist + # if len(objcomponentslist) == 0: + # if len(objcomponentsclone) > 0: + # print(" I got called") + # print(objcomponentslist) + # return buildComponents(interfacesreturn, objcomponentsclone, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone) + # else: + # return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone) + # + # else: + # if len(objcomponentslist) > 0: + # return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone) + # else: + # return interfacesreturn + + + + +def instantiateComponents(typesdict, interfaces, jsoncomponents, headnode, instantiatedict): + count = 0 + countcomponent = 0 + for interface in interfaces: + # root = {} + # if interface["elementType"] == "interface": + # for component in jsoncomponents: + # if interface["rootComponent"] == component["uuid"]: + # root = component + # else: + root = interface + + components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents) + if interface["name"] in list(instantiatedict.keys()): + count += 1 + # dictname = str(interface["name"]) + str(count) + # if interface["elementType"] == "interface": + # instantiatedict[str(dictname)] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count) + # else: + instantiatedict[str(interface["name"])] = wf.writeobjects(typesdict[str(interface["name"])], interface["name"], instantiatedict[str(headnode["name"])], count) + # for component in components: + # if component["name"] in list(instantiatedict.keys()): + # countcomponent += 1 + #dictnamecomponent = str(component["name"]) + str(count) + # instantiatedict[dictnamecomponent] = wf.writeobjects(typesdict[str(component["name"])], component["name"], instantiatedict[dictname], countcomponent) + if len(components) > 0: + instantiateComponents(typesdict,components , jsoncomponents, interface, instantiatedict) + + return instantiatedict def instantiate(typesdict, interfaces, jsoncomponents): - count = 0 - countcomponent = 0 instantiatedict = {} + #print(interfaces) for interface in interfaces: root = {} + count = 0 for component in jsoncomponents: if interface["rootComponent"] == component["uuid"]: root = component - components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents) - if interface["name"] in list(instantiatedict.keys()): - count += 1 - dictname = str(interface["name"]) + str(count) - instantiatedict[str(dictname)] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count) - for component in components: - if component["name"] in list(instantiatedict.keys()): - countcomponent += 1 - dictnamecomponent = str(component["name"]) + str(count) - instantiatedict[dictnamecomponent] = wf.writeobjects(typesdict[str(component["name"])], component["name"], instantiatedict[dictname], countcomponent) - - return instantiatedict + #dictname = str(interface["name"]) + str(count) + instantiatedict[str(interface["name"])] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count) + instantiateComponents(typesdict, components, jsoncomponents, interface, instantiatedict) + + def main(): try: @@ -331,7 +369,7 @@ def main(): # parameterobjs = getParameters(objparameterlist) # wf.writemeasurement(parameterobjs, interfacestypesdict[str(obj["name"])]) - typesdict = buildComponents({}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters) + typesdict = buildComponents({}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, []) print(typesdict) intantiateddict = instantiate(typesdict, jsoninterfaces, jsoncomponents)