Ulrich Carmesin
2 years ago
10 changed files with 715 additions and 10 deletions
@ -0,0 +1,197 @@ |
|||
#!/usr/bin/python |
|||
# -*- coding: utf-8 -*- |
|||
# --------------------------------------------------------------------------------------------------------- |
|||
# Author : Ulrich Carmesin |
|||
# Source : gitea.ucarmesin.de |
|||
# --------------------------------------------------------------------------------------------------------- |
|||
import unittest |
|||
import inspect |
|||
import os |
|||
import json |
|||
import basic.program |
|||
import utils.path_tool |
|||
import utils.path_const as P |
|||
import utils.config_tool |
|||
import utils.data_const as D |
|||
import basic.toolHandling |
|||
import test.constants |
|||
import basic.component |
|||
import basic.constants as B |
|||
import utils.map_tool |
|||
import utils.file_tool |
|||
import test.testtools |
|||
import utils.tdata_tool |
|||
|
|||
HOME_PATH = test.constants.HOME_PATH |
|||
|
|||
conf = {} |
|||
# here you can select single testfunction for developping the tests |
|||
# "test_toolhandling", "test_parseSql" -> test of components |
|||
TEST_FUNCTIONS = ["test_02getIds", "test_03extractIds", "test_04getFieldVal", "test_05getValue", |
|||
"test_11mapTdata"] |
|||
TEST_FUNCTIONS = ["test_11mapTdata"] |
|||
verbose = False |
|||
|
|||
class MyTestCase(unittest.TestCase): |
|||
mymsg = "--------------------------------------------------------------" |
|||
|
|||
def test_03extractIds(self): |
|||
global mymsg |
|||
actfunction = str(inspect.currentframe().f_code.co_name) |
|||
cnttest = 0 |
|||
if actfunction not in TEST_FUNCTIONS: |
|||
return |
|||
job = test.testtools.getJob() |
|||
res = utils.map_tool.extractIds(job, "1") |
|||
self.assertEqual(res, ["1"]) |
|||
res = utils.map_tool.extractIds(job, "1, 2") |
|||
self.assertEqual(res, "1,2".split(",")) |
|||
res = utils.map_tool.extractIds(job, "1-3") |
|||
self.assertEqual(res, "1,2,3".split(",")) |
|||
res = utils.map_tool.extractIds(job, "1, 3-6, 8") |
|||
self.assertEqual(res, "1,3,4,5,6,8".split(",")) |
|||
cnttest += 4 |
|||
MyTestCase.mymsg += "\n----- "+actfunction+" : "+str(cnttest) |
|||
|
|||
|
|||
def test_02getIds(self): |
|||
global mymsg |
|||
actfunction = str(inspect.currentframe().f_code.co_name) |
|||
cnttest = 0 |
|||
if actfunction not in TEST_FUNCTIONS: |
|||
return |
|||
job = test.testtools.getJob() |
|||
path = utils.config_tool.getConfigPath(P.KEY_TESTCASE, "TC0001", "", job) |
|||
tdata = utils.tdata_tool.getCsvSpec(job.m, path, D.CSV_SPECTYPE_DATA) |
|||
args = {} |
|||
args[B.DATA_NODE_DATA] = tdata |
|||
args[B.DATA_NODE_STEPS] = tdata[B.DATA_NODE_STEPS][0] |
|||
args[utils.map_tool.ACT_ID] = {} |
|||
args[utils.map_tool.ID_LIST] = {} |
|||
ids = {} |
|||
res = utils.map_tool.getIds(job, args, "msgid={_steps._nr}") |
|||
print(res) |
|||
self.assertEqual(res[0], "1") |
|||
self.assertIn("msgid", args[utils.map_tool.ID_LIST]) |
|||
cnttest += 1 |
|||
res = utils.map_tool.getIds(job, args, "sender={_data.person._sender(_steps._nr)}") |
|||
print(res) |
|||
self.assertEqual(res[0], "firma") |
|||
args[B.DATA_NODE_STEPS] = tdata[B.DATA_NODE_STEPS][1] |
|||
res = utils.map_tool.getIds(job, args, "msgid={_steps._nr}") |
|||
self.assertEqual(res[1], "2") |
|||
self.assertIn("msgid", args[utils.map_tool.ID_LIST]) |
|||
cnttest += 1 |
|||
args[utils.map_tool.ACT_ID]["msgid"] = "1" |
|||
res = utils.map_tool.getIds(job, args, "posid={_data.product._nr,_pos(msgid)}") |
|||
self.assertEqual(res[0], ("1", "4")) |
|||
self.assertEqual(res[1], ("1", "5")) |
|||
cnttest += 1 |
|||
compName = "testcrmdb" |
|||
args[B.DATA_NODE_COMP] = test.testtools.getComp(compName) |
|||
comp = args[B.DATA_NODE_COMP] |
|||
conf = utils.config_tool.getConfig(D.DDL_FILENAME, compName, "person") |
|||
comp.conf[B.DATA_NODE_DDL] = {} |
|||
comp.conf[B.DATA_NODE_DDL]["person"] = conf |
|||
res = utils.map_tool.getIds(job, args, "fields={_comp.ddl.person}") |
|||
print(res) |
|||
args[utils.map_tool.ACT_ID]["posid"] = ("1", "4") |
|||
res = utils.map_tool.getConditions(job, args, "{posid}") |
|||
print(res) |
|||
self.assertEqual(res[0], ("1", "4")) |
|||
#self.assertEqual(res[1], "4") |
|||
cnttest += 1 |
|||
MyTestCase.mymsg += "\n----- "+actfunction+" : "+str(cnttest) |
|||
|
|||
|
|||
def test_04getFieldVal(self): |
|||
global mymsg |
|||
actfunction = str(inspect.currentframe().f_code.co_name) |
|||
cnttest = 0 |
|||
if actfunction not in TEST_FUNCTIONS: |
|||
return |
|||
job = test.testtools.getJob() |
|||
path = utils.config_tool.getConfigPath(P.KEY_TESTCASE, "TC0001", "", job) |
|||
tdata = utils.tdata_tool.getCsvSpec(job.m, path, D.CSV_SPECTYPE_DATA) |
|||
condIds = [["1"]] |
|||
args = {} |
|||
args[B.DATA_NODE_DATA] = tdata |
|||
res = utils.map_tool.getFieldVal(job, args, "person", "_sender", condIds) |
|||
print(res) |
|||
condIds = [["1"], ["4"]] |
|||
res = utils.map_tool.getFieldVal(job, args, "product", "descript", condIds) |
|||
print(res) |
|||
|
|||
def test_05getValue(self): |
|||
global mymsg |
|||
actfunction = str(inspect.currentframe().f_code.co_name) |
|||
cnttest = 0 |
|||
if actfunction not in TEST_FUNCTIONS: |
|||
return |
|||
job = test.testtools.getJob() |
|||
path = utils.config_tool.getConfigPath(P.KEY_TESTCASE, "TC0001", "", job) |
|||
tdata = utils.tdata_tool.getCsvSpec(job.m, path, D.CSV_SPECTYPE_DATA) |
|||
condIds = [["1"]] |
|||
args = {} |
|||
args[B.DATA_NODE_DATA] = tdata |
|||
args[B.DATA_NODE_STEPS] = tdata[B.DATA_NODE_STEPS][0] |
|||
args[utils.map_tool.ACT_ID] = {} |
|||
args[utils.map_tool.ID_LIST] = {} |
|||
#res = utils.map_tool.getValue(job, args, "msgid={_steps._nr}") |
|||
#-print(res) |
|||
#self.assertEqual(res, ['1']) |
|||
args[utils.map_tool.ACT_ID]["msgid"] = ['1'] |
|||
#res = utils.map_tool.getValue(job, args, "sender={_data.person._sender(msgid)}") |
|||
#self.assertEqual(res, ["firma"]) |
|||
#print(res) |
|||
print(args[utils.map_tool.ID_LIST]) |
|||
args[utils.map_tool.ACT_ID]["sender"] = "firma" |
|||
res = utils.map_tool.getValue(job, args, "{_catalog.sender.depart(sender)}") |
|||
self.assertEqual(res, "main") |
|||
res = utils.map_tool.getValue(job, args, "{_steps.args.action}") |
|||
print(res) |
|||
res = utils.map_tool.getValue(job, args, "{_par.tctime}") |
|||
print(res) |
|||
args[utils.map_tool.ACT_ID]["msgid"] = "1" |
|||
res = utils.map_tool.getValue(job, args, "{_data.person.famname(msgid)}") |
|||
print(res) |
|||
self.assertEqual(res, "Brecht") |
|||
args[utils.map_tool.ACT_ID]["msgid"] = "1" |
|||
# select row if field is missing |
|||
res = utils.map_tool.getValue(job, args, "{_data.person(msgid)}") |
|||
print(res) |
|||
res = utils.map_tool.getValue(job, args, "hier ist ein Text") |
|||
print(res) |
|||
# it is one row [{f_1: v_2, ...}] |
|||
|
|||
|
|||
def test_11mapTdata(self): |
|||
global mymsg |
|||
actfunction = str(inspect.currentframe().f_code.co_name) |
|||
cnttest = 0 |
|||
if actfunction not in TEST_FUNCTIONS: |
|||
return |
|||
job = test.testtools.getJob() |
|||
comp = test.testtools.getComp("testrest") |
|||
path = os.path.join(job.conf.confs[B.SUBJECT_PATH][B.ATTR_PATH_COMPS], "testrest", "mapping-rest.yml") |
|||
mapping = utils.file_tool.readFileDict(path, job.m) |
|||
path = utils.config_tool.getConfigPath(P.KEY_TESTCASE, "TC0001", "", job) |
|||
tdata = utils.tdata_tool.getCsvSpec(job.m, path, D.CSV_SPECTYPE_DATA) |
|||
res = utils.map_tool.mapTdata(job, mapping, tdata, tdata[B.DATA_NODE_STEPS][1], comp) |
|||
print(res) |
|||
for format in ["xml", "yml", "json"]: |
|||
path = os.path.join(job.conf.confs[B.SUBJECT_PATH][B.ATTR_PATH_TDATA], "temp", "result-rest."+format) |
|||
print(path) |
|||
utils.file_tool.writeFileDict(job.m, path, res) |
|||
doc = json.dumps(res, indent=0) |
|||
print(doc) |
|||
MyTestCase.mymsg += "\n----- "+actfunction+" : "+str(cnttest) |
|||
|
|||
|
|||
def test_zzz(self): |
|||
print(MyTestCase.mymsg) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
verbose = True |
|||
unittest.main() |
@ -0,0 +1,59 @@ |
|||
#!/usr/bin/python |
|||
# -*- coding: utf-8 -*- |
|||
# --------------------------------------------------------------------------------------------------------- |
|||
# Author : Ulrich Carmesin |
|||
# Source : gitea.ucarmesin.de |
|||
# --------------------------------------------------------------------------------------------------------- |
|||
import unittest |
|||
import inspect |
|||
import os |
|||
import basic.program |
|||
import utils.path_tool |
|||
import utils.path_const as P |
|||
import utils.config_tool |
|||
import utils.data_const as D |
|||
import basic.toolHandling |
|||
import test.constants |
|||
import basic.component |
|||
import basic.constants as B |
|||
import utils.file_abstract |
|||
import utils.file_tool |
|||
import test.testtools |
|||
import utils.tdata_tool |
|||
|
|||
HOME_PATH = test.constants.HOME_PATH |
|||
|
|||
conf = {} |
|||
# here you can select single testfunction for developping the tests |
|||
# "test_toolhandling", "test_parseSql" -> test of components |
|||
TEST_FUNCTIONS = ["test_11mapTdata"] |
|||
TEST_FUNCTIONS = ["test_05getValue"] |
|||
verbose = False |
|||
|
|||
class MyTestCase(unittest.TestCase): |
|||
mymsg = "--------------------------------------------------------------" |
|||
|
|||
|
|||
def test_11mapTdata(self): |
|||
global mymsg |
|||
actfunction = str(inspect.currentframe().f_code.co_name) |
|||
cnttest = 0 |
|||
if actfunction not in TEST_FUNCTIONS: |
|||
return |
|||
job = test.testtools.getJob() |
|||
comp = test.testtools.getComp("testrest") |
|||
path = os.path.join(job.conf.confs[B.SUBJECT_PATH][B.ATTR_PATH_COMPS], "testrest", "mapping-rest.yml") |
|||
mapping = utils.file_tool.readFileDict(path, job.m) |
|||
path = utils.config_tool.getConfigPath(P.KEY_TESTCASE, "TC0001", "", job) |
|||
tdata = utils.tdata_tool.getCsvSpec(job.m, path, D.CSV_SPECTYPE_DATA) |
|||
res = utils.file_abstract.mapTdata(job, mapping, tdata, tdata[B.DATA_NODE_STEPS][0], comp) |
|||
MyTestCase.mymsg += "\n----- "+actfunction+" : "+str(cnttest) |
|||
|
|||
|
|||
def test_zzz(self): |
|||
print(MyTestCase.mymsg) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
verbose = True |
|||
unittest.main() |
@ -0,0 +1,375 @@ |
|||
#!/usr/bin/python |
|||
# -*- coding: utf-8 -*- |
|||
# --------------------------------------------------------------------------------------------------------- |
|||
# Author : Ulrich Carmesin |
|||
# Source : gitea.ucarmesin.de |
|||
# --------------------------------------------------------------------------------------------------------- |
|||
import os |
|||
import re |
|||
import basic.program |
|||
import basic.catalog |
|||
import utils.config_tool |
|||
import basic.constants as B |
|||
import basic.toolHandling |
|||
import utils.data_const as D |
|||
import utils.file_tool |
|||
import utils.path_tool |
|||
import basic.catalog |
|||
|
|||
ACT_ID = "actid" |
|||
ID_LIST = "idlist" |
|||
MAP_ID = "_id" |
|||
MAP_FOR = "_foreach" |
|||
MAP_ROW = "_row" |
|||
MAP_FCTS = [ MAP_FOR, MAP_ID, MAP_ROW ] |
|||
MODUL_NAME = "map_tool" |
|||
|
|||
|
|||
def mapTdata(job, mapping, tdata, step, comp): |
|||
""" |
|||
initialize the mapping from testdata into the mapping-structure |
|||
:param job: |
|||
:param mapping: |
|||
:param tdata: |
|||
:param step: |
|||
:param comp: |
|||
:return: |
|||
""" |
|||
verify = job.getDebugLevel(MODUL_NAME) |
|||
out = {} |
|||
path = "" |
|||
job.debug(verify, mapping) |
|||
args = {} |
|||
args[B.DATA_NODE_COMP] = comp |
|||
args[B.DATA_NODE_DATA] = tdata |
|||
args[B.DATA_NODE_STEPS] = step |
|||
args[ACT_ID] = {} |
|||
args[ID_LIST] = {} |
|||
out = mapElement(job, args, mapping, path, out) |
|||
job.debug(verify, ">>>>>>>>>>> \n"+str(out)) |
|||
return out |
|||
|
|||
|
|||
def mapElement(job, args, elem, path, out): |
|||
""" |
|||
recursive mapping with building the dict of the testdata |
|||
:param job: |
|||
:param args: |
|||
:param elem: |
|||
:param path: |
|||
:param out: |
|||
:return: |
|||
""" |
|||
verify = job.getDebugLevel(MODUL_NAME) |
|||
job.debug(verify, "mapElem "+path+" id: "+str(args[ACT_ID])) |
|||
if isinstance(elem, dict): |
|||
job.debug(verify, "##### dict ") |
|||
nodes = [] |
|||
attrNodes = [] |
|||
leafNodes = [] |
|||
objNodes = [] |
|||
for k in elem: |
|||
if MAP_ID in elem[k] or MAP_FOR in elem[k]: |
|||
objNodes.append(k) |
|||
elif k[0:1] == '@' or k[0:1] == '#': |
|||
attrNodes.append(k) |
|||
else: |
|||
leafNodes.append(k) |
|||
job.debug(verify, "nodes "+str(attrNodes)+" - "+str(leafNodes)+" - "+str(objNodes)) |
|||
nodes = attrNodes + leafNodes + objNodes |
|||
for k in nodes: |
|||
# iterating this elem is declared inside of the elem |
|||
# like foreach but only one element |
|||
job.debug(verify, "# # "+k) |
|||
if MAP_ID in elem[k] or MAP_FOR in elem[k]: |
|||
job.debug(verify, "# + k in obj : val "+k) |
|||
if MAP_ID in elem[k]: |
|||
key = elem[k][MAP_ID][0:elem[k][MAP_ID].find("=")] |
|||
idlist = getIds(job, args, elem[k][MAP_ID]) |
|||
if len(idlist) > 1: |
|||
uniqueKeys = {} |
|||
for x in idlist: |
|||
uniqueKeys[x] = x |
|||
if len(uniqueKeys) > 1: |
|||
raise Exception("bei keyword _id there is only one element allowed "+str(idlist)) |
|||
else: |
|||
idlist = uniqueKeys.keys() |
|||
elif MAP_FOR in elem[k]: |
|||
key = elem[k][MAP_FOR][0:elem[k][MAP_FOR].find("=")] |
|||
idlist = getIds(job, args, elem[k][MAP_FOR]) |
|||
sublist = [] |
|||
a = path.split(",") |
|||
a.append(k) |
|||
npath = ",".join(a) |
|||
for id in idlist: |
|||
args[ACT_ID][key] = str(id) |
|||
if MAP_ROW in elem[k]: |
|||
row = getRow(job, args, elem[k][MAP_ROW]) |
|||
sublist.append(mapElement(job, args, elem[k], npath, {})) |
|||
out[k] = sublist |
|||
elif k == MAP_ID or k == MAP_FOR or k == MAP_ROW: |
|||
job.debug(verify, "# + k in MAP : continue "+k) |
|||
continue |
|||
else: |
|||
job.debug(verify, "# + k in leaf : val "+k) |
|||
a = path.split(",") |
|||
a.append(k) |
|||
npath = ",".join(a) |
|||
job.debug(verify, "mapElem - dict "+k) |
|||
out[k] = mapElement(job, args, elem[k], npath, {}) |
|||
elif isinstance(elem, list): |
|||
out = [] |
|||
i = 0 |
|||
for k in elem: |
|||
job.debug(verify, "mapElem - list "+str(k)) |
|||
a = path.split(",") |
|||
a.append(str(i)) |
|||
npath = ",".join(a) |
|||
out.append(mapElement(job, args, elem[i], path, {})) |
|||
i += 1 |
|||
else: |
|||
job.debug(verify, "mapElem - leaf " + elem) |
|||
|
|||
if elem[0:1] == "{" and elem[-1:] == "}": |
|||
elem = elem[1:-1] |
|||
out = toSimpleType(job, getValue(job, args, elem)) |
|||
return out |
|||
|
|||
|
|||
def toSimpleType(job, value): |
|||
if isinstance(value, (list, tuple)) and len(value) == 1: |
|||
return value[0] |
|||
return value |
|||
|
|||
def extractIds(job, idval): |
|||
ids = [] |
|||
if isinstance(idval, list) or isinstance(idval, tuple): |
|||
a = idval |
|||
else: |
|||
a = idval.split(",") |
|||
for k in a: |
|||
if "-" in k: |
|||
b = k.split("-") |
|||
for i in range(int(b[0].strip()), int(b[1].strip())+1): |
|||
ids.append(str(i).strip()) |
|||
elif isinstance(k, str): |
|||
ids.append(k.strip()) |
|||
else: |
|||
ids.append(k) |
|||
return ids |
|||
|
|||
|
|||
def getRow(job, args, fieldkey): |
|||
a = fieldkey.split(".") |
|||
row = getValue(job, args, fieldkey) |
|||
if B.DATA_NODE_ROW not in args: args[B.DATA_NODE_ROW] = {} |
|||
a[1] = a[1][0:a[1].find("(")] |
|||
args[B.DATA_NODE_ROW][a[1]] = row[0] |
|||
return row |
|||
|
|||
def getIds(job, args, fieldkey): |
|||
""" |
|||
sets the id resp list of ids into args[idlist] |
|||
the fieldkey has a formula like id={_source.table.field(condition)} |
|||
:param job: |
|||
:param args: |
|||
:param fieldky: |
|||
:return: |
|||
""" |
|||
verify = job.getDebugLevel(MODUL_NAME) |
|||
job.debug(verify, "match = "+fieldkey) |
|||
out = [] |
|||
idfield = fieldkey |
|||
if re.match(r"(.+)\=(.+)", fieldkey): |
|||
res = re.search(r"(.+)\=(.+)", fieldkey) |
|||
idfield = res.group(1) |
|||
fieldkey = res.group(2) |
|||
if fieldkey[0:1] == "{" and fieldkey[-1:] == "}": |
|||
fieldkey = fieldkey[1:-1] |
|||
if "temp" not in args: args["temp"] = {} |
|||
i = 0 |
|||
while "(" in fieldkey and ")" in fieldkey: |
|||
innerCond = fieldkey[fieldkey.rfind("(")+1:fieldkey.find(")")] |
|||
if "." not in innerCond: |
|||
break |
|||
innerkey = "temp_"+str(i) |
|||
args["temp"][innerkey] = {} |
|||
args["temp"][innerkey]["idfield"] = idfield |
|||
args["temp"][innerkey]["fieldkey"] = fieldkey |
|||
innerlist = getIds(job, args, innerkey+"={"+innerCond+"}") |
|||
args[ACT_ID][innerkey] = ",".join(innerlist) |
|||
fieldkey = fieldkey.replace(innerCond, innerkey) |
|||
idfield = args["temp"][innerkey]["idfield"] |
|||
i += 1 |
|||
if i > 3: |
|||
raise Exception("too much searches "+str(args["temp"])) |
|||
val = getValue(job, args, fieldkey) |
|||
idlist = extractIds(job, val) |
|||
args[ID_LIST][idfield] = idlist |
|||
job.debug(verify, "idlist " + str(args[ID_LIST])) |
|||
return idlist |
|||
|
|||
|
|||
def getConditions(job, args, fieldkey): |
|||
""" |
|||
gets a list of condition-value |
|||
:param job: |
|||
:param args: |
|||
:param fieldkey: in formula (c_1, c_2, ..) |
|||
:return: [v_1} ..] |
|||
""" |
|||
verify = job.getDebugLevel(MODUL_NAME) |
|||
while fieldkey[0:1] == "(" and fieldkey[-1:] == ")": |
|||
fieldkey = fieldkey[1:-1] |
|||
while fieldkey[0:1] == "{" and fieldkey[-1:] == "}": |
|||
fieldkey = fieldkey[1:-1] |
|||
out = [] |
|||
a = fieldkey.split(",") |
|||
if len(a) > 1: |
|||
job.m.logError("map-condition should not have more parts - use tupel "+fieldkey) |
|||
for k in a: |
|||
if "." in k: |
|||
raise Exception("Formatfehler in " + fieldkey) |
|||
job.debug(verify, "actid " + str(args[ACT_ID])) |
|||
idelem = {} |
|||
idelem[k] = args[ACT_ID][k] |
|||
out.append(args[ACT_ID][k]) |
|||
return out |
|||
|
|||
|
|||
def getValue(job, args, fieldkey): |
|||
""" |
|||
gets the value of the formula like {_source.table.field(condition)} |
|||
:param job: |
|||
:param args: |
|||
:param fieldkey: |
|||
:return: |
|||
""" |
|||
verify = job.getDebugLevel(MODUL_NAME) |
|||
job.debug(verify, "getValue "+fieldkey) |
|||
while fieldkey[0:1] == "{" and fieldkey[-1:] == "}": |
|||
fieldkey = fieldkey[1:-1] |
|||
val = "" |
|||
idfield = "" |
|||
source = "" |
|||
table = "" |
|||
field = "" |
|||
cond = "" |
|||
condIds = [] |
|||
# special cases of id-management |
|||
# args[actid][xid] = actual id with name xid |
|||
# args[idlist][xid] = list of all ids with name xid |
|||
# a) declaration of the id : id={fielddefinition} |
|||
if re.match(r".+\=.+", fieldkey): |
|||
job.debug(verify, "getValue 222 " + fieldkey) |
|||
raise Exception("getIds sollte an passender Stelle direkt aufgerufen werden "+fieldkey) |
|||
return getIds(job, args, fieldkey) |
|||
# b) set of defined ids - neither fielddefinition nor a function |
|||
#elif "." not in fieldkey and "(" not in fieldkey or re.match(r"\(.+\)", fieldkey): |
|||
#print("getValue 226 " + fieldkey) |
|||
#raise Exception("getConditions sollte an passender Stelle direkt aufgerufen werden") |
|||
#return getConditions(job, args, fieldkey) |
|||
# fielddefinition with .-separated parts |
|||
b = fieldkey.split(".") |
|||
job.debug(verify, "match field "+fieldkey) |
|||
if re.match(r"(_.+)\..+\..+\(.+\)", fieldkey): |
|||
res = re.match(r"(_.+)\.(.+)\.(.+\(.+\))", fieldkey) |
|||
job.debug(verify, "match mit ()") |
|||
source = res.group(1) |
|||
table = res.group(2) |
|||
field = res.group(3) |
|||
#cond = res.group(4) |
|||
#condIds = getValue(job, args, cond) |
|||
elif len(b) == 1: |
|||
field = b[0] |
|||
elif len(b) == 2: |
|||
source = b[0] |
|||
field = b[1] |
|||
elif len(b) == 3: |
|||
source = b[0] |
|||
table = b[1] |
|||
field = b[2] |
|||
if re.match(r".+\(.+\)", field): |
|||
res = re.match(r"(.+)\((.+)\)", field) |
|||
field = res.group(1) |
|||
cond = res.group(2) |
|||
condIds = getConditions(job, args, cond) |
|||
job.debug(verify, source + " - " + table + " - " + field + " - " + cond + " : " + str(condIds)) |
|||
if source == B.DATA_NODE_ROW: |
|||
if table not in args[B.DATA_NODE_ROW]: |
|||
raise Exception("row not initialiazed for table "+table+" "+str(args[B.DATA_NODE_ROW])) |
|||
row = args[B.DATA_NODE_ROW][table] |
|||
val = row[field] |
|||
elif source == B.DATA_NODE_DATA: |
|||
job.debug(verify, "data " + b[1]) |
|||
if len(b) == 3: |
|||
job.debug(verify, table + ", " + field + ", " + cond + ", " + str(condIds)) |
|||
val = toSimpleType(job, getFieldVal(job, args, table, field, condIds)) |
|||
elif len(b) == 2: |
|||
job.debug(verify, table + ", " + field + ", " + cond + ", " + str(condIds)) |
|||
val = getTdataRow(job, args[B.DATA_NODE_DATA], field, condIds) |
|||
elif source == B.DATA_NODE_STEPS: |
|||
job.debug(verify, "steps " + table+" - "+ field) |
|||
if hasattr(args[B.DATA_NODE_STEPS], field): |
|||
val = getattr(args[B.DATA_NODE_STEPS], field) |
|||
elif hasattr(args[B.DATA_NODE_STEPS], table): |
|||
row = getattr(args[B.DATA_NODE_STEPS], table) |
|||
if field in row: |
|||
val = row[field] |
|||
elif source[1:] == B.DATA_NODE_PAR: |
|||
job.debug(verify, "par " + b[1]) |
|||
if getattr(job.par, b[1]): |
|||
val = getattr(job.par, b[1]) |
|||
elif source == B.DATA_NODE_CATALOG: |
|||
job.debug(verify, "catalog " + table+", "+ field) |
|||
if len(b) != 3: |
|||
job.debug(verify, "catalog-Fehler") |
|||
return "Fehler-145" |
|||
row = basic.catalog.Catalog.getInstance().getValue(table, args[ACT_ID][cond], job) |
|||
if isinstance(row, dict) and field in row: |
|||
val = row[field] |
|||
elif source[1:] == B.DATA_NODE_COMP: |
|||
job.debug(verify, "comp "+table+", "+field) |
|||
comp = args[B.DATA_NODE_COMP] |
|||
if table == B.DATA_NODE_DDL: |
|||
fields = comp.conf[B.DATA_NODE_DDL][field][B.DATA_NODE_HEADER] |
|||
val = ",".join(fields) |
|||
else: |
|||
val = fieldkey |
|||
job.debug(verify, "return val "+str(val)) |
|||
return val |
|||
|
|||
def getFieldVal(job, args, table, field, condIds): |
|||
out = [] |
|||
fields = field.split(",") |
|||
for row in getTdataRow(job, args[B.DATA_NODE_DATA], table, condIds): |
|||
if len(fields) == 1 and field in row: |
|||
out.append( str(row[field]).strip()) |
|||
else: |
|||
tup = tuple() |
|||
for f in fields: |
|||
if f in row: |
|||
t = tuple( str(row[f]).strip() ) |
|||
tup = tup + t |
|||
else: |
|||
raise Exception("field is missing in row "+f+", "+str(row)) |
|||
out.append(tup) |
|||
return out |
|||
|
|||
def getTdataRow(job, tdata, table, condIds): |
|||
verify = job.getDebugLevel(MODUL_NAME) |
|||
out = [] |
|||
idFields = {} |
|||
job.debug(verify, "getTdata "+str(condIds)) |
|||
for i in range(0, len(condIds)): |
|||
idFields[tdata[B.DATA_NODE_TABLES][table][B.DATA_NODE_HEADER][i]] = condIds[i] |
|||
job.debug(verify, "idFields "+str(idFields)) |
|||
for row in tdata[B.DATA_NODE_TABLES][table][B.DATA_NODE_DATA]: |
|||
i = 0 |
|||
for k in idFields: |
|||
for j in range(0, len(idFields[k])): |
|||
if row[k] == idFields[k][j]: |
|||
i += 1 |
|||
if i == len(idFields): |
|||
out.append(row) |
|||
return out |
Loading…
Reference in new issue