diff --git a/borgmatic/actions/borg.py b/borgmatic/actions/borg.py index fbf1d49d..3d2998b6 100644 --- a/borgmatic/actions/borg.py +++ b/borgmatic/actions/borg.py @@ -8,7 +8,12 @@ logger = logging.getLogger(__name__) def run_borg( - repository, storage, local_borg_version, borg_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + borg_arguments, + local_path, + remote_path, ): ''' Run the "borg" action for the given repository. diff --git a/borgmatic/actions/break_lock.py b/borgmatic/actions/break_lock.py index eb6e4547..2174161c 100644 --- a/borgmatic/actions/break_lock.py +++ b/borgmatic/actions/break_lock.py @@ -7,7 +7,12 @@ logger = logging.getLogger(__name__) def run_break_lock( - repository, storage, local_borg_version, break_lock_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + break_lock_arguments, + local_path, + remote_path, ): ''' Run the "break-lock" action for the given repository. diff --git a/borgmatic/actions/info.py b/borgmatic/actions/info.py index 6cd775f5..54023127 100644 --- a/borgmatic/actions/info.py +++ b/borgmatic/actions/info.py @@ -9,7 +9,12 @@ logger = logging.getLogger(__name__) def run_info( - repository, storage, local_borg_version, info_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + info_arguments, + local_path, + remote_path, ): ''' Run the "info" action for the given repository and archive. diff --git a/borgmatic/actions/list.py b/borgmatic/actions/list.py index 0e736f84..359f3b67 100644 --- a/borgmatic/actions/list.py +++ b/borgmatic/actions/list.py @@ -8,7 +8,12 @@ logger = logging.getLogger(__name__) def run_list( - repository, storage, local_borg_version, list_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + list_arguments, + local_path, + remote_path, ): ''' Run the "list" action for the given repository and archive. diff --git a/borgmatic/actions/mount.py b/borgmatic/actions/mount.py index 6e787b18..72e321a0 100644 --- a/borgmatic/actions/mount.py +++ b/borgmatic/actions/mount.py @@ -8,7 +8,12 @@ logger = logging.getLogger(__name__) def run_mount( - repository, storage, local_borg_version, mount_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + mount_arguments, + local_path, + remote_path, ): ''' Run the "mount" action for the given repository. diff --git a/borgmatic/actions/restore.py b/borgmatic/actions/restore.py index 1e8d175d..f061dca8 100644 --- a/borgmatic/actions/restore.py +++ b/borgmatic/actions/restore.py @@ -114,7 +114,13 @@ def restore_single_database( def collect_archive_database_names( - repository, archive, location, storage, local_borg_version, local_path, remote_path, + repository, + archive, + location, + storage, + local_borg_version, + local_path, + remote_path, ): ''' Given a local or remote repository path, a resolved archive name, a location configuration dict, @@ -180,7 +186,7 @@ def find_databases_to_restore(requested_database_names, archive_database_names): if 'all' in restore_names[UNSPECIFIED_HOOK]: restore_names[UNSPECIFIED_HOOK].remove('all') - for (hook_name, database_names) in archive_database_names.items(): + for hook_name, database_names in archive_database_names.items(): restore_names.setdefault(hook_name, []).extend(database_names) # If a database is to be restored as part of "all", then remove it from restore names so diff --git a/borgmatic/actions/rinfo.py b/borgmatic/actions/rinfo.py index 001a0851..0947ec3d 100644 --- a/borgmatic/actions/rinfo.py +++ b/borgmatic/actions/rinfo.py @@ -8,7 +8,12 @@ logger = logging.getLogger(__name__) def run_rinfo( - repository, storage, local_borg_version, rinfo_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + rinfo_arguments, + local_path, + remote_path, ): ''' Run the "rinfo" action for the given repository. diff --git a/borgmatic/actions/rlist.py b/borgmatic/actions/rlist.py index c2ea1c63..10d06a51 100644 --- a/borgmatic/actions/rlist.py +++ b/borgmatic/actions/rlist.py @@ -8,7 +8,12 @@ logger = logging.getLogger(__name__) def run_rlist( - repository, storage, local_borg_version, rlist_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + rlist_arguments, + local_path, + remote_path, ): ''' Run the "rlist" action for the given repository. diff --git a/borgmatic/borg/break_lock.py b/borgmatic/borg/break_lock.py index 2dff31ec..7099af83 100644 --- a/borgmatic/borg/break_lock.py +++ b/borgmatic/borg/break_lock.py @@ -7,7 +7,11 @@ logger = logging.getLogger(__name__) def break_lock( - repository_path, storage_config, local_borg_version, local_path='borg', remote_path=None, + repository_path, + storage_config, + local_borg_version, + local_path='borg', + remote_path=None, ): ''' Given a local or remote repository path, a storage configuration dict, the local Borg version, diff --git a/borgmatic/borg/create.py b/borgmatic/borg/create.py index 58c3509b..8782dc6b 100644 --- a/borgmatic/borg/create.py +++ b/borgmatic/borg/create.py @@ -509,7 +509,9 @@ def create_archive( ) elif output_log_level is None: return execute_command_and_capture_output( - create_command, working_directory=working_directory, extra_environment=borg_environment, + create_command, + working_directory=working_directory, + extra_environment=borg_environment, ) else: execute_command( diff --git a/borgmatic/borg/export_tar.py b/borgmatic/borg/export_tar.py index 2b427f03..a624f07d 100644 --- a/borgmatic/borg/export_tar.py +++ b/borgmatic/borg/export_tar.py @@ -45,7 +45,11 @@ def export_tar_archive( + (('--dry-run',) if dry_run else ()) + (('--tar-filter', tar_filter) if tar_filter else ()) + (('--strip-components', str(strip_components)) if strip_components else ()) - + flags.make_repository_archive_flags(repository_path, archive, local_borg_version,) + + flags.make_repository_archive_flags( + repository_path, + archive, + local_borg_version, + ) + (destination_path,) + (tuple(paths) if paths else ()) ) diff --git a/borgmatic/borg/extract.py b/borgmatic/borg/extract.py index a95685cf..f9471416 100644 --- a/borgmatic/borg/extract.py +++ b/borgmatic/borg/extract.py @@ -108,7 +108,11 @@ def extract_archive( + (('--strip-components', str(strip_components)) if strip_components else ()) + (('--progress',) if progress else ()) + (('--stdout',) if extract_to_stdout else ()) - + flags.make_repository_archive_flags(repository, archive, local_borg_version,) + + flags.make_repository_archive_flags( + repository, + archive, + local_borg_version, + ) + (tuple(paths) if paths else ()) ) diff --git a/borgmatic/borg/info.py b/borgmatic/borg/info.py index 80739c07..ef2c0c44 100644 --- a/borgmatic/borg/info.py +++ b/borgmatic/borg/info.py @@ -62,7 +62,8 @@ def display_archives_info( if info_arguments.json: return execute_command_and_capture_output( - full_command, extra_environment=environment.make_environment(storage_config), + full_command, + extra_environment=environment.make_environment(storage_config), ) else: execute_command( diff --git a/borgmatic/borg/rinfo.py b/borgmatic/borg/rinfo.py index 8a30b7f0..97d7a666 100644 --- a/borgmatic/borg/rinfo.py +++ b/borgmatic/borg/rinfo.py @@ -50,7 +50,8 @@ def display_repository_info( if rinfo_arguments.json: return execute_command_and_capture_output( - full_command, extra_environment=extra_environment, + full_command, + extra_environment=extra_environment, ) else: execute_command( diff --git a/borgmatic/borg/rlist.py b/borgmatic/borg/rlist.py index 9686b67b..c051a9ad 100644 --- a/borgmatic/borg/rlist.py +++ b/borgmatic/borg/rlist.py @@ -40,7 +40,8 @@ def resolve_archive_name( ) output = execute_command_and_capture_output( - full_command, extra_environment=environment.make_environment(storage_config), + full_command, + extra_environment=environment.make_environment(storage_config), ) try: latest_archive = output.strip().splitlines()[-1] diff --git a/borgmatic/borg/version.py b/borgmatic/borg/version.py index 6d6c302c..d90a7aae 100644 --- a/borgmatic/borg/version.py +++ b/borgmatic/borg/version.py @@ -19,7 +19,8 @@ def local_borg_version(storage_config, local_path='borg'): + (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ()) ) output = execute_command_and_capture_output( - full_command, extra_environment=environment.make_environment(storage_config), + full_command, + extra_environment=environment.make_environment(storage_config), ) try: diff --git a/borgmatic/commands/arguments.py b/borgmatic/commands/arguments.py index b89ca761..61b54769 100644 --- a/borgmatic/commands/arguments.py +++ b/borgmatic/commands/arguments.py @@ -178,7 +178,9 @@ def make_parsers(): help='Log verbose progress to monitoring integrations that support logging (from only errors to very verbose: -1, 0, 1, or 2)', ) global_group.add_argument( - '--log-file', type=str, help='Write log messages to this file instead of syslog', + '--log-file', + type=str, + help='Write log messages to this file instead of syslog', ) global_group.add_argument( '--log-file-format', @@ -258,10 +260,13 @@ def make_parsers(): help='Copy the crypt key used for authenticated encryption from the source repository, defaults to a new random key (Borg 2.x+ only)', ) rcreate_group.add_argument( - '--append-only', action='store_true', help='Create an append-only repository', + '--append-only', + action='store_true', + help='Create an append-only repository', ) rcreate_group.add_argument( - '--storage-quota', help='Create a repository with a fixed storage quota', + '--storage-quota', + help='Create a repository with a fixed storage quota', ) rcreate_group.add_argument( '--make-parent-dirs', @@ -649,7 +654,8 @@ def make_parsers(): ) rlist_group = rlist_parser.add_argument_group('rlist arguments') rlist_group.add_argument( - '--repository', help='Path of repository to list, defaults to the configured repositories', + '--repository', + help='Path of repository to list, defaults to the configured repositories', ) rlist_group.add_argument( '--short', default=False, action='store_true', help='Output only archive names' diff --git a/borgmatic/commands/borgmatic.py b/borgmatic/commands/borgmatic.py index 5d56accb..fece475a 100644 --- a/borgmatic/commands/borgmatic.py +++ b/borgmatic/commands/borgmatic.py @@ -103,7 +103,9 @@ def run_configuration(config_filename, config, arguments): if not encountered_error: repo_queue = Queue() for repo in location['repositories']: - repo_queue.put((repo, 0),) + repo_queue.put( + (repo, 0), + ) while not repo_queue.empty(): repository, retry_num = repo_queue.get() @@ -128,7 +130,9 @@ def run_configuration(config_filename, config, arguments): ) except (OSError, CalledProcessError, ValueError) as error: if retry_num < retries: - repo_queue.put((repository, retry_num + 1),) + repo_queue.put( + (repository, retry_num + 1), + ) tuple( # Consume the generator so as to trigger logging. log_error_records( f'{repository["path"]}: Error running actions for repository', @@ -279,7 +283,7 @@ def run_actions( **hook_context, ) - for (action_name, action_arguments) in arguments.items(): + for action_name, action_arguments in arguments.items(): if action_name == 'rcreate': borgmatic.actions.rcreate.run_rcreate( repository, @@ -408,19 +412,39 @@ def run_actions( ) elif action_name == 'rlist': yield from borgmatic.actions.rlist.run_rlist( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'list': yield from borgmatic.actions.list.run_list( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'rinfo': yield from borgmatic.actions.rinfo.run_rinfo( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'info': yield from borgmatic.actions.info.run_info( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) elif action_name == 'break-lock': borgmatic.actions.break_lock.run_break_lock( @@ -433,7 +457,12 @@ def run_actions( ) elif action_name == 'borg': borgmatic.actions.borg.run_borg( - repository, storage, local_borg_version, action_arguments, local_path, remote_path, + repository, + storage, + local_borg_version, + action_arguments, + local_path, + remote_path, ) command.execute_hook( @@ -626,7 +655,8 @@ def collect_configuration_run_summary_logs(configs, arguments): logger.info(f"Unmounting mount point {arguments['umount'].mount_point}") try: borg_umount.unmount_archive( - mount_point=arguments['umount'].mount_point, local_path=get_local_path(configs), + mount_point=arguments['umount'].mount_point, + local_path=get_local_path(configs), ) except (CalledProcessError, OSError) as error: yield from log_error_records('Error unmounting mount point', error) diff --git a/borgmatic/config/load.py b/borgmatic/config/load.py index 068e661f..f6290de8 100644 --- a/borgmatic/config/load.py +++ b/borgmatic/config/load.py @@ -121,6 +121,7 @@ def load_configuration(filename): Raise ruamel.yaml.error.YAMLError if something goes wrong parsing the YAML, or RecursionError if there are too many recursive includes. ''' + # Use an embedded derived class for the include constructor so as to capture the filename # value. (functools.partial doesn't work for this use case because yaml.Constructor has to be # an actual class.) diff --git a/borgmatic/config/normalize.py b/borgmatic/config/normalize.py index bcf088ac..147e4e4e 100644 --- a/borgmatic/config/normalize.py +++ b/borgmatic/config/normalize.py @@ -81,7 +81,10 @@ def normalize(config_filename, config): repository_path.partition('file://')[-1] ) config['location']['repositories'].append( - dict(repository_dict, path=updated_repository_path,) + dict( + repository_dict, + path=updated_repository_path, + ) ) elif repository_path.startswith('ssh://'): config['location']['repositories'].append(repository_dict) @@ -97,7 +100,10 @@ def normalize(config_filename, config): ) ) config['location']['repositories'].append( - dict(repository_dict, path=rewritten_repository_path,) + dict( + repository_dict, + path=rewritten_repository_path, + ) ) else: config['location']['repositories'].append(repository_dict) diff --git a/borgmatic/config/override.py b/borgmatic/config/override.py index 8b2a1ab8..aacf375d 100644 --- a/borgmatic/config/override.py +++ b/borgmatic/config/override.py @@ -57,7 +57,12 @@ def parse_overrides(raw_overrides): for raw_override in raw_overrides: try: raw_keys, value = raw_override.split('=', 1) - parsed_overrides.append((tuple(raw_keys.split('.')), convert_value_type(value),)) + parsed_overrides.append( + ( + tuple(raw_keys.split('.')), + convert_value_type(value), + ) + ) except ValueError: raise ValueError( f"Invalid override '{raw_override}'. Make sure you use the form: SECTION.OPTION=VALUE" @@ -75,5 +80,5 @@ def apply_overrides(config, raw_overrides): ''' overrides = parse_overrides(raw_overrides) - for (keys, value) in overrides: + for keys, value in overrides: set_values(config, keys, value) diff --git a/borgmatic/execute.py b/borgmatic/execute.py index 0afa5cca..39691dac 100644 --- a/borgmatic/execute.py +++ b/borgmatic/execute.py @@ -236,7 +236,11 @@ def execute_command( def execute_command_and_capture_output( - full_command, capture_stderr=False, shell=False, extra_environment=None, working_directory=None, + full_command, + capture_stderr=False, + shell=False, + extra_environment=None, + working_directory=None, ): ''' Execute the given command (a sequence of command/argument strings), capturing and returning its diff --git a/borgmatic/hooks/mysql.py b/borgmatic/hooks/mysql.py index aeeeee5b..793b78b0 100644 --- a/borgmatic/hooks/mysql.py +++ b/borgmatic/hooks/mysql.py @@ -100,7 +100,9 @@ def execute_dump_command( dump.create_named_pipe_for_dump(dump_filename) return execute_command( - dump_command, extra_environment=extra_environment, run_to_completion=False, + dump_command, + extra_environment=extra_environment, + run_to_completion=False, ) diff --git a/borgmatic/hooks/postgresql.py b/borgmatic/hooks/postgresql.py index a982209c..bcc48efd 100644 --- a/borgmatic/hooks/postgresql.py +++ b/borgmatic/hooks/postgresql.py @@ -123,7 +123,12 @@ def dump_databases(databases, log_prefix, location_config, dry_run): continue command = ( - (dump_command, '--no-password', '--clean', '--if-exists',) + ( + dump_command, + '--no-password', + '--clean', + '--if-exists', + ) + (('--host', database['hostname']) if 'hostname' in database else ()) + (('--port', str(database['port'])) if 'port' in database else ()) + (('--username', database['username']) if 'username' in database else ()) @@ -146,7 +151,9 @@ def dump_databases(databases, log_prefix, location_config, dry_run): if dump_format == 'directory': dump.create_parent_directory_for_dump(dump_filename) execute_command( - command, shell=True, extra_environment=extra_environment, + command, + shell=True, + extra_environment=extra_environment, ) else: dump.create_named_pipe_for_dump(dump_filename) diff --git a/setup.cfg b/setup.cfg index f97ae972..30841386 100644 --- a/setup.cfg +++ b/setup.cfg @@ -8,18 +8,21 @@ filterwarnings = ignore:Deprecated call to `pkg_resources.declare_namespace\('ruamel'\)`.*:DeprecationWarning [flake8] -ignore = E501,W503 +max-line-length = 100 +extend-ignore = E203,E501,W503 exclude = *.*/* multiline-quotes = ''' docstring-quotes = ''' [tool:isort] -force_single_line = False -include_trailing_comma = True +profile=black known_first_party = borgmatic line_length = 100 -multi_line_output = 3 skip = .tox [codespell] skip = .git,.tox,build + +[pycodestyle] +ignore = E203 +max_line_length = 100 diff --git a/test_requirements.txt b/test_requirements.txt index 7910788b..67e02563 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -1,27 +1,29 @@ appdirs==1.4.4; python_version >= '3.8' -attrs==20.3.0; python_version >= '3.8' -black==19.10b0; python_version >= '3.8' -click==7.1.2; python_version >= '3.8' +attrs==22.2.0; python_version >= '3.8' +black==23.3.0; python_version >= '3.8' +chardet==5.1.0 +click==8.1.3; python_version >= '3.8' codespell==2.2.4 -colorama==0.4.4 -coverage==5.3 -flake8==4.0.1 +colorama==0.4.6 +coverage==7.2.3 +flake8==6.0.0 flake8-quotes==3.3.2 flake8-use-fstring==1.4 flake8-variables-names==0.0.5 -flexmock==0.10.4 -isort==5.9.1 -mccabe==0.6.1 -pluggy==0.13.1 -pathspec==0.8.1; python_version >= '3.8' -py==1.10.0 -pycodestyle==2.8.0 -pyflakes==2.4.0 -jsonschema==3.2.0 -pytest==7.2.0 +flexmock==0.11.3 +idna==3.4 +isort==5.12.0 +mccabe==0.7.0 +pluggy==1.0.0 +pathspec==0.11.1; python_version >= '3.8' +py==1.11.0 +pycodestyle==2.10.0 +pyflakes==3.0.1 +jsonschema==4.17.3 +pytest==7.3.0 pytest-cov==4.0.0 regex; python_version >= '3.8' -requests==2.25.0 +requests==2.28.2 ruamel.yaml>0.15.0,<0.18.0 toml==0.10.2; python_version >= '3.8' typed-ast; python_version >= '3.8' diff --git a/tests/unit/actions/test_check.py b/tests/unit/actions/test_check.py index 4c2027eb..05f63b6a 100644 --- a/tests/unit/actions/test_check.py +++ b/tests/unit/actions/test_check.py @@ -12,7 +12,11 @@ def test_run_check_calls_hooks_for_configured_repository(): flexmock(module.borgmatic.borg.check).should_receive('check_archives').once() flexmock(module.borgmatic.hooks.command).should_receive('execute_hook').times(2) check_arguments = flexmock( - repository=None, progress=flexmock(), repair=flexmock(), only=flexmock(), force=flexmock(), + repository=None, + progress=flexmock(), + repair=flexmock(), + only=flexmock(), + force=flexmock(), ) global_arguments = flexmock(monitoring_verbosity=1, dry_run=False) diff --git a/tests/unit/actions/test_restore.py b/tests/unit/actions/test_restore.py index 667a23c3..16fe2920 100644 --- a/tests/unit/actions/test_restore.py +++ b/tests/unit/actions/test_restore.py @@ -148,7 +148,8 @@ def test_find_databases_to_restore_without_requested_names_finds_all_archive_dat archive_database_names = {'postresql_databases': ['foo', 'bar']} restore_names = module.find_databases_to_restore( - requested_database_names=[], archive_database_names=archive_database_names, + requested_database_names=[], + archive_database_names=archive_database_names, ) assert restore_names == archive_database_names @@ -158,7 +159,8 @@ def test_find_databases_to_restore_with_all_in_requested_names_finds_all_archive archive_database_names = {'postresql_databases': ['foo', 'bar']} restore_names = module.find_databases_to_restore( - requested_database_names=['all'], archive_database_names=archive_database_names, + requested_database_names=['all'], + archive_database_names=archive_database_names, ) assert restore_names == archive_database_names @@ -194,7 +196,9 @@ def test_ensure_databases_found_with_all_databases_found_does_not_raise(): def test_ensure_databases_found_with_no_databases_raises(): with pytest.raises(ValueError): module.ensure_databases_found( - restore_names={'postgresql_databases': []}, remaining_restore_names={}, found_names=[], + restore_names={'postgresql_databases': []}, + remaining_restore_names={}, + found_names=[], ) diff --git a/tests/unit/borg/test_borg.py b/tests/unit/borg/test_borg.py index 545da6c0..5b735960 100644 --- a/tests/unit/borg/test_borg.py +++ b/tests/unit/borg/test_borg.py @@ -222,7 +222,10 @@ def test_run_arbitrary_borg_without_borg_specific_parameters_does_not_raise(): ) module.run_arbitrary_borg( - repository_path='repo', storage_config={}, local_borg_version='1.2.3', options=[], + repository_path='repo', + storage_config={}, + local_borg_version='1.2.3', + options=[], ) diff --git a/tests/unit/borg/test_break_lock.py b/tests/unit/borg/test_break_lock.py index 210aceeb..509fc1b8 100644 --- a/tests/unit/borg/test_break_lock.py +++ b/tests/unit/borg/test_break_lock.py @@ -10,7 +10,9 @@ from ..test_verbosity import insert_logging_mock def insert_execute_command_mock(command): flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( - command, borg_local_path='borg', extra_environment=None, + command, + borg_local_path='borg', + extra_environment=None, ).once() @@ -19,7 +21,9 @@ def test_break_lock_calls_borg_with_required_flags(): insert_execute_command_mock(('borg', 'break-lock', 'repo')) module.break_lock( - repository_path='repo', storage_config={}, local_borg_version='1.2.3', + repository_path='repo', + storage_config={}, + local_borg_version='1.2.3', ) @@ -28,7 +32,10 @@ def test_break_lock_calls_borg_with_remote_path_flags(): insert_execute_command_mock(('borg', 'break-lock', '--remote-path', 'borg1', 'repo')) module.break_lock( - repository_path='repo', storage_config={}, local_borg_version='1.2.3', remote_path='borg1', + repository_path='repo', + storage_config={}, + local_borg_version='1.2.3', + remote_path='borg1', ) @@ -37,7 +44,9 @@ def test_break_lock_calls_borg_with_umask_flags(): insert_execute_command_mock(('borg', 'break-lock', '--umask', '0770', 'repo')) module.break_lock( - repository_path='repo', storage_config={'umask': '0770'}, local_borg_version='1.2.3', + repository_path='repo', + storage_config={'umask': '0770'}, + local_borg_version='1.2.3', ) @@ -46,7 +55,9 @@ def test_break_lock_calls_borg_with_lock_wait_flags(): insert_execute_command_mock(('borg', 'break-lock', '--lock-wait', '5', 'repo')) module.break_lock( - repository_path='repo', storage_config={'lock_wait': '5'}, local_borg_version='1.2.3', + repository_path='repo', + storage_config={'lock_wait': '5'}, + local_borg_version='1.2.3', ) @@ -56,7 +67,9 @@ def test_break_lock_with_log_info_calls_borg_with_info_parameter(): insert_logging_mock(logging.INFO) module.break_lock( - repository_path='repo', storage_config={}, local_borg_version='1.2.3', + repository_path='repo', + storage_config={}, + local_borg_version='1.2.3', ) @@ -66,5 +79,7 @@ def test_break_lock_with_log_debug_calls_borg_with_debug_flags(): insert_logging_mock(logging.DEBUG) module.break_lock( - repository_path='repo', storage_config={}, local_borg_version='1.2.3', + repository_path='repo', + storage_config={}, + local_borg_version='1.2.3', ) diff --git a/tests/unit/borg/test_check.py b/tests/unit/borg/test_check.py index 65e17291..1f992d3d 100644 --- a/tests/unit/borg/test_check.py +++ b/tests/unit/borg/test_check.py @@ -79,7 +79,12 @@ def test_parse_frequency_parses_into_timedeltas(frequency, expected_result): @pytest.mark.parametrize( - 'frequency', ('sometime', 'x days', '3 decades',), + 'frequency', + ( + 'sometime', + 'x days', + '3 decades', + ), ) def test_parse_frequency_raises_on_parse_error(frequency): with pytest.raises(ValueError): @@ -211,7 +216,10 @@ def test_make_check_flags_with_data_check_returns_flag_and_implies_archives(): flags = module.make_check_flags('1.2.3', {}, ('data',)) - assert flags == ('--archives-only', '--verify-data',) + assert flags == ( + '--archives-only', + '--verify-data', + ) def test_make_check_flags_with_extract_omits_extract_flag(): @@ -227,7 +235,14 @@ def test_make_check_flags_with_repository_and_data_checks_does_not_return_reposi flexmock(module.feature).should_receive('available').and_return(True) flexmock(module.flags).should_receive('make_match_archives_flags').and_return(()) - flags = module.make_check_flags('1.2.3', {}, ('repository', 'data',)) + flags = module.make_check_flags( + '1.2.3', + {}, + ( + 'repository', + 'data', + ), + ) assert flags == ('--verify-data',) @@ -236,7 +251,12 @@ def test_make_check_flags_with_default_checks_and_prefix_returns_default_flags() flexmock(module.feature).should_receive('available').and_return(True) flexmock(module.flags).should_receive('make_match_archives_flags').and_return(()) - flags = module.make_check_flags('1.2.3', {}, ('repository', 'archives'), prefix='foo',) + flags = module.make_check_flags( + '1.2.3', + {}, + ('repository', 'archives'), + prefix='foo', + ) assert flags == ('--match-archives', 'sh:foo*') @@ -246,7 +266,10 @@ def test_make_check_flags_with_all_checks_and_prefix_returns_default_flags(): flexmock(module.flags).should_receive('make_match_archives_flags').and_return(()) flags = module.make_check_flags( - '1.2.3', {}, ('repository', 'archives', 'extract'), prefix='foo', + '1.2.3', + {}, + ('repository', 'archives', 'extract'), + prefix='foo', ) assert flags == ('--match-archives', 'sh:foo*') @@ -257,7 +280,10 @@ def test_make_check_flags_with_all_checks_and_prefix_without_borg_features_retur flexmock(module.flags).should_receive('make_match_archives_flags').and_return(()) flags = module.make_check_flags( - '1.2.3', {}, ('repository', 'archives', 'extract'), prefix='foo', + '1.2.3', + {}, + ('repository', 'archives', 'extract'), + prefix='foo', ) assert flags == ('--glob-archives', 'foo*') @@ -447,7 +473,11 @@ def test_check_archives_calls_borg_with_parameters(checks): '{"repository": {"id": "repo"}}' ) flexmock(module).should_receive('make_check_flags').with_args( - '1.2.3', {}, checks, check_last, prefix=None, + '1.2.3', + {}, + checks, + check_last, + prefix=None, ).and_return(()) flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',)) insert_execute_command_mock(('borg', 'check', 'repo')) @@ -601,7 +631,11 @@ def test_check_archives_with_local_path_calls_borg_via_local_path(): '{"repository": {"id": "repo"}}' ) flexmock(module).should_receive('make_check_flags').with_args( - '1.2.3', {}, checks, check_last, prefix=None, + '1.2.3', + {}, + checks, + check_last, + prefix=None, ).and_return(()) flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',)) insert_execute_command_mock(('borg1', 'check', 'repo')) @@ -628,7 +662,11 @@ def test_check_archives_with_remote_path_calls_borg_with_remote_path_parameters( '{"repository": {"id": "repo"}}' ) flexmock(module).should_receive('make_check_flags').with_args( - '1.2.3', {}, checks, check_last, prefix=None, + '1.2.3', + {}, + checks, + check_last, + prefix=None, ).and_return(()) flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',)) insert_execute_command_mock(('borg', 'check', '--remote-path', 'borg1', 'repo')) @@ -656,7 +694,11 @@ def test_check_archives_with_lock_wait_calls_borg_with_lock_wait_parameters(): '{"repository": {"id": "repo"}}' ) flexmock(module).should_receive('make_check_flags').with_args( - '1.2.3', storage_config, checks, check_last, None, + '1.2.3', + storage_config, + checks, + check_last, + None, ).and_return(()) flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',)) insert_execute_command_mock(('borg', 'check', '--lock-wait', '5', 'repo')) diff --git a/tests/unit/borg/test_create.py b/tests/unit/borg/test_create.py index 42fedd56..818ce276 100644 --- a/tests/unit/borg/test_create.py +++ b/tests/unit/borg/test_create.py @@ -1053,7 +1053,8 @@ def test_create_archive_with_compression_calls_borg_with_compression_parameters( @pytest.mark.parametrize( - 'feature_available,option_flag', ((True, '--upload-ratelimit'), (False, '--remote-ratelimit')), + 'feature_available,option_flag', + ((True, '--upload-ratelimit'), (False, '--remote-ratelimit')), ) def test_create_archive_with_upload_rate_limit_calls_borg_with_upload_ratelimit_parameters( feature_available, option_flag @@ -1188,7 +1189,8 @@ def test_create_archive_with_one_file_system_calls_borg_with_one_file_system_par @pytest.mark.parametrize( - 'feature_available,option_flag', ((True, '--numeric-ids'), (False, '--numeric-owner')), + 'feature_available,option_flag', + ((True, '--numeric-ids'), (False, '--numeric-owner')), ) def test_create_archive_with_numeric_ids_calls_borg_with_numeric_ids_parameter( feature_available, option_flag @@ -1290,7 +1292,12 @@ def test_create_archive_with_read_special_calls_borg_with_read_special_parameter @pytest.mark.parametrize( 'option_name,option_value', - (('ctime', True), ('ctime', False), ('birthtime', True), ('birthtime', False),), + ( + ('ctime', True), + ('ctime', False), + ('birthtime', True), + ('birthtime', False), + ), ) def test_create_archive_with_basic_option_calls_borg_with_corresponding_parameter( option_name, option_value @@ -1766,7 +1773,12 @@ def test_create_archive_with_progress_and_log_info_calls_borg_with_progress_para ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( - ('borg', 'create') + REPO_ARCHIVE_WITH_PATHS + ('--info', '--progress',), + ('borg', 'create') + + REPO_ARCHIVE_WITH_PATHS + + ( + '--info', + '--progress', + ), output_log_level=logging.INFO, output_file=module.DO_NOT_CAPTURE, borg_local_path='borg', diff --git a/tests/unit/borg/test_extract.py b/tests/unit/borg/test_extract.py index de29cf4d..26fd7380 100644 --- a/tests/unit/borg/test_extract.py +++ b/tests/unit/borg/test_extract.py @@ -11,7 +11,9 @@ from ..test_verbosity import insert_logging_mock def insert_execute_command_mock(command, working_directory=None): flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( - command, working_directory=working_directory, extra_environment=None, + command, + working_directory=working_directory, + extra_environment=None, ).once() @@ -152,7 +154,11 @@ def test_extract_archive_calls_borg_with_remote_path_parameters(): @pytest.mark.parametrize( - 'feature_available,option_flag', ((True, '--numeric-ids'), (False, '--numeric-owner'),), + 'feature_available,option_flag', + ( + (True, '--numeric-ids'), + (False, '--numeric-owner'), + ), ) def test_extract_archive_calls_borg_with_numeric_ids_parameter(feature_available, option_flag): flexmock(module.os.path).should_receive('abspath').and_return('repo') @@ -441,7 +447,9 @@ def test_extract_archive_skips_abspath_for_remote_repository(): flexmock(module.os.path).should_receive('abspath').never() flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( - ('borg', 'extract', 'server:repo::archive'), working_directory=None, extra_environment=None, + ('borg', 'extract', 'server:repo::archive'), + working_directory=None, + extra_environment=None, ).once() flexmock(module.feature).should_receive('available').and_return(True) flexmock(module.flags).should_receive('make_repository_archive_flags').and_return( diff --git a/tests/unit/borg/test_flags.py b/tests/unit/borg/test_flags.py index 86247040..2eaff0ae 100644 --- a/tests/unit/borg/test_flags.py +++ b/tests/unit/borg/test_flags.py @@ -70,7 +70,11 @@ def test_make_repository_archive_flags_with_borg_features_separates_repository_a assert module.make_repository_archive_flags( repository_path='repo', archive='archive', local_borg_version='1.2.3' - ) == ('--repo', 'repo', 'archive',) + ) == ( + '--repo', + 'repo', + 'archive', + ) def test_make_repository_archive_flags_with_borg_features_joins_repository_and_archive(): @@ -86,9 +90,24 @@ def test_make_repository_archive_flags_with_borg_features_joins_repository_and_a ( (None, None, True, ()), (None, '', True, ()), - ('re:foo-.*', '{hostname}-{now}', True, ('--match-archives', 're:foo-.*'),), # noqa: FS003 - ('sh:foo-*', '{hostname}-{now}', False, ('--glob-archives', 'foo-*'),), # noqa: FS003 - ('foo-*', '{hostname}-{now}', False, ('--glob-archives', 'foo-*'),), # noqa: FS003 + ( + 're:foo-.*', + '{hostname}-{now}', + True, + ('--match-archives', 're:foo-.*'), + ), # noqa: FS003 + ( + 'sh:foo-*', + '{hostname}-{now}', + False, + ('--glob-archives', 'foo-*'), + ), # noqa: FS003 + ( + 'foo-*', + '{hostname}-{now}', + False, + ('--glob-archives', 'foo-*'), + ), # noqa: FS003 ( None, '{hostname}-docs-{now}', # noqa: FS003 diff --git a/tests/unit/borg/test_info.py b/tests/unit/borg/test_info.py index d51bf14d..2eed4fea 100644 --- a/tests/unit/borg/test_info.py +++ b/tests/unit/borg/test_info.py @@ -69,7 +69,8 @@ def test_display_archives_info_with_log_info_and_json_suppresses_most_borg_outpu flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo')) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'info', '--json', '--repo', 'repo'), extra_environment=None, + ('borg', 'info', '--json', '--repo', 'repo'), + extra_environment=None, ).and_return('[]') insert_logging_mock(logging.INFO) @@ -120,7 +121,8 @@ def test_display_archives_info_with_log_debug_and_json_suppresses_most_borg_outp flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo')) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'info', '--json', '--repo', 'repo'), extra_environment=None, + ('borg', 'info', '--json', '--repo', 'repo'), + extra_environment=None, ).and_return('[]') insert_logging_mock(logging.DEBUG) @@ -145,7 +147,8 @@ def test_display_archives_info_with_json_calls_borg_with_json_parameter(): flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo')) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'info', '--json', '--repo', 'repo'), extra_environment=None, + ('borg', 'info', '--json', '--repo', 'repo'), + extra_environment=None, ).and_return('[]') json_output = module.display_archives_info( diff --git a/tests/unit/borg/test_list.py b/tests/unit/borg/test_list.py index 37af65a3..0a7db4cc 100644 --- a/tests/unit/borg/test_list.py +++ b/tests/unit/borg/test_list.py @@ -387,7 +387,8 @@ def test_list_archive_calls_borg_multiple_times_with_find_paths(): flexmock(module.feature).should_receive('available').and_return(False) flexmock(module.rlist).should_receive('make_rlist_command').and_return(('borg', 'list', 'repo')) flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'list', 'repo'), extra_environment=None, + ('borg', 'list', 'repo'), + extra_environment=None, ).and_return('archive1\narchive2').once() flexmock(module).should_receive('make_list_command').and_return( ('borg', 'list', 'repo::archive1') @@ -518,9 +519,18 @@ def test_list_archive_with_borg_features_without_archive_delegates_to_list_repos @pytest.mark.parametrize( - 'archive_filter_flag', ('prefix', 'match_archives', 'sort_by', 'first', 'last',), + 'archive_filter_flag', + ( + 'prefix', + 'match_archives', + 'sort_by', + 'first', + 'last', + ), ) -def test_list_archive_with_archive_ignores_archive_filter_flag(archive_filter_flag,): +def test_list_archive_with_archive_ignores_archive_filter_flag( + archive_filter_flag, +): flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.logger).answer = lambda message: None @@ -566,7 +576,14 @@ def test_list_archive_with_archive_ignores_archive_filter_flag(archive_filter_fl @pytest.mark.parametrize( - 'archive_filter_flag', ('prefix', 'match_archives', 'sort_by', 'first', 'last',), + 'archive_filter_flag', + ( + 'prefix', + 'match_archives', + 'sort_by', + 'first', + 'last', + ), ) def test_list_archive_with_find_paths_allows_archive_filter_flag_but_only_passes_it_to_rlist( archive_filter_flag, @@ -597,7 +614,8 @@ def test_list_archive_with_find_paths_allows_archive_filter_flag_but_only_passes ).and_return(('borg', 'rlist', '--repo', 'repo')) flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'rlist', '--repo', 'repo'), extra_environment=None, + ('borg', 'rlist', '--repo', 'repo'), + extra_environment=None, ).and_return('archive1\narchive2').once() flexmock(module).should_receive('make_list_command').with_args( diff --git a/tests/unit/borg/test_mount.py b/tests/unit/borg/test_mount.py index 6161a249..658b2e52 100644 --- a/tests/unit/borg/test_mount.py +++ b/tests/unit/borg/test_mount.py @@ -10,7 +10,9 @@ from ..test_verbosity import insert_logging_mock def insert_execute_command_mock(command): flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( - command, borg_local_path='borg', extra_environment=None, + command, + borg_local_path='borg', + extra_environment=None, ).once() @@ -33,7 +35,12 @@ def test_mount_archive_calls_borg_with_required_flags(): def test_mount_archive_with_borg_features_calls_borg_with_repository_and_match_archives_flags(): flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) insert_execute_command_mock( ('borg', 'mount', '--repo', 'repo', '--match-archives', 'archive', '/mnt') ) diff --git a/tests/unit/borg/test_rcreate.py b/tests/unit/borg/test_rcreate.py index e232df22..4da04dff 100644 --- a/tests/unit/borg/test_rcreate.py +++ b/tests/unit/borg/test_rcreate.py @@ -36,7 +36,12 @@ def test_create_repository_calls_borg_with_flags(): insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -51,7 +56,12 @@ def test_create_repository_with_dry_run_skips_borg_call(): insert_rinfo_command_not_found_mock() flexmock(module).should_receive('execute_command').never() flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=True, @@ -65,7 +75,12 @@ def test_create_repository_with_dry_run_skips_borg_call(): def test_create_repository_raises_for_borg_rcreate_error(): insert_rinfo_command_not_found_mock() flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').and_raise( module.subprocess.CalledProcessError(2, 'borg rcreate') @@ -84,7 +99,12 @@ def test_create_repository_raises_for_borg_rcreate_error(): def test_create_repository_skips_creation_when_repository_already_exists(): insert_rinfo_command_found_mock() flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -114,7 +134,12 @@ def test_create_repository_with_source_repository_calls_borg_with_other_repo_fla insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--other-repo', 'other.borg', '--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -130,7 +155,12 @@ def test_create_repository_with_copy_crypt_key_calls_borg_with_copy_crypt_key_fl insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--copy-crypt-key', '--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -146,7 +176,12 @@ def test_create_repository_with_append_only_calls_borg_with_append_only_flag(): insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--append-only', '--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -162,7 +197,12 @@ def test_create_repository_with_storage_quota_calls_borg_with_storage_quota_flag insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--storage-quota', '5G', '--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -178,7 +218,12 @@ def test_create_repository_with_make_parent_dirs_calls_borg_with_make_parent_dir insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--make-parent-dirs', '--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -195,7 +240,12 @@ def test_create_repository_with_log_info_calls_borg_with_info_flag(): insert_rcreate_command_mock(RCREATE_COMMAND + ('--info', '--repo', 'repo')) insert_logging_mock(logging.INFO) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -211,7 +261,12 @@ def test_create_repository_with_log_debug_calls_borg_with_debug_flag(): insert_rcreate_command_mock(RCREATE_COMMAND + ('--debug', '--repo', 'repo')) insert_logging_mock(logging.DEBUG) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -226,7 +281,12 @@ def test_create_repository_with_local_path_calls_borg_via_local_path(): insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(('borg1',) + RCREATE_COMMAND[1:] + ('--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -242,7 +302,12 @@ def test_create_repository_with_remote_path_calls_borg_with_remote_path_flag(): insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--remote-path', 'borg1', '--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, @@ -258,7 +323,12 @@ def test_create_repository_with_extra_borg_options_calls_borg_with_extra_options insert_rinfo_command_not_found_mock() insert_rcreate_command_mock(RCREATE_COMMAND + ('--extra', '--options', '--repo', 'repo')) flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) module.create_repository( dry_run=False, diff --git a/tests/unit/borg/test_rinfo.py b/tests/unit/borg/test_rinfo.py index ec0819cf..979b253e 100644 --- a/tests/unit/borg/test_rinfo.py +++ b/tests/unit/borg/test_rinfo.py @@ -11,7 +11,12 @@ def test_display_repository_info_calls_borg_with_parameters(): flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( ('borg', 'rinfo', '--repo', 'repo'), @@ -53,7 +58,12 @@ def test_display_repository_info_with_log_info_calls_borg_with_info_parameter(): flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( ('borg', 'rinfo', '--info', '--repo', 'repo'), @@ -74,10 +84,16 @@ def test_display_repository_info_with_log_info_and_json_suppresses_most_borg_out flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'rinfo', '--json', '--repo', 'repo'), extra_environment=None, + ('borg', 'rinfo', '--json', '--repo', 'repo'), + extra_environment=None, ).and_return('[]') insert_logging_mock(logging.INFO) @@ -95,7 +111,12 @@ def test_display_repository_info_with_log_debug_calls_borg_with_debug_parameter( flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( ('borg', 'rinfo', '--debug', '--show-rc', '--repo', 'repo'), @@ -117,10 +138,16 @@ def test_display_repository_info_with_log_debug_and_json_suppresses_most_borg_ou flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'rinfo', '--json', '--repo', 'repo'), extra_environment=None, + ('borg', 'rinfo', '--json', '--repo', 'repo'), + extra_environment=None, ).and_return('[]') insert_logging_mock(logging.DEBUG) @@ -138,10 +165,16 @@ def test_display_repository_info_with_json_calls_borg_with_json_parameter(): flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'rinfo', '--json', '--repo', 'repo'), extra_environment=None, + ('borg', 'rinfo', '--json', '--repo', 'repo'), + extra_environment=None, ).and_return('[]') json_output = module.display_repository_info( @@ -158,7 +191,12 @@ def test_display_repository_info_with_local_path_calls_borg_via_local_path(): flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( ('borg1', 'rinfo', '--repo', 'repo'), @@ -180,7 +218,12 @@ def test_display_repository_info_with_remote_path_calls_borg_with_remote_path_pa flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels') flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( ('borg', 'rinfo', '--remote-path', 'borg1', '--repo', 'repo'), @@ -203,7 +246,12 @@ def test_display_repository_info_with_lock_wait_calls_borg_with_lock_wait_parame flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER storage_config = {'lock_wait': 5} flexmock(module.feature).should_receive('available').and_return(True) - flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',)) + flexmock(module.flags).should_receive('make_repository_flags').and_return( + ( + '--repo', + 'repo', + ) + ) flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command').with_args( ('borg', 'rinfo', '--lock-wait', '5', '--repo', 'repo'), diff --git a/tests/unit/borg/test_rlist.py b/tests/unit/borg/test_rlist.py index 6b1561a2..b83ba615 100644 --- a/tests/unit/borg/test_rlist.py +++ b/tests/unit/borg/test_rlist.py @@ -29,7 +29,8 @@ def test_resolve_archive_name_calls_borg_with_parameters(): expected_archive = 'archive-name' flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None, + ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, + extra_environment=None, ).and_return(expected_archive + '\n') assert ( @@ -42,7 +43,8 @@ def test_resolve_archive_name_with_log_info_calls_borg_without_info_parameter(): expected_archive = 'archive-name' flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None, + ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, + extra_environment=None, ).and_return(expected_archive + '\n') insert_logging_mock(logging.INFO) @@ -56,7 +58,8 @@ def test_resolve_archive_name_with_log_debug_calls_borg_without_debug_parameter( expected_archive = 'archive-name' flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None, + ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, + extra_environment=None, ).and_return(expected_archive + '\n') insert_logging_mock(logging.DEBUG) @@ -70,7 +73,8 @@ def test_resolve_archive_name_with_local_path_calls_borg_via_local_path(): expected_archive = 'archive-name' flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg1', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None, + ('borg1', 'list') + BORG_LIST_LATEST_ARGUMENTS, + extra_environment=None, ).and_return(expected_archive + '\n') assert ( @@ -100,7 +104,8 @@ def test_resolve_archive_name_with_remote_path_calls_borg_with_remote_path_param def test_resolve_archive_name_without_archives_raises(): flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None, + ('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, + extra_environment=None, ).and_return('') with pytest.raises(ValueError): @@ -374,7 +379,15 @@ def test_make_rlist_command_includes_short(): @pytest.mark.parametrize( 'argument_name', - ('sort_by', 'first', 'last', 'exclude', 'exclude_from', 'pattern', 'patterns_from',), + ( + 'sort_by', + 'first', + 'last', + 'exclude', + 'exclude_from', + 'pattern', + 'patterns_from', + ), ) def test_make_rlist_command_includes_additional_flags(argument_name): flexmock(module.flags).should_receive('make_flags').and_return(()) @@ -411,7 +424,9 @@ def test_make_rlist_command_with_match_archives_calls_borg_with_match_archives_p None, None, '1.2.3' ).and_return(()) flexmock(module.flags).should_receive('make_match_archives_flags').with_args( - 'foo-*', None, '1.2.3', + 'foo-*', + None, + '1.2.3', ).and_return(('--match-archives', 'foo-*')) flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(()) flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',)) diff --git a/tests/unit/borg/test_version.py b/tests/unit/borg/test_version.py index 66789a8c..a051f693 100644 --- a/tests/unit/borg/test_version.py +++ b/tests/unit/borg/test_version.py @@ -15,7 +15,8 @@ def insert_execute_command_and_capture_output_mock( ): flexmock(module.environment).should_receive('make_environment') flexmock(module).should_receive('execute_command_and_capture_output').with_args( - command, extra_environment=None, + command, + extra_environment=None, ).once().and_return(version_output) diff --git a/tests/unit/commands/test_borgmatic.py b/tests/unit/commands/test_borgmatic.py index 56f2332c..bd98c01f 100644 --- a/tests/unit/commands/test_borgmatic.py +++ b/tests/unit/commands/test_borgmatic.py @@ -229,7 +229,8 @@ def test_run_configuration_retries_hard_error(): ).and_return([flexmock()]) error_logs = [flexmock()] flexmock(module).should_receive('log_error_records').with_args( - 'foo: Error running actions for repository', OSError, + 'foo: Error running actions for repository', + OSError, ).and_return(error_logs) config = {'location': {'repositories': [{'path': 'foo'}]}, 'storage': {'retries': 1}} arguments = {'global': flexmock(monitoring_verbosity=1, dry_run=False), 'create': flexmock()} diff --git a/tests/unit/config/test_normalize.py b/tests/unit/config/test_normalize.py index 1d61a771..63e3187a 100644 --- a/tests/unit/config/test_normalize.py +++ b/tests/unit/config/test_normalize.py @@ -21,13 +21,21 @@ from borgmatic.config import normalize as module {'location': {'source_directories': ['foo', 'bar']}}, False, ), - ({'location': None}, {'location': None}, False,), + ( + {'location': None}, + {'location': None}, + False, + ), ( {'storage': {'compression': 'yes_please'}}, {'storage': {'compression': 'yes_please'}}, False, ), - ({'storage': None}, {'storage': None}, False,), + ( + {'storage': None}, + {'storage': None}, + False, + ), ( {'hooks': {'healthchecks': 'https://example.com'}}, {'hooks': {'healthchecks': {'ping_url': 'https://example.com'}}}, @@ -48,10 +56,9 @@ from borgmatic.config import normalize as module {'hooks': {'cronhub': {'ping_url': 'https://example.com'}}}, False, ), - ({'hooks': None}, {'hooks': None}, False,), ( - {'consistency': {'checks': ['archives']}}, - {'consistency': {'checks': [{'name': 'archives'}]}}, + {'hooks': None}, + {'hooks': None}, False, ), ( @@ -59,9 +66,26 @@ from borgmatic.config import normalize as module {'consistency': {'checks': [{'name': 'archives'}]}}, False, ), - ({'consistency': None}, {'consistency': None}, False,), - ({'location': {'numeric_owner': False}}, {'location': {'numeric_ids': False}}, False,), - ({'location': {'bsd_flags': False}}, {'location': {'flags': False}}, False,), + ( + {'consistency': {'checks': ['archives']}}, + {'consistency': {'checks': [{'name': 'archives'}]}}, + False, + ), + ( + {'consistency': None}, + {'consistency': None}, + False, + ), + ( + {'location': {'numeric_owner': False}}, + {'location': {'numeric_ids': False}}, + False, + ), + ( + {'location': {'bsd_flags': False}}, + {'location': {'flags': False}}, + False, + ), ( {'storage': {'remote_rate_limit': False}}, {'storage': {'upload_rate_limit': False}}, diff --git a/tests/unit/config/test_validate.py b/tests/unit/config/test_validate.py index 11f3127c..24105547 100644 --- a/tests/unit/config/test_validate.py +++ b/tests/unit/config/test_validate.py @@ -138,7 +138,6 @@ def test_guard_configuration_contains_repository_does_not_raise_when_repository_ def test_guard_configuration_contains_repository_does_not_raise_when_repository_label_in_config(): - module.guard_configuration_contains_repository( repository='repo', configurations={ @@ -190,13 +189,15 @@ def test_guard_single_repository_selected_raises_when_multiple_repositories_conf def test_guard_single_repository_selected_does_not_raise_when_single_repository_configured_and_none_selected(): module.guard_single_repository_selected( - repository=None, configurations={'config.yaml': {'location': {'repositories': ['repo']}}}, + repository=None, + configurations={'config.yaml': {'location': {'repositories': ['repo']}}}, ) def test_guard_single_repository_selected_does_not_raise_when_no_repositories_configured_and_one_selected(): module.guard_single_repository_selected( - repository='repo', configurations={'config.yaml': {'location': {'repositories': []}}}, + repository='repo', + configurations={'config.yaml': {'location': {'repositories': []}}}, ) diff --git a/tests/unit/hooks/test_cronhub.py b/tests/unit/hooks/test_cronhub.py index f470b88e..2941592b 100644 --- a/tests/unit/hooks/test_cronhub.py +++ b/tests/unit/hooks/test_cronhub.py @@ -108,5 +108,9 @@ def test_ping_monitor_with_unsupported_monitoring_state(): hook_config = {'ping_url': 'https://example.com'} flexmock(module.requests).should_receive('get').never() module.ping_monitor( - hook_config, 'config.yaml', module.monitor.State.LOG, monitoring_log_level=1, dry_run=False, + hook_config, + 'config.yaml', + module.monitor.State.LOG, + monitoring_log_level=1, + dry_run=False, ) diff --git a/tests/unit/hooks/test_cronitor.py b/tests/unit/hooks/test_cronitor.py index 7ec1e2e6..12b96855 100644 --- a/tests/unit/hooks/test_cronitor.py +++ b/tests/unit/hooks/test_cronitor.py @@ -93,5 +93,9 @@ def test_ping_monitor_with_unsupported_monitoring_state(): hook_config = {'ping_url': 'https://example.com'} flexmock(module.requests).should_receive('get').never() module.ping_monitor( - hook_config, 'config.yaml', module.monitor.State.LOG, monitoring_log_level=1, dry_run=False, + hook_config, + 'config.yaml', + module.monitor.State.LOG, + monitoring_log_level=1, + dry_run=False, ) diff --git a/tests/unit/hooks/test_healthchecks.py b/tests/unit/hooks/test_healthchecks.py index c975e4fd..5c6977da 100644 --- a/tests/unit/hooks/test_healthchecks.py +++ b/tests/unit/hooks/test_healthchecks.py @@ -206,7 +206,9 @@ def test_ping_monitor_with_ping_uuid_hits_corresponding_url(): payload = 'data' flexmock(module).should_receive('format_buffered_logs_for_payload').and_return(payload) flexmock(module.requests).should_receive('post').with_args( - f"https://hc-ping.com/{hook_config['ping_url']}", data=payload.encode('utf-8'), verify=True, + f"https://hc-ping.com/{hook_config['ping_url']}", + data=payload.encode('utf-8'), + verify=True, ).and_return(flexmock(ok=True)) module.ping_monitor( diff --git a/tests/unit/hooks/test_mongodb.py b/tests/unit/hooks/test_mongodb.py index 77b830b7..f038a881 100644 --- a/tests/unit/hooks/test_mongodb.py +++ b/tests/unit/hooks/test_mongodb.py @@ -114,7 +114,8 @@ def test_dump_databases_runs_mongodump_with_directory_format(): flexmock(module.dump).should_receive('create_named_pipe_for_dump').never() flexmock(module).should_receive('execute_command').with_args( - ['mongodump', '--out', 'databases/localhost/foo', '--db', 'foo'], shell=True, + ['mongodump', '--out', 'databases/localhost/foo', '--db', 'foo'], + shell=True, ).and_return(flexmock()).once() assert module.dump_databases(databases, 'test.yaml', {}, dry_run=False) == [] diff --git a/tests/unit/hooks/test_mysql.py b/tests/unit/hooks/test_mysql.py index 137a88a5..da5da16d 100644 --- a/tests/unit/hooks/test_mysql.py +++ b/tests/unit/hooks/test_mysql.py @@ -149,7 +149,14 @@ def test_execute_dump_command_runs_mysqldump(): flexmock(module.dump).should_receive('create_named_pipe_for_dump') flexmock(module).should_receive('execute_command').with_args( - ('mysqldump', '--add-drop-database', '--databases', 'foo', '--result-file', 'dump',), + ( + 'mysqldump', + '--add-drop-database', + '--databases', + 'foo', + '--result-file', + 'dump', + ), extra_environment=None, run_to_completion=False, ).and_return(process).once() @@ -175,7 +182,13 @@ def test_execute_dump_command_runs_mysqldump_without_add_drop_database(): flexmock(module.dump).should_receive('create_named_pipe_for_dump') flexmock(module).should_receive('execute_command').with_args( - ('mysqldump', '--databases', 'foo', '--result-file', 'dump',), + ( + 'mysqldump', + '--databases', + 'foo', + '--result-file', + 'dump', + ), extra_environment=None, run_to_completion=False, ).and_return(process).once() diff --git a/tests/unit/test_execute.py b/tests/unit/test_execute.py index 14924078..a6dd9d86 100644 --- a/tests/unit/test_execute.py +++ b/tests/unit/test_execute.py @@ -320,7 +320,11 @@ def test_execute_command_and_capture_output_returns_output_with_extra_environmen expected_output = '[]' flexmock(module.os, environ={'a': 'b'}) flexmock(module.subprocess).should_receive('check_output').with_args( - full_command, stderr=None, shell=False, env={'a': 'b', 'c': 'd'}, cwd=None, + full_command, + stderr=None, + shell=False, + env={'a': 'b', 'c': 'd'}, + cwd=None, ).and_return(flexmock(decode=lambda: expected_output)).once() output = module.execute_command_and_capture_output(