class TestBaseState(unittest.TestCase): def setUp(self): self.tempdir = create_temporary_directory() self.settings_path = self.tempdir.path / 'SubDownloader.conf' self.state = BaseState() self.settings = Settings(self.settings_path) def tearDown(self): del self.tempdir del self.settings_path del self.state del self.settings def test_paths(self): BaseState.get_default_settings_folder() def test_default_video_paths(self): self.assertListEqual([], self.state.get_video_paths()) def test_save_load(self): self.assertListEqual([], list(self.tempdir.path.iterdir())) self.state.save_settings(self.settings) self.assertListEqual([self.settings_path], list(self.tempdir.path.iterdir())) copyState = BaseState() copyState.load_settings(self.settings)
def __init__(self): self._signals = GuiStateSignals() callback = GuiProviderStateCallbacks(self) BaseState.__init__(self, callback) self._window_position = None self._window_size = None
def __init__(self): BaseState.__init__(self) self._interactive = False self._console = False self._recursive = False self.set_subtitle_download_path_strategy(SubtitlePathStrategy.SAME)
def test_save_load(self): self.assertListEqual([], list(self.tempdir.path.iterdir())) self.state.save_settings(self.settings) self.assertListEqual([self.settings_path], list(self.tempdir.path.iterdir())) copyState = BaseState() copyState.load_settings(self.settings)
def save_settings(self, settings): if self._window_position: settings.set_ints(GuiStateConfigKey.WINDOW_POSITION.value, self._window_position) if self._window_size: settings.set_ints(GuiStateConfigKey.WINDOW_SIZE.value, self._window_size) BaseState.save_settings(self, settings)
def __init__(self, options): BaseState.__init__(self, options=options, settings=None) self._options = options self._interactive = self._options.program.client.cli.interactive self._recursive = self._options.search.recursive self._cli_load_state() self.set_subtitle_rename_strategy(options.download.rename_strategy) self.set_subtitle_download_path_strategy(SubtitlePathStrategy.SAME)
def load_options(self, options): BaseState.load_options(self, options) self._console = options.program.client.cli.console self._interactive = options.program.client.cli.interactive self._list_languages = options.program.client.cli.list_languages self._recursive = options.search.recursive self.set_subtitle_naming_strategy(options.download.naming_strategy) self.set_videoplayer(VideoPlayer.find())
def logging_file_install(path): """ Install logger that will write to file. If this function has already installed a handler, replace it. :param path: path to the log file, Use None for default file location. """ if path is None: path = BaseState.get_default_settings_folder() / LOGGING_DEFAULTNAME if not path.parent.exists(): log.error('File logger installation FAILED!') log.error('The directory of the log file does not exist.') return formatter = logging.Formatter(LOGGING_FORMAT) logger = logging.getLogger() logger.removeHandler(LOGGING_HANDLERS['file']) logFileHandler = logging.handlers.RotatingFileHandler( filename=str(path), mode='a', maxBytes=LOGGING_MAXBYTES, backupCount=LOGGING_BACKUPCOUNT, encoding='utf8') logFileHandler.setLevel(logging.DEBUG) logFileHandler.setFormatter(formatter) LOGGING_HANDLERS['file'] = logFileHandler logger.addHandler(logFileHandler)
def load_settings(self, settings): BaseState.load_settings(self, settings) try: tup_pos = settings.get_ints( GuiStateConfigKey.WINDOW_POSITION.value, default=None) if tup_pos is not None: self._window_position = tuple(tup_pos) except ValueError: pass try: tup_size = settings.get_ints(GuiStateConfigKey.WINDOW_SIZE.value, default=None) if tup_size is not None: self._window_size = tuple(tup_size) except ValueError: pass
def main(args=None): add_client_module_dependencies() logging_stream_install(logging.WARNING) state_init() logging_file_install(None) i18n_install() options = parse_arguments(args=args) settings = Settings(BaseState.get_default_settings_path()) logging_install(options.program.log.level, options.program.log.path) user_agent_init() if options.program.client.type == ClientType.GUI: try: import subdownloader.client.gui except ImportError as e: if e.name.startswith('PyQt5'): emit_error_missing_pyqt() return 1 else: raise runner = subdownloader.client.gui.run elif options.program.client.type == ClientType.CLI: import subdownloader.client.cli runner = subdownloader.client.cli.run else: print('{}: {}'.format(_('Invalid client type'), options.program.client_type)) return 1 try: return runner(options, settings) except IllegalArgumentException as e: sys.stderr.write(e.msg) print() return 1 except (EOFError, KeyboardInterrupt): return 1
def test_paths(self): BaseState.get_default_settings_folder()
def setUp(self): self.tempdir = create_temporary_directory() self.settings_path = self.tempdir.path / 'SubDownloader.conf' self.state = BaseState() self.settings = Settings(self.settings_path)