示例#1
0
    def test_settings(self):
        cfg = config.init("./tests/configs/settings.toml")
        self.assertNotEqual(cfg, None, "Config is None")
        self.assertTrue(cfg.validate_config(), "Configuration is invalid")

        # Tracker 1
        tracker1 = next(t for t in cfg.trackers if t.type == "tracker1")
        self.assertEqual(len(tracker1.settings), 2)
        self.assertEqual(tracker1.settings["fixed1"], "f1value")
        self.assertEqual(tracker1.settings["fixed2"], "f2value")
示例#2
0
def main():
    parser = argparse.ArgumentParser(
        description="Arrnounced - Listen for IRC announcements")
    parser.add_argument(
        "-d",
        "--data",
        help=
        "Data directory for storing logs and database. Default ~/.arrnounced",
        default=str(Path.home().joinpath(".arrnounced")),
    )
    parser.add_argument(
        "-c",
        "--config",
        help="Configuration file. Default ~/.arrnounced/settings.toml",
        default=str(Path.home().joinpath(".arrnounced", "settings.toml")),
    )
    parser.add_argument(
        "-t",
        "--trackers",
        help=
        "XML tracker config path. Default ~/.arrnounced/autodl-trackers/trackers",
        default=str(Path.home().joinpath(".arrnounced", "autodl-trackers",
                                         "trackers")),
    )
    parser.add_argument("-v",
                        "--verbose",
                        help="Verbose logging",
                        action="store_true")
    parser.add_argument("--version", help="Print version", action="store_true")

    try:
        args = parser.parse_args()
    except Exception as e:
        print(e, file=sys.stderr)
        if isinstance(e, FileNotFoundError):
            config.toml_notice()
        sys.exit(1)

    if args.version:
        print("Arrnounced version", __version__)
        sys.exit(0)

    _validate_args(args)

    user_config = config.init(args.config)
    if user_config is None:
        sys.exit(1)

    log_level = logging.INFO
    if args.verbose or bool(os.getenv("VERBOSE")):
        log_level = logging.DEBUG

    log_file = Path(args.data).joinpath("arrnounced.log")
    log.init_logging(user_config, log_level, log_file)

    if not user_config.validate_config():
        print("Error: Configuration not valid", file=sys.stderr)
        sys.exit(1)

    backend.init(user_config.backends)
    if not db.init(args.data):
        sys.exit(1)

    manager.run(user_config, args.trackers)
示例#3
0
    def test_override_default(self):
        cfg = config.init("./tests/configs/override_default.toml")
        self.assertNotEqual(cfg, None, "Config is None")

        self.assertTrue(cfg.login_required, "Login required")
        self.assertFalse(cfg.login("something", "else"), "Login accepted")
        self.assertTrue(cfg.login("usern", "passw"), "Login denied")

        self.assertEqual(cfg.webui_host, "webhost", "host is invalid")
        self.assertEqual(cfg.webui_port, 456, "host is invalid")
        self.assertEqual(cfg.webui_shutdown, True, "Invalid shutdown value")

        self.assertEqual(cfg.db_purge_days, 1, "Invalid db purge value")

        self.assertEqual(cfg.log_to_file, False, "Invalid log to file")
        self.assertEqual(cfg.log_to_console, False, "Invalid log to console")

        sonarr = next(b for b in cfg.backends if b.name == "test_sonarr")
        self.assertEqual(sonarr.apikey, "sonapi", "Invalid sonarr api")
        self.assertEqual(
            sonarr.url,
            "sonurl",
            "Invalid default value",
        )
        radarr = next(b for b in cfg.backends if b.name == "test_radarr")
        self.assertEqual(radarr.apikey, "radapi", "Invalid radarr api")
        self.assertEqual(
            radarr.url,
            "radurl",
            "Invalid default value",
        )
        lidarr = next(b for b in cfg.backends if b.name == "test_lidarr")
        self.assertEqual(lidarr.apikey, "lidapi", "Invalid lidarr api")
        self.assertEqual(
            lidarr.url,
            "lidurl",
            "Invalid default value",
        )

        tracker1 = next(t.tracker for t in cfg.trackers
                        if t.type == "tracker1")
        self.assertEqual(
            tracker1["irc_nickname"],
            "t1nick",
            "Invalid irc nickname",
        )
        self.assertEqual(tracker1["irc_server"], "t1url", "Invalid irc server")
        self.assertEqual(tracker1["irc_port"], 1234, "Invalid irc port")
        self.assertEqual(tracker1["irc_channels"], "t1ch",
                         "Invalid irc channels")

        self.assertTrue(tracker1["irc_tls"], "Invalid irc tls")
        self.assertTrue(tracker1["irc_tls_verify"], "Invalid irc tls verify")
        self.assertEqual(
            tracker1["irc_ident_password"],
            "t1ident",
            "Invalid ident password",
        )
        self.assertEqual(tracker1["irc_inviter"], "t1inver",
                         "Invalid irc inviter")
        self.assertEqual(
            tracker1["irc_invite_cmd"],
            "t1invcmd",
            "Invalid inviter command",
        )
        self.assertEqual(tracker1["torrent_https"], True)
        self.assertEqual(
            tracker1["announce_delay"],
            9000,
            "Invalid announce delay",
        )
        always_notify = [
            b.strip() for b in tracker1["notify_backends"].split(",")
        ]
        self.assertTrue("test_sonarr" in always_notify,
                        "Invalid sonarr notify")
        self.assertTrue("test_radarr" in always_notify,
                        "Invalid radarr notify")
        self.assertTrue("test_lidarr" in always_notify,
                        "Invalid lidarr notify")
        self.assertEqual(
            tracker1["category"]["test_sonarr"],
            "soncat",
            "Invalid sonarr category",
        )
        self.assertEqual(
            tracker1["category"]["test_radarr"],
            "radcat",
            "Invalid radarr category",
        )
        self.assertEqual(
            tracker1["category"]["test_lidarr"],
            "lidcat",
            "Invalid lidarr category",
        )

        self.assertEqual(tracker1["settings"]["phony"], "t1phony",
                         "Invalid custom value")
示例#4
0
    def test_default_values(self):
        cfg = config.init("./tests/configs/default.toml")
        self.assertNotEqual(cfg, None, "Config is None")

        self.assertFalse(cfg.login_required, "Login required")
        self.assertTrue(cfg.login(None, None), "Login denied")

        self.assertEqual(
            cfg.webui_host,
            "0.0.0.0",  # nosec B104: bind all interfaces
            "host is invalid",
        )
        self.assertEqual(cfg.webui_port, 3467, "host is invalid")
        self.assertEqual(cfg.toml["webui"].get("username"), None,
                         "Invalid default value")
        self.assertEqual(cfg.toml["webui"].get("password"), None,
                         "Invalid default value")
        self.assertEqual(cfg.toml["webui"]["shutdown"], False,
                         "Invalid default value")

        self.assertEqual(cfg.log_to_file, True, "Invalid default value")
        self.assertEqual(cfg.log_to_console, True, "Invalid default value")

        self.assertEqual(cfg.db_purge_days, 365, "Invalid default value")

        sonarr = next(b for b in cfg.backends if b.name == "test_sonarr")
        self.assertEqual(sonarr.type, "sonarr", "Invalid default value")
        self.assertEqual(sonarr.backend.get("apikey"), None,
                         "Invalid default value")
        self.assertEqual(
            sonarr.url,
            "http://localhost:8989",
            "Invalid default value",
        )
        radarr = next(b for b in cfg.backends if b.name == "test_radarr")
        self.assertEqual(radarr.type, "radarr", "Invalid default value")
        self.assertEqual(radarr.backend.get("apikey"), None,
                         "Invalid default value")
        self.assertEqual(
            radarr.url,
            "http://localhost:7878",
            "Invalid default value",
        )
        lidarr = next(b for b in cfg.backends if b.name == "test_lidarr")
        self.assertEqual(lidarr.type, "lidarr", "Invalid default value")
        self.assertEqual(lidarr.backend.get("apikey"), None,
                         "Invalid default value")
        self.assertEqual(
            lidarr.url,
            "http://localhost:8686",
            "Invalid default value",
        )

        tracker1 = next(t.tracker for t in cfg.trackers
                        if t.type == "tracker1")
        self.assertEqual(len(cfg.trackers), 1)
        self.assertEqual(
            tracker1["irc_nickname"],
            "t1nick",
            "Invalid irc nickname",
        )
        self.assertEqual(tracker1["irc_server"], "t1url", "Invalid irc server")
        self.assertEqual(tracker1["irc_port"], 1234, "Invalid irc port")
        self.assertEqual(tracker1["irc_channels"], "t1ch",
                         "Invalid irc channels")

        self.assertFalse(tracker1["irc_tls"], "Invalid default value")
        self.assertFalse(tracker1["irc_tls_verify"], "Invalid default value")
        self.assertEqual(
            tracker1.get("irc_ident_password"),
            None,
            "Invalid default value",
        )
        self.assertEqual(
            tracker1.get("irc_inviter"),
            None,
            "Invalid default value",
        )
        self.assertEqual(
            tracker1.get("irc_invite_cmd"),
            None,
            "Invalid default value",
        )
        self.assertEqual(tracker1["torrent_https"], False,
                         "Invalid default value")
        self.assertEqual(tracker1["announce_delay"], 0,
                         "Invalid default value")
        self.assertEqual(tracker1.get("notify_backends"), None,
                         "Invalid default value")
        self.assertEqual(len(tracker1["category"]), 0)
示例#5
0
 def test_invalid_settings_type(self):
     cfg = config.init("./tests/configs/invalid_settings_type.toml")
     self.assertEqual(cfg, None, "Config is not None")
示例#6
0
 def test_invalid_config(self):
     cfg = config.init("./tests/configs/invalid_toml.toml")
     self.assertEqual(cfg, None, "Config is not None")
示例#7
0
 def test_empty_value(self):
     cfg = config.init("./tests/configs/empty_value.toml")
     self.assertNotEqual(cfg, None, "Config is None")
     self.assertFalse(cfg.validate_config(), "Configuration is valid")
示例#8
0
 def test_cannot_notify_lidarr(self):
     cfg = config.init("./tests/configs/cannot_notify_lidarr.toml")
     self.assertNotEqual(cfg, None, "Config is None")
     self.assertFalse(cfg.validate_config(), "Configuration is valid")
示例#9
0
 def test_invalid_backend_type(self):
     cfg = config.init("./tests/configs/invalid_backend_type.toml")
     self.assertNotEqual(cfg, None, "Config is None")
     self.assertFalse(cfg.validate_config(), "Configuration is valid")
示例#10
0
 def test_missing_backend_type(self):
     cfg = config.init("./tests/configs/missing_backend_type.toml")
     self.assertNotEqual(cfg, None, "Config is None")
     self.assertFalse(cfg.toml["backends"]["mlidarr"].get("type"), None)
     self.assertFalse(cfg.toml["backends"]["mlidarr"].get("url"), None)
     self.assertFalse(cfg.validate_config(), "Configuration is valid")
示例#11
0
 def test_missing_invite_cmd(self):
     cfg = config.init("./tests/configs/missing_invite_cmd.toml")
     self.assertNotEqual(cfg, None, "Config is None")
     self.assertFalse(cfg.validate_config(), "Configuration is valid")
示例#12
0
    def test_two_trackers(self):
        cfg = config.init("./tests/configs/two_trackers.toml")
        self.assertNotEqual(cfg, None, "Config is None")
        self.assertTrue(cfg.validate_config(), "Configuration is invalid")

        self.assertTrue(cfg.login_required, "Login required")
        self.assertTrue(cfg.login("auser", "apass"), "Login denied")

        self.assertEqual(cfg.webui_host, "webhost2", "host is invalid")
        self.assertEqual(cfg.webui_port, 4567, "host is invalid")

        lidarr = next(b for b in cfg.backends if b.name == "mlidarr")
        self.assertEqual(lidarr.apikey, "lidapi", "Invalid lidarr api")

        self.assertEqual(len(cfg.trackers), 2)
        # Tracker 1
        tracker1 = next(t.tracker for t in cfg.trackers
                        if t.type == "tracker1")
        self.assertEqual(
            tracker1["irc_nickname"],
            "t1nick",
            "Invalid irc nickname",
        )
        self.assertEqual(tracker1["irc_server"], "t1url", "Invalid irc server")
        self.assertEqual(tracker1["irc_port"], 1234, "Invalid irc port")
        self.assertEqual(tracker1["irc_channels"], "t1ch",
                         "Invalid irc channels")

        self.assertEqual(tracker1["irc_inviter"], "t1inver",
                         "Invalid irc inviter")
        self.assertEqual(
            tracker1["irc_invite_cmd"],
            "t1invcmd",
            "Invalid inviter command",
        )

        # Tracker 2
        tracker2 = next(t.tracker for t in cfg.trackers
                        if t.type == "tracker2.dottest")
        self.assertEqual(
            cfg.toml.get("tracker2"),
            None,
            "tracker2 should be None",
        )
        self.assertEqual(
            tracker2["irc_nickname"],
            "t2nick",
            "Invalid irc nickname",
        )
        self.assertEqual(
            tracker2["irc_server"],
            "t2url",
            "Invalid irc server",
        )
        self.assertEqual(tracker2["irc_port"], 9876, "Invalid irc port")
        self.assertEqual(
            tracker2["irc_channels"],
            "t2ch",
            "Invalid irc channels",
        )
        self.assertTrue(tracker2["irc_tls"], "Invalid irc tls")
        self.assertTrue(tracker2["irc_tls_verify"], "Invalid irc tls verify")
        self.assertEqual(
            tracker2["irc_ident_password"],
            "t2ident",
            "Invalid ident password",
        )