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
Beispiel #2
0
    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)
Beispiel #3
0
    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"]
        )