Răsfoiți Sursa

Upgrade test requirements and code style requirements. Auto-reformat code accordingly.

Dan Helfman 2 ani în urmă
părinte
comite
5dbb71709c
50 a modificat fișierele cu 601 adăugiri și 153 ștergeri
  1. 6 1
      borgmatic/actions/borg.py
  2. 6 1
      borgmatic/actions/break_lock.py
  3. 6 1
      borgmatic/actions/info.py
  4. 6 1
      borgmatic/actions/list.py
  5. 6 1
      borgmatic/actions/mount.py
  6. 8 2
      borgmatic/actions/restore.py
  7. 6 1
      borgmatic/actions/rinfo.py
  8. 6 1
      borgmatic/actions/rlist.py
  9. 5 1
      borgmatic/borg/break_lock.py
  10. 3 1
      borgmatic/borg/create.py
  11. 5 1
      borgmatic/borg/export_tar.py
  12. 5 1
      borgmatic/borg/extract.py
  13. 2 1
      borgmatic/borg/info.py
  14. 2 1
      borgmatic/borg/rinfo.py
  15. 2 1
      borgmatic/borg/rlist.py
  16. 2 1
      borgmatic/borg/version.py
  17. 10 4
      borgmatic/commands/arguments.py
  18. 39 9
      borgmatic/commands/borgmatic.py
  19. 1 0
      borgmatic/config/load.py
  20. 8 2
      borgmatic/config/normalize.py
  21. 7 2
      borgmatic/config/override.py
  22. 5 1
      borgmatic/execute.py
  23. 3 1
      borgmatic/hooks/mysql.py
  24. 9 2
      borgmatic/hooks/postgresql.py
  25. 7 4
      setup.cfg
  26. 19 17
      test_requirements.txt
  27. 5 1
      tests/unit/actions/test_check.py
  28. 7 3
      tests/unit/actions/test_restore.py
  29. 4 1
      tests/unit/borg/test_borg.py
  30. 22 7
      tests/unit/borg/test_break_lock.py
  31. 52 10
      tests/unit/borg/test_check.py
  32. 16 4
      tests/unit/borg/test_create.py
  33. 11 3
      tests/unit/borg/test_extract.py
  34. 23 4
      tests/unit/borg/test_flags.py
  35. 6 3
      tests/unit/borg/test_info.py
  36. 23 5
      tests/unit/borg/test_list.py
  37. 9 2
      tests/unit/borg/test_mount.py
  38. 84 14
      tests/unit/borg/test_rcreate.py
  39. 60 12
      tests/unit/borg/test_rinfo.py
  40. 22 7
      tests/unit/borg/test_rlist.py
  41. 2 1
      tests/unit/borg/test_version.py
  42. 2 1
      tests/unit/commands/test_borgmatic.py
  43. 30 6
      tests/unit/config/test_normalize.py
  44. 4 3
      tests/unit/config/test_validate.py
  45. 5 1
      tests/unit/hooks/test_cronhub.py
  46. 5 1
      tests/unit/hooks/test_cronitor.py
  47. 3 1
      tests/unit/hooks/test_healthchecks.py
  48. 2 1
      tests/unit/hooks/test_mongodb.py
  49. 15 2
      tests/unit/hooks/test_mysql.py
  50. 5 1
      tests/unit/test_execute.py

+ 6 - 1
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.

+ 6 - 1
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.

+ 6 - 1
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.

+ 6 - 1
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.

+ 6 - 1
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.

+ 8 - 2
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

+ 6 - 1
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.

+ 6 - 1
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.

+ 5 - 1
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,

+ 3 - 1
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(

+ 5 - 1
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 ())
     )

+ 5 - 1
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 ())
     )
 

+ 2 - 1
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(

+ 2 - 1
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(

+ 2 - 1
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]

+ 2 - 1
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:

+ 10 - 4
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'

+ 39 - 9
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)

+ 1 - 0
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.)

+ 8 - 2
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)

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

+ 5 - 1
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

+ 3 - 1
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,
     )
 
 

+ 9 - 2
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)

+ 7 - 4
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

+ 19 - 17
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'

+ 5 - 1
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)
 

+ 7 - 3
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=[],
         )
 
 

+ 4 - 1
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=[],
     )
 
 

+ 22 - 7
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',
     )

+ 52 - 10
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'))

+ 16 - 4
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',

+ 11 - 3
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(

+ 23 - 4
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

+ 6 - 3
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(

+ 23 - 5
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(

+ 9 - 2
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')
     )

+ 84 - 14
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,

+ 60 - 12
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'),

+ 22 - 7
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',))

+ 2 - 1
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)
 
 

+ 2 - 1
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()}

+ 30 - 6
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,7 +56,11 @@ from borgmatic.config import normalize as module
             {'hooks': {'cronhub': {'ping_url': 'https://example.com'}}},
             False,
         ),
-        ({'hooks': None}, {'hooks': None}, False,),
+        (
+            {'hooks': None},
+            {'hooks': None},
+            False,
+        ),
         (
             {'consistency': {'checks': ['archives']}},
             {'consistency': {'checks': [{'name': 'archives'}]}},
@@ -59,9 +71,21 @@ 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': 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}},

+ 4 - 3
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': []}}},
     )
 
 

+ 5 - 1
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,
     )

+ 5 - 1
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,
     )

+ 3 - 1
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(

+ 2 - 1
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) == []

+ 15 - 2
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()

+ 5 - 1
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(