示例#1
0
    def test_multi_line_pattern_parse_optional(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(
            regex=r"Row1 name: (.*)", regex_groups=["torrentName"]
        )
        th.config.insert_multi_regex(
            regex=r"Row2 g2: (.*)", regex_groups=["$g2"], optional=True
        )
        th.config.insert_multi_regex(
            regex=r"Row3 g3: (.*)",
            regex_groups=["$g3"],
        )
        th.config.insert_multi_regex(
            regex=r"Row4 g4: (.*)", regex_groups=["$g4"], optional=True
        )

        var = announce_parser.parse(th, "Row1 name: another_name")
        self.assertEqual(var, None, "No match should return None")

        var = announce_parser.parse(th, "Row2 g2: g2_text")
        self.assertEqual(var, None, "No match should return None")

        var = announce_parser.parse(th, "Row3 g3: g3_text")
        self.assertEqual(len(var), 2 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "another_name", "Name did not match")
        self.assertEqual(var["$g2"], "g2_text", "g2 did not match")
        self.assertEqual(var["$g3"], "g3_text", "g2 did not match")
示例#2
0
    def test_multi_line_pattern_simple(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(
            regex=r"Row1 name: (.*)", regex_groups=["torrentName"]
        )
        th.config.insert_multi_regex(regex=r"Row2 g2: (.*)", regex_groups=["$g2"])
        th.config.insert_multi_regex(regex=r"Row3 g3: (.*)", regex_groups=["$g3"])

        var = announce_parser.parse(th, "Row2 g2: g2_error")
        self.assertEqual(var, None, "Should return None if matched rows not in order")

        # torrentName has extra whitespace added
        var = announce_parser.parse(th, "Row1 name:  the_name")
        self.assertEqual(var, None, "No match should return None")

        var = announce_parser.parse(th, "Row3 g3: g3_error")
        self.assertEqual(var, None, "Should return None if matched rows not in order")

        var = announce_parser.parse(th, "Row2 g2: g2_text")
        self.assertEqual(var, None, "Announcement is None")

        var = announce_parser.parse(th, "Row3 g3: g3_text")
        self.assertEqual(len(var), 2 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "the_name", "Name did not match")
        self.assertEqual(var["$g2"], "g2_text", "g2 did not match")
        self.assertEqual(var["$g3"], "g3_text", "g3 did not match")
示例#3
0
    def test_multi_line_pattern_discard_too_old(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(
            regex=r"Row1 name: (.*)", regex_groups=["torrentName"]
        )
        th.config.insert_multi_regex(regex=r"Row2 g2: (.*)", regex_groups=["$g2"])

        var = announce_parser.parse(th, "Row1 name: a_name")
        self.assertEqual(var, None, "No match should return None")

        var = announce_parser.parse(th, "Row2 g2: g2_text")
        self.assertEqual(
            var, None, "Announcement should be discarded for being too old"
        )
示例#4
0
    def test_multi_line_pattern_announcement_completed_just_in_time(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(
            regex=r"Row1 name: (.*)", regex_groups=["torrentName"]
        )
        th.config.insert_multi_regex(regex=r"Row2 g2: (.*)", regex_groups=["$g2"])

        var = announce_parser.parse(th, "Row1 name: a_name")
        self.assertEqual(var, None, "No match should return None")

        var = announce_parser.parse(th, "Row2 g2: g2_text")
        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "a_name", "Name did not match")
        self.assertEqual(var["$g2"], "g2_text", "g2 did not match")
示例#5
0
    def test_single_empty_groups(self):
        th = TrackerHelper()
        th.config.insert_regex(
            regex=r"(.*) / (.*)",
            regex_groups=["torrentName", "$g2"],
        )

        var = announce_parser.parse(th, "  / the_group")
        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["$g2"], "the_group", "$g2 did not match")

        var = announce_parser.parse(th, "a_name /  ")
        self.assertEqual(len(var), len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "a_name", "$g2 did not match")
示例#6
0
    def test_single_non_capture_group(self):
        th = TrackerHelper()
        th.config.insert_regex(
            regex=r"(.*) /(?: (.*))?",
            regex_groups=["torrentName", "$g2"],
        )

        var = announce_parser.parse(th, "name /")
        self.assertEqual(len(var), len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "name", "Name did not match")

        var = announce_parser.parse(th, "name / group")
        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "name", "Name did not match")
        self.assertEqual(var["$g2"], "group", "g2 did not match")
示例#7
0
    def test_single_line_ignore_unexpected(self):
        th = TrackerHelper()
        th.config.insert_regex(
            regex=r"(.*) / (.*)",
            regex_groups=["torrentName", "$g2"],
        )
        th.config.insert_ignore(r".*/.*", False)

        var = announce_parser.parse(th, "something else")
        self.assertEqual(var, None, "Should return None when ignored match")

        var = announce_parser.parse(th, "a_name / a_group")
        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "a_name", "Name did not match")
        self.assertEqual(var["$g2"], "a_group", "g2 did not match")
示例#8
0
 def test_single_line_pattern_no_match(self):
     th = TrackerHelper()
     th.config.insert_regex(
         regex=r"This Test (.*) (.*)", regex_groups=["torrentName", "$group2"]
     )
     var = announce_parser.parse(th, "No matching message")
     self.assertEqual(var, None, "No match should return None")
示例#9
0
    def test_multi_default_variables(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(regex=r"Row1 g1: (.*)", regex_groups=["$g1"])
        th.config.insert_multi_regex(regex=r"Row2 g2: (.*)", regex_groups=["$g2"])
        th.config.insert_multi_regex(regex=r"Row3 g3: (.*)", regex_groups=["$g3"])

        var = announce_parser.parse(th, "Row1 g1: g1_text")
        self.assertEqual(var, None, "No match should return None")
        var = announce_parser.parse(th, "Row2 g2: g2_text")
        self.assertEqual(var, None, "Announcement is None")
        var = announce_parser.parse(th, "Row3 g3: g3_text")

        self.assertEqual(len(var), 3 + len(utils.get_default_variables()))
        self.assertEqual(var["$g1"], "g1_text", "g1 did not match")
        self.assertEqual(var["$g2"], "g2_text", "g2 did not match")
        self.assertEqual(var["$g3"], "g3_text", "g3 did not match")

        for key in utils.get_default_variables():
            self.assertEqual(var[key], "", "default value did not match")
示例#10
0
def _check_and_parse(tracker, source, target, message):
    if not _is_announcement(source, target, tracker):
        logger.debug("Message is no announcement")
        return

    message = _sanitize_message(message)

    variables = announce_parser.parse(tracker, message)
    if variables is None:
        return None

    return create_announcement(tracker, variables)
示例#11
0
    def test_multi_non_capture_group(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(
            regex=r"Row1 name: (.*)", regex_groups=["torrentName"]
        )
        th.config.insert_multi_regex(regex=r"Row2 g2:(?: (.*))?", regex_groups=["$g2"])

        var = announce_parser.parse(th, "Row1 name: a_name")
        self.assertEqual(var, None, "First row in multi should return None")

        var = announce_parser.parse(th, "Row2 g2:")
        self.assertEqual(len(var), len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "a_name", "Name did not match")

        var = announce_parser.parse(th, "Row1 name: a_name")
        self.assertEqual(var, None, "First row in multi should return None")

        var = announce_parser.parse(th, "Row2 g2: a_group")
        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "a_name", "Name did not match")
        self.assertEqual(var["$g2"], "a_group", "g2 did not match")
示例#12
0
    def test_multi_line_pattern_two_in_parallel(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(
            regex=r"Row1 name: (.*)", regex_groups=["torrentName"]
        )
        th.config.insert_multi_regex(regex=r"Row2 g2: (.*)", regex_groups=["$g2"])

        var = announce_parser.parse(th, "Row1 name: first_name")
        self.assertEqual(var, None, "No match should return None")
        var = announce_parser.parse(th, "Row1 name: second_name")
        self.assertEqual(var, None, "No match should return None")

        var = announce_parser.parse(th, "Row2 g2: first_g2")
        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "first_name", "Name did not match")
        self.assertEqual(var["$g2"], "first_g2", "g2 did not match")

        var = announce_parser.parse(th, "Row2 g2: second_g2")
        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "second_name", "Name did not match")
        self.assertEqual(var["$g2"], "second_g2", "g2 did not match")
示例#13
0
    def test_multi_line_pattern_no_match(self):
        th = TrackerHelper()
        th.config.insert_multi_regex(
            regex=r"Row1 name: (.*)", regex_groups=["torrentName"]
        )
        th.config.insert_multi_regex(regex=r"Row2 g2: (.*)", regex_groups=["$g2"])

        # torrentName has extra whitespace added
        var = announce_parser.parse(th, "something else")
        self.assertEqual(var, None, "No match should return None")

        self.assertEqual(len(announce_parser.multiline_matches), 0)
示例#14
0
    def test_single_line_pattern_with_category(self):
        th = TrackerHelper()
        th.config.insert_regex(
            regex=r"Test name: (.*) g2: (.*) category: (.*)",
            regex_groups=["torrentName", "$g2", "category"],
        )

        var = announce_parser.parse(
            th, "Test name: a_name g2: g2_text category: this_is_category"
        )

        self.assertEqual(len(var), 1 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "a_name", "Name did not match")
        self.assertEqual(var["$g2"], "g2_text", "g2 did not match")
        self.assertEqual(var["category"], "this_is_category", "category did not match")
示例#15
0
    def test_single_line_pattern_with_match(self):
        th = TrackerHelper()
        th.config.insert_regex(
            regex=r"Test name: (.*) g2: (.*) g3: (.*)",
            regex_groups=["torrentName", "$g2", "$g3"],
        )

        # torrentName has extra whitespace added
        var = announce_parser.parse(
            th, "Test name:  the_name  g2: g2_text& g3: g3_text&"
        )

        self.assertEqual(len(var), 2 + len(utils.get_default_variables()))
        self.assertEqual(var["torrentName"], "the_name", "Name did not match")
        self.assertEqual(var["$g2"], "g2_text&", "g2 did not match")
        self.assertEqual(var["$g3"], "g3_text&", "g3 did not match")
示例#16
0
    def test_single_default_variables(self):
        th = TrackerHelper()
        th.config.insert_regex(
            regex=r"Test g1: (.*) g2: (.*) g3: (.*)",
            regex_groups=["$g1", "$g2", "$g3"],
        )

        var = announce_parser.parse(th, "Test g1:  g1_text  g2: g2_text& g3: g3_text&")

        self.assertEqual(len(var), 3 + len(utils.get_default_variables()))
        self.assertEqual(var["$g1"], "g1_text", "g1 did not match")
        self.assertEqual(var["$g2"], "g2_text&", "g2 did not match")
        self.assertEqual(var["$g3"], "g3_text&", "g3 did not match")

        for key in utils.get_default_variables():
            self.assertEqual(var[key], "", "default value did not match")