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)
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)