Fixes for cluster namings and cell enhancements
diff --git a/ci_checker/reclass_cmp.py b/ci_checker/reclass_cmp.py
index b55ab2e..53a47b6 100644
--- a/ci_checker/reclass_cmp.py
+++ b/ci_checker/reclass_cmp.py
@@ -12,6 +12,17 @@
from ci_checker.common import base_config, logger, logger_cli, PKG_DIR
+global prefix_name
+global model_name_1, model_path_1
+global model_name_2, model_path_2
+
+prefix_name = "emk"
+model_name_1 = "dev"
+model_path_1 = "/Users/savex/proj/mediakind/reclass-dev"
+model_name_2 = "stg"
+model_path_2 = "/Users/savex/proj/mediakind/reclass-stg"
+
+
class ModelComparer(object):
"""Collection of functions to compare model data.
"""
@@ -105,10 +116,28 @@
def find_changes(dict1, dict2, path=""):
_report = {}
for k in dict1.keys():
- _new_path = path + ":" + k
+ if not isinstance(k, str):
+ _new_path = path + ":" + str(k)
+ else:
+ _new_path = path + ":" + k
if k == "_source":
continue
- if dict2 is None or k not in dict2:
+ # check if this is an env name cluster entry
+ if dict2 is not None and \
+ k == model_name_1 and \
+ model_name_2 in dict2.keys():
+ k1 = model_name_1
+ k2 = model_name_2
+ if type(dict1[k1]) is dict:
+ if path == "":
+ _new_path = k1
+ _child_report = find_changes(
+ dict1[k1],
+ dict2[k2],
+ _new_path
+ )
+ _report.update(_child_report)
+ elif dict2 is None or k not in dict2:
# no key in dict2
_report[_new_path] = {
"type": "value",
@@ -116,10 +145,6 @@
"str_values": [
"{}".format(dict1[k]),
"n/a"
- ],
- "str_short": [
- "{:25.25}...".format(str(dict1[k])),
- "n/a"
]
}
logger.info(
@@ -135,20 +160,38 @@
_new_path
)
_report.update(_child_report)
- elif type(dict1[k]) is list:
+ elif type(dict1[k]) is list and type(dict2[k]) is list:
# use ifilterfalse to compare lists of dicts
- _removed = list(
- itertools.ifilterfalse(
- lambda x: x in dict2[k],
- dict1[k]
+ try:
+ _removed = list(
+ itertools.ifilterfalse(
+ lambda x: x in dict2[k],
+ dict1[k]
+ )
)
- )
- _added = list(
- itertools.ifilterfalse(
- lambda x: x in dict1[k],
- dict2[k]
+ _added = list(
+ itertools.ifilterfalse(
+ lambda x: x in dict1[k],
+ dict2[k]
+ )
)
- )
+ except TypeError as e:
+ # debug routine,
+ # should not happen, due to list check above
+ logger.error(
+ "Caught lambda type mismatch: {}".format(
+ e.message
+ )
+ )
+ logger_cli.warning(
+ "Types mismatch for correct compare: "
+ "{}, {}".format(
+ type(dict1[k]),
+ type(dict2[k])
+ )
+ )
+ _removed = None
+ _added = None
_original = ["= {}".format(item) for item in dict1[k]]
if _removed or _added:
_removed_str_lst = ["- {}".format(item)
@@ -167,13 +210,6 @@
'\n'.join(_removed_str_lst),
'\n'.join(_added_str_lst)
)
- ],
- "str_short": [
- "{} items".format(len(dict1[k])),
- "{}\n{}".format(
- '\n'.join(_removed_str_lst),
- '\n'.join(_added_str_lst)
- )
]
}
logger.info(
@@ -192,33 +228,41 @@
"{}".format('\n'.join(_added_str_lst))
)
else:
- if dict1[k] != dict2[k]:
- _str1 = str(dict1[k])
- _str1_cut = "{:20.20}...".format(str(dict1[k]))
- _str2 = str(dict2[k])
- _str2_cut = "{:20.20}...".format(str(dict2[k]))
+ # in case of type mismatch
+ # considering it as not equal
+ d1 = dict1
+ d2 = dict2
+ val1 = d1[k] if isinstance(d1, dict) else d1
+ val2 = d2[k] if isinstance(d2, dict) else d2
+ try:
+ match = val1 == val2
+ except TypeError as e:
+ logger.warning(
+ "One of the values is not a dict: "
+ "{}, {}".format(
+ str(dict1),
+ str(dict2)
+ ))
+ match = False
+ if not match:
_report[_new_path] = {
"type": "value",
- "raw_values": [dict1[k], dict2[k]],
+ "raw_values": [val1, val2],
"str_values": [
- "{}".format(dict1[k]),
- "{}".format(dict2[k])
- ],
- "str_short": [
- _str1 if len(_str1) < 20 else _str1_cut,
- _str2 if len(_str1) < 20 else _str2_cut,
+ "{}".format(val1),
+ "{}".format(val2)
]
}
logger.info("{}: {}, {}".format(
_new_path,
- dict1[k],
- dict2[k]
+ val1,
+ val2
))
return _report
# tmp report for keys
diff_report = find_changes(
- self.models["inspur_Aug"],
- self.models["inspur_Original"]
+ self.models[model_name_1],
+ self.models[model_name_2]
)
# prettify the report
for key in diff_report.keys():
@@ -236,7 +280,7 @@
"param": _param_path,
})
- diff_report["diff_names"] = ["inspur_Aug", "inspur_Original"]
+ diff_report["diff_names"] = [model_name_1, model_name_2]
return diff_report
@@ -244,16 +288,17 @@
if __name__ == '__main__':
mComparer = ModelComparer()
mComparer.load_model_tree(
- 'inspur_Aug',
- '/Users/savex/proj/inspur_hc/reclass_cmp/reclass-20180810'
+ model_name_1,
+ model_path_1
)
mComparer.load_model_tree(
- 'inspur_Original',
- '/Users/savex/proj/inspur_hc/reclass_cmp/reclass_original'
+ model_name_2,
+ model_path_2
)
diffs = mComparer.generate_model_report_tree()
- report_file = "./mdl_diff_original.html"
+ report_file = \
+ prefix_name + "-" + model_name_1 + "-vs-" + model_name_2 + ".html"
report = reporter.ReportToFile(
reporter.HTMLModelCompare(),
report_file
diff --git a/templates/model_tree_cmp_tmpl.j2 b/templates/model_tree_cmp_tmpl.j2
index 81cb2ae..cc543e0 100644
--- a/templates/model_tree_cmp_tmpl.j2
+++ b/templates/model_tree_cmp_tmpl.j2
@@ -120,11 +120,14 @@
.pkgName {
font-size: 1em;
padding-left: 10px;
+ max-width: 800px;
}
.version {
- font-size: 0.8em;
+ font-size: 1em;
text-align: left;
+ max-width: 400px;
+ overflow-wrap: break-word;
}
.differ {
@@ -222,13 +225,10 @@
<div class="param">{{ diffs[diff]["param"] }}</div>
</td>
<td class="version">
- <div class="tooltip">{{ diffs[diff]["str_short"][0] | linebreaks }}
- <pre class="tooltiptext">{{ diffs[diff]["str_values"][0] | linebreaks }}</pre>
- </div>
+ <div><pre>{{ diffs[diff]["str_values"][0] | linebreaks }}</pre></div>
</td>
<td class="version">
- <div class="tooltip">{{ diffs[diff]["str_short"][1] | linebreaks }}
- <pre class="tooltiptext">{{ diffs[diff]["str_values"][1] | linebreaks }}</pre>
+ <div><pre>{{ diffs[diff]["str_values"][1] | linebreaks }}</pre></div>
</td>
</tr>
{% endfor %}