def inject_data(): """Controls to Inject data about register records into an HTML template. @return: HTML form through which the HTML template can be filled and rendered. @rtype: str or flask response (redirect) """ if flask.request.method == "GET": return flask.render_template("inject_data.html") target_code = flask.request.form.get("input", "") names = parse_ljsl.find_names(target_code) reg_maps = ljmmm.get_device_modbus_maps(expand_names=True, inc_orig=True) dev_regs = reg_maps[lj_scribe.TARGET_DEVICE] tag_class_tuples = 0 tag_subtags_by_class = 0 # This is NOT the best way to fix this issue. # The code should use lj_scribe.TARGET_DEVICES!!! try: tag_class_tuples = lj_scribe.find_classes(names, dev_regs) except lj_scribe.RegisterNotFoundError as e: dev_regs = reg_maps[lj_scribe.TARGET_DEVICE_DIGIT] try: tag_class_tuples = lj_scribe.find_classes(names, dev_regs) tag_subtags_by_class = lj_scribe.organize_tag_by_class(tag_class_tuples, dev_regs) except lj_scribe.RegisterNotFoundError as e: return "Register %s not found in Modbus map." % e.missing_reg_name tag_subtags_by_class = lj_scribe.organize_tag_by_class(tag_class_tuples, dev_regs) original_names = map(lj_scribe.find_original_tag_str, names) summaries = map(lambda x: lj_scribe.render_tag_summary(*x), zip(tag_subtags_by_class, names, original_names)) original_names_to_summaries = zip(original_names, summaries) for (original_name, summary) in original_names_to_summaries: target_code = target_code.replace(original_name, summary) prefix = flask.render_template("scribe_prefix.html") postfix = flask.render_template("scribe_postfix.html") return prefix + target_code + postfix
def test_unknown_register(self): test_tag_entries = [ [ parse_ljsl.TagComponent("", "UNKNOWN", 200, 2, 3, "_POST", True, []) ] ] with self.assertRaises(lj_scribe.RegisterNotFoundError): classes = lj_scribe.find_classes(test_tag_entries, TEST_DEVICE_REGS)
def test_find_classes(self): test_tag_entries = ( [ PRE_POST_ORIG_TAG, ANOTHER_ORIG_TAG, parse_ljsl.TagComponent("", "PRE_", 200, 2, 3, "_POST", True, []) ], [ parse_ljsl.TagComponent("", "PRE_", 300, 2, 3, "_POST", True, []) ] ) classes = lj_scribe.find_classes(test_tag_entries, TEST_DEVICE_REGS) self.assertEqual(len(classes), 2) class_group_1 = classes[0] self.assertEqual(len(class_group_1), 3) sub_group_1 = class_group_1[0] sub_name_group_1 = map(lambda x: x[0]["name"], sub_group_1) self.assertEqual( sub_name_group_1, ["ORIG_PRE_100_POST", "ORIG_PRE_100_POST"] ) sub_group_2 = class_group_1[1] sub_name_group_2 = map(lambda x: x[0]["name"], sub_group_2) self.assertEqual( sub_name_group_2, ["ORIG_ANOTHER_200", "ORIG_ANOTHER_200"] ) sub_group_3 = class_group_1[2] sub_name_group_3 = map(lambda x: x[0]["name"], sub_group_3) self.assertEqual( sub_name_group_3, ["ORIG_PRE_100_POST", "ORIG_PRE_100_POST"] ) class_group_2 = classes[1] self.assertEqual(len(class_group_2), 1) sub_group_4 = class_group_2[0] sub_name_group_4 = map(lambda x: x[0]["name"], sub_group_4) self.assertEqual( sub_name_group_4, ["ORIG_PRE_100_POST", "ORIG_PRE_100_POST"] )