コード例 #1
0
ファイル: seedsync.py プロジェクト: gragatrim/seedsync
    def __init__(self):
        # Parse the args
        args = self._parse_args()

        # Create/load config
        config = None
        self.config_path = os.path.join(args.config_dir,
                                        Seedsync.__FILE_CONFIG)
        create_default_config = False
        if os.path.isfile(self.config_path):
            try:
                config = Config.from_file(self.config_path)
            except (ConfigError, PersistError):
                Seedsync.__backup_file(self.config_path)
                # set config to default
                create_default_config = True
        else:
            create_default_config = True

        if create_default_config:
            # Create default config
            config = Seedsync._create_default_config()
            config.to_file(self.config_path)

        # Determine the true value of debug
        is_debug = args.debug or config.general.debug

        # Create context args
        ctx_args = Args()
        ctx_args.local_path_to_scanfs = args.scanfs
        ctx_args.html_path = args.html
        ctx_args.debug = is_debug
        ctx_args.exit = args.exit

        # Logger setup
        # We separate the main log from the web-access log
        logger = self._create_logger(name=Constants.SERVICE_NAME,
                                     debug=is_debug,
                                     logdir=args.logdir)
        Seedsync.logger = logger
        web_access_logger = self._create_logger(
            name=Constants.WEB_ACCESS_LOG_NAME,
            debug=is_debug,
            logdir=args.logdir)
        logger.info(
            "Debug mode is {}.".format("enabled" if is_debug else "disabled"))

        # Create status
        status = Status()

        # Create context
        self.context = Context(logger=logger,
                               web_access_logger=web_access_logger,
                               config=config,
                               args=ctx_args,
                               status=status)

        # Register the signal handlers
        signal.signal(signal.SIGTERM, self.signal)
        signal.signal(signal.SIGINT, self.signal)

        # Print context to log
        self.context.print_to_log()

        # Load the persists
        self.controller_persist_path = os.path.join(
            args.config_dir, Seedsync.__FILE_CONTROLLER_PERSIST)
        self.controller_persist = self._load_persist(
            ControllerPersist, self.controller_persist_path)

        self.auto_queue_persist_path = os.path.join(
            args.config_dir, Seedsync.__FILE_AUTO_QUEUE_PERSIST)
        self.auto_queue_persist = self._load_persist(
            AutoQueuePersist, self.auto_queue_persist_path)
コード例 #2
0
ファイル: test_config.py プロジェクト: sstalder/seedsync
    def test_from_file(self):
        # Create empty config file
        config_file = open(tempfile.mktemp(suffix="test_config"), "w")

        config_file.write("""
        [General]
        debug=False

        [Lftp]
        remote_address=remote.server.com
        remote_username=remote-user
        remote_port = 3456
        remote_path=/path/on/remote/server
        local_path=/path/on/local/server
        remote_path_to_scan_script=/path/on/remote/server/to/scan/script
        num_max_parallel_downloads=2
        num_max_parallel_files_per_download=3
        num_max_connections_per_root_file=4
        num_max_connections_per_dir_file=5
        num_max_total_connections=7

        [Controller]
        interval_ms_remote_scan=30000
        interval_ms_local_scan=10000
        interval_ms_downloading_scan=2000
        extract_path=/path/where/to/extract/stuff
        use_local_path_as_extract_path=False

        [Web]
        port=88

        [AutoQueue]
        enabled=False
        patterns_only=True
        auto_extract=True
        """)
        config_file.flush()
        config = Config.from_file(config_file.name)

        self.assertEqual(False, config.general.debug)

        self.assertEqual("remote.server.com", config.lftp.remote_address)
        self.assertEqual("remote-user", config.lftp.remote_username)
        self.assertEqual(3456, config.lftp.remote_port)
        self.assertEqual("/path/on/remote/server", config.lftp.remote_path)
        self.assertEqual("/path/on/local/server", config.lftp.local_path)
        self.assertEqual("/path/on/remote/server/to/scan/script",
                         config.lftp.remote_path_to_scan_script)
        self.assertEqual(2, config.lftp.num_max_parallel_downloads)
        self.assertEqual(3, config.lftp.num_max_parallel_files_per_download)
        self.assertEqual(4, config.lftp.num_max_connections_per_root_file)
        self.assertEqual(5, config.lftp.num_max_connections_per_dir_file)
        self.assertEqual(7, config.lftp.num_max_total_connections)

        self.assertEqual(30000, config.controller.interval_ms_remote_scan)
        self.assertEqual(10000, config.controller.interval_ms_local_scan)
        self.assertEqual(2000, config.controller.interval_ms_downloading_scan)
        self.assertEqual("/path/where/to/extract/stuff",
                         config.controller.extract_path)
        self.assertEqual(False,
                         config.controller.use_local_path_as_extract_path)

        self.assertEqual(88, config.web.port)

        self.assertEqual(False, config.autoqueue.enabled)
        self.assertEqual(True, config.autoqueue.patterns_only)
        self.assertEqual(True, config.autoqueue.auto_extract)

        # unknown section error
        config_file.write("""
        [Unknown]
        key=value
        """)
        config_file.flush()
        with self.assertRaises(ConfigError) as error:
            Config.from_file(config_file.name)
        self.assertTrue(str(error.exception).startswith("Unknown section"))

        # Remove config file
        config_file.close()
        os.remove(config_file.name)