From 9aeffdf70d53475b4f197b0c5eec814be824939a Mon Sep 17 00:00:00 2001 From: Dzmitry Pryskoka Date: Fri, 29 Mar 2024 22:38:00 +0300 Subject: [PATCH] Add ruff linter to project --- .github/workflows/run-tests.yml | 21 ++++- pyproject.toml | 34 ++++++++ src/kataloger/__main__.py | 3 +- src/kataloger/catalog_updater.py | 15 ++-- src/kataloger/cli/cli.py | 3 +- src/kataloger/cli/configuration_provider.py | 17 ++-- src/kataloger/cli/update_print_helper.py | 2 +- src/kataloger/helpers/log_helpers.py | 2 +- src/kataloger/helpers/toml_parse_helpers.py | 21 +++-- src/kataloger/helpers/update_helpers.py | 5 +- src/kataloger/helpers/xml_parse_helpers.py | 2 +- .../update_resolver/base/update_resolver.py | 2 +- .../universal/universal_update_resolver.py | 5 +- .../universal/universal_version.py | 14 ++-- .../update_resolver/universal/version.py | 4 +- .../universal/version_factory.py | 4 +- tests/helpers/test_toml_parse_helpers.py | 80 ++++++++++--------- tests/helpers/test_xml_parse_helpers.py | 23 ++---- tests/test_catalog_updater.py | 36 ++++----- tests/test_catalog_updater_builder.py | 8 +- .../universal/test_universal_version.py | 8 +- 21 files changed, 183 insertions(+), 126 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 955909c..f06f627 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -3,6 +3,25 @@ name: Run tests on: [ push, pull_request ] jobs: + ruff: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + + - name: Install ruff + run: | + python -m pip install --upgrade pip + pip install ruff==0.3.4 + + - name: Run ruff check + run: ruff check --output-format=github + run-tests: strategy: matrix: @@ -15,7 +34,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.11 diff --git a/pyproject.toml b/pyproject.toml index c958970..aff58da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,3 +44,37 @@ kataloger = "kataloger.__main__:main" [tool.pytest.ini_options] pythonpath = "src/" + +[tool.ruff] +line-length = 120 +indent-width = 4 +target-version = "py38" +src = ["src", "tests"] + +[tool.ruff.lint] +select = [ + "E", # pycodestyle errors + "W", # pycodestyle warnings + "F", # pyflakes + "I", # isort + "B", # flake8-bugbear + "ANN", # flake8-annotations + "COM", # flake8-commas + "C4", # flake8-comprehensions + "EM", # flake8-errmsg + "UP", # pyupgrade + "PYI", # flake8-pyi + "PT", # flake8-pytest-style + "RET", # flake8-return + "SIM", # flake8-simplify + "ARG", # flake8-unused-arguments + "PTH", # flake8-use-pathlib +] +ignore = [ + "ANN101", # will be deprecated + "ANN102", # will be deprecated + "ANN204", # return type annotation for special methods +] + +[tool.ruff.lint.per-file-ignores] +"tests/**/test_*.py" = ["ANN201", "ANN205"] # return not required for tests diff --git a/src/kataloger/__main__.py b/src/kataloger/__main__.py index 645a26b..0c3efad 100644 --- a/src/kataloger/__main__.py +++ b/src/kataloger/__main__.py @@ -1,6 +1,5 @@ -import sys - import asyncio +import sys from kataloger.cli import cli from kataloger.exceptions.kataloger_exception import KatalogerException diff --git a/src/kataloger/catalog_updater.py b/src/kataloger/catalog_updater.py index a3b3aec..4103ac3 100644 --- a/src/kataloger/catalog_updater.py +++ b/src/kataloger/catalog_updater.py @@ -24,10 +24,12 @@ def __init__( verbose: bool = False, ): if not (library_repositories or plugin_repositories): - raise KatalogerConfigurationException("No repositories provided!") + message = "No repositories provided!" + raise KatalogerConfigurationException(message) if not update_resolvers: - raise KatalogerConfigurationException("No update resolvers provided!") + message = "No update resolvers provided!" + raise KatalogerConfigurationException(message) self.library_repositories = library_repositories self.plugin_repositories = plugin_repositories @@ -99,8 +101,11 @@ def try_find_update( for resolver in self.update_resolvers: (resolution, optional_update) = resolver.resolve(artifact, repositories_metadata) match resolution: - case UpdateResolution.CANT_RESOLVE: continue - case UpdateResolution.UPDATE_FOUND: return optional_update - case UpdateResolution.NO_UPDATES: return None + case UpdateResolution.CANT_RESOLVE: + continue + case UpdateResolution.UPDATE_FOUND: + return optional_update + case UpdateResolution.NO_UPDATES: + return None return None diff --git a/src/kataloger/cli/cli.py b/src/kataloger/cli/cli.py index ff35800..7eaed99 100644 --- a/src/kataloger/cli/cli.py +++ b/src/kataloger/cli/cli.py @@ -34,5 +34,4 @@ async def run() -> int: if configuration.fail_on_updates and has_updates: return 1 - else: - return 0 + return 0 diff --git a/src/kataloger/cli/configuration_provider.py b/src/kataloger/cli/configuration_provider.py index 504d16e..f54611f 100644 --- a/src/kataloger/cli/configuration_provider.py +++ b/src/kataloger/cli/configuration_provider.py @@ -1,6 +1,6 @@ from argparse import ArgumentParser from importlib.metadata import version -from importlib.resources import files, as_file +from importlib.resources import as_file, files from pathlib import Path from typing import Optional @@ -14,7 +14,7 @@ def parse_configuration() -> KatalogerConfiguration: prog="kataloger", description="A Python command-line utility to discover updates for your gradle version catalogs.", allow_abbrev=False, - epilog="Visit project repository to get more information." + epilog="Visit project repository to get more information.", ) parser.add_argument( "-p", "--path", @@ -68,20 +68,20 @@ def parse_configuration() -> KatalogerConfiguration: def _get_kataloger_version() -> str: if __name__ == '__main__': return "indev" - else: - return version(package_name) + return version(package_name) def _get_catalog_paths(path_strings: list[str]) -> list[Path]: if path_strings: - return list(map(lambda path: _str_to_path(path), path_strings)) + return [_str_to_path(path) for path in path_strings] # If catalog path not provided try to find catalogs in cwd. catalog_files = Path.cwd().glob("*.versions.toml") catalog_paths = list(filter(lambda path: path.exists() and path.is_file(), catalog_files)) if not catalog_paths: - raise KatalogerConfigurationException("Gradle version catalog not found in current directory. Please specify " - "path to catalog via parameter or run tool from directory with catalog.") + message = "Gradle version catalog not found in current directory. Please specify " \ + "path to catalog via parameter or run tool from directory with catalog." + raise KatalogerConfigurationException(message) return catalog_paths @@ -95,8 +95,7 @@ def _get_repositories_path(path_string: Optional[str]) -> Path: return repositories_candidate with as_file(files(package_name).joinpath("default.repositories.toml")) as path: - bundled_repositories_path = path - return bundled_repositories_path + return path def _str_to_path(path_string: str) -> Path: diff --git a/src/kataloger/cli/update_print_helper.py b/src/kataloger/cli/update_print_helper.py index 24975a9..740f692 100644 --- a/src/kataloger/cli/update_print_helper.py +++ b/src/kataloger/cli/update_print_helper.py @@ -6,7 +6,7 @@ def print_catalog_updates( catalog_name: str, catalog_count: int, verbose: bool, -): +) -> None: if catalog_name.endswith(".versions.toml"): catalog_name = catalog_name.removesuffix(".versions.toml") else: diff --git a/src/kataloger/helpers/log_helpers.py b/src/kataloger/helpers/log_helpers.py index 87c2735..1d12e1c 100644 --- a/src/kataloger/helpers/log_helpers.py +++ b/src/kataloger/helpers/log_helpers.py @@ -1,2 +1,2 @@ -def log_warning(message: str): +def log_warning(message: str) -> None: print(f"W: {message}") diff --git a/src/kataloger/helpers/toml_parse_helpers.py b/src/kataloger/helpers/toml_parse_helpers.py index 55d51db..284bb2a 100644 --- a/src/kataloger/helpers/toml_parse_helpers.py +++ b/src/kataloger/helpers/toml_parse_helpers.py @@ -1,7 +1,7 @@ -import tomllib from pathlib import Path from typing import Tuple +import tomllib from yarl import URL from kataloger.data.artifact.library import Library @@ -100,7 +100,8 @@ def parse_libraries(catalog: dict[str, str | dict], versions: dict, verbose: boo if verbose: log_warning(f"Library \"{module}\" has no version in catalog.") case _: - raise KatalogerParseException(f"Unknown library notation: {library}") + message = f"Unknown library notation: {library}" + raise KatalogerParseException(message) return libraries @@ -138,7 +139,8 @@ def parse_plugins(catalog: dict[str, str | dict], versions: dict, verbose: bool) if verbose: log_warning(f"Plugin \"{plugin_id}\" has no version in catalog.") case _: - raise KatalogerParseException(f"Unknown plugin notation: {plugin}") + message = f"Unknown plugin notation: {plugin}" + raise KatalogerParseException(message) return plugins @@ -146,7 +148,8 @@ def parse_plugins(catalog: dict[str, str | dict], versions: dict, verbose: bool) def __parse_declaration(declaration: str) -> Tuple[str, str]: components = declaration.rsplit(':', 1) if len(components) != 2 or not (components[0].strip() and components[1].strip()): - raise KatalogerParseException(f"Unknown declaration format: \"{declaration}\".") + message = f"Unknown declaration format: \"{declaration}\"." + raise KatalogerParseException(message) return components[0], components[1] @@ -156,14 +159,16 @@ def __get_version_by_reference( artifact_name: str, ) -> str: if not (version := versions.get(version_ref)): - raise KatalogerParseException(f"Version for \"{artifact_name}\" not specified by reference \"{version_ref}\".") + message = f"Version for \"{artifact_name}\" not specified by reference \"{version_ref}\"." + raise KatalogerParseException(message) return version def load_toml_to_dict(path: Path) -> dict[str, str | dict]: - with open(path, 'rb') as file: + with Path.open(path, "rb") as file: try: return tomllib.load(file) - except tomllib.TOMLDecodeError: - raise KatalogerParseException(f"Can't parse TOML in \"{path.name}\".") + except tomllib.TOMLDecodeError as parse_error: + message = f"Can't parse TOML in \"{path.name}\"." + raise KatalogerParseException(message) from parse_error diff --git a/src/kataloger/helpers/update_helpers.py b/src/kataloger/helpers/update_helpers.py index e1a5ade..902e044 100644 --- a/src/kataloger/helpers/update_helpers.py +++ b/src/kataloger/helpers/update_helpers.py @@ -1,9 +1,8 @@ +import asyncio from collections import defaultdict from typing import Optional -import asyncio -from aiohttp import BasicAuth -from aiohttp import ClientSession +from aiohttp import BasicAuth, ClientSession from kataloger.data.artifact.artifact import Artifact from kataloger.data.metadata_repository_info import MetadataRepositoryInfo diff --git a/src/kataloger/helpers/xml_parse_helpers.py b/src/kataloger/helpers/xml_parse_helpers.py index a4380b6..cdd1347 100644 --- a/src/kataloger/helpers/xml_parse_helpers.py +++ b/src/kataloger/helpers/xml_parse_helpers.py @@ -1,7 +1,7 @@ -from pyexpat import ExpatError from typing import Optional import xmltodict +from pyexpat import ExpatError from kataloger.data.artifact_metadata import ArtifactMetadata diff --git a/src/kataloger/update_resolver/base/update_resolver.py b/src/kataloger/update_resolver/base/update_resolver.py index 612b320..d9cacd4 100644 --- a/src/kataloger/update_resolver/base/update_resolver.py +++ b/src/kataloger/update_resolver/base/update_resolver.py @@ -1,4 +1,4 @@ -from abc import abstractmethod, ABC +from abc import ABC, abstractmethod from typing import Optional from kataloger.data.artifact.artifact import Artifact diff --git a/src/kataloger/update_resolver/universal/universal_update_resolver.py b/src/kataloger/update_resolver/universal/universal_update_resolver.py index 1c42667..0b736ea 100644 --- a/src/kataloger/update_resolver/universal/universal_update_resolver.py +++ b/src/kataloger/update_resolver/universal/universal_update_resolver.py @@ -66,7 +66,7 @@ def __resolve_update_in_repository( if artifact_version == update_version: return UpdateResolution.NO_UPDATES, None - elif artifact_version < update_version: + if artifact_version < update_version: update = ArtifactUpdate( name=artifact.name, update_repository_name=repository_metadata.repository.name, @@ -81,8 +81,7 @@ def __resolve_update_in_repository( def __most_recently_updated_repository( repositories_metadata: list[MetadataRepositoryInfo], ) -> MetadataRepositoryInfo: - repository = max(repositories_metadata, key=lambda rm: rm.metadata.last_updated) - return repository + return max(repositories_metadata, key=lambda rm: rm.metadata.last_updated) @staticmethod def __repository_with_current_version( diff --git a/src/kataloger/update_resolver/universal/universal_version.py b/src/kataloger/update_resolver/universal/universal_version.py index 878ff42..efa5662 100644 --- a/src/kataloger/update_resolver/universal/universal_version.py +++ b/src/kataloger/update_resolver/universal/universal_version.py @@ -25,13 +25,13 @@ def __init__(self, version: str): def is_pre_release(self) -> bool: return self.pre_release_name is not None - def __eq__(self, other) -> bool: + def __eq__(self, other: object) -> bool: if not isinstance(other, UniversalVersion): return False return self.raw == other.raw - def __lt__(self, other) -> bool: + def __lt__(self, other: object) -> bool: if not isinstance(other, UniversalVersion): return False @@ -47,7 +47,7 @@ def to_digits_list(version_part: str) -> list[int]: for self_digit, other_digit in zip_longest(self_digits, other_digits, fillvalue=0): if self_digit < other_digit: return True - elif self_digit > other_digit: + if self_digit > other_digit: return False # Numeric part is equal, lets compare pre-release part. @@ -62,12 +62,14 @@ def to_digits_list(version_part: str) -> list[int]: other_pr_index = other._pre_release_index() if self_pr_index < other_pr_index: return True - elif self_pr_index > other_pr_index: + if self_pr_index > other_pr_index: return False return False - elif not self.is_pre_release() and other.is_pre_release(): + + if not self.is_pre_release() and other.is_pre_release(): return False - elif self.is_pre_release() and not other.is_pre_release(): + + if self.is_pre_release() and not other.is_pre_release(): return True return False diff --git a/src/kataloger/update_resolver/universal/version.py b/src/kataloger/update_resolver/universal/version.py index cbf5d5f..10cac19 100644 --- a/src/kataloger/update_resolver/universal/version.py +++ b/src/kataloger/update_resolver/universal/version.py @@ -13,9 +13,9 @@ def is_pre_release(self) -> bool: raise NotImplementedError @abstractmethod - def __eq__(self, other) -> bool: + def __eq__(self, other: object) -> bool: raise NotImplementedError @abstractmethod - def __lt__(self, other) -> bool: + def __lt__(self, other: object) -> bool: raise NotImplementedError diff --git a/src/kataloger/update_resolver/universal/version_factory.py b/src/kataloger/update_resolver/universal/version_factory.py index d74b4dc..8ecd4af 100644 --- a/src/kataloger/update_resolver/universal/version_factory.py +++ b/src/kataloger/update_resolver/universal/version_factory.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod -from typing import TypeVar, Generic +from typing import Generic, TypeVar -from kataloger.update_resolver.universal.version import (Version) +from kataloger.update_resolver.universal.version import Version T = TypeVar("T", bound=Version) diff --git a/tests/helpers/test_toml_parse_helpers.py b/tests/helpers/test_toml_parse_helpers.py index d5426a5..6f7d2f2 100644 --- a/tests/helpers/test_toml_parse_helpers.py +++ b/tests/helpers/test_toml_parse_helpers.py @@ -1,4 +1,5 @@ -from unittest.mock import Mock, patch, mock_open +from pathlib import Path +from unittest.mock import Mock, mock_open, patch import pytest from yarl import URL @@ -8,8 +9,14 @@ from kataloger.data.repository import Repository from kataloger.exceptions.kataloger_parse_exception import KatalogerParseException from kataloger.helpers import toml_parse_helpers -from kataloger.helpers.toml_parse_helpers import parse_plugins, parse_libraries, parse_repositories, \ - load_toml_to_dict, load_repositories, load_catalog +from kataloger.helpers.toml_parse_helpers import ( + load_catalog, + load_repositories, + load_toml_to_dict, + parse_libraries, + parse_plugins, + parse_repositories, +) class TestTomlParseHelpers: @@ -24,31 +31,30 @@ def test_should_read_toml_file_to_dictionary_when_toml_format_is_correct(self): toml: bytes = b"""\ [versions] hilt = "2.50" - + [libraries] kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version = "1.9.22" } """ expected_data: dict = { "versions": { - "hilt": "2.50" + "hilt": "2.50", }, "libraries": { "kotlin-stdlib": { "module": "org.jetbrains.kotlin:kotlin-stdlib", "version": "1.9.22", - } + }, }, } - with patch("builtins.open", mock_open(read_data=toml)): + with patch.object(Path, "open", mock_open(read_data=toml)): actual_data: dict = load_toml_to_dict(path=Mock()) assert actual_data == expected_data def test_should_raise_exception_when_toml_format_is_incorrect(self): toml: bytes = b"""""" - with patch("builtins.open", mock_open(read_data=toml)): - with pytest.raises(KatalogerParseException): - load_toml_to_dict(path=Mock()) + with patch.object(Path, "open", mock_open(read_data=toml)), pytest.raises(KatalogerParseException): + load_toml_to_dict(path=Mock()) def test_should_return_empty_plugins_list_when_catalog_has_no_plugins(self): catalog: dict = {"libraries": {}} @@ -60,7 +66,7 @@ def test_should_return_empty_plugins_list_when_catalog_has_no_plugins(self): def test_should_parse_plugin_when_it_has_declaration(self): catalog: dict = { "plugins": { - self.default_artifact_name: f"{self.default_plugin_id}:{self.default_version}" + self.default_artifact_name: f"{self.default_plugin_id}:{self.default_version}", }, } expected_plugin: Plugin = Plugin( @@ -75,7 +81,7 @@ def test_should_parse_plugin_when_it_has_declaration(self): def test_should_raise_exception_when_plugin_declaration_has_no_version(self): catalog: dict = { "plugins": { - self.default_artifact_name: f"{self.default_plugin_id}:" + self.default_artifact_name: f"{self.default_plugin_id}:", }, } @@ -85,7 +91,7 @@ def test_should_raise_exception_when_plugin_declaration_has_no_version(self): def test_should_raise_exception_when_plugin_declaration_has_no_coordinates(self): catalog: dict = { "plugins": { - self.default_artifact_name: f":{self.default_version}" + self.default_artifact_name: f":{self.default_version}", }, } @@ -95,7 +101,7 @@ def test_should_raise_exception_when_plugin_declaration_has_no_coordinates(self) def test_should_raise_exception_when_plugin_declaration_has_no_colon_delimiter(self): catalog: dict = { "plugins": { - self.default_artifact_name: "com.plugin.module.1.0.0" + self.default_artifact_name: "com.plugin.module.1.0.0", }, } @@ -105,7 +111,7 @@ def test_should_raise_exception_when_plugin_declaration_has_no_colon_delimiter(s def test_should_raise_exception_when_plugin_declaration_is_empty(self): catalog: dict = { "plugins": { - self.default_artifact_name: "" + self.default_artifact_name: "", }, } @@ -118,7 +124,7 @@ def test_should_parse_plugin_when_it_has_id_and_version(self): self.default_artifact_name: { "id": self.default_plugin_id, "version": self.default_version, - } + }, }, } expected_plugin: Plugin = Plugin( @@ -137,7 +143,7 @@ def test_should_parse_plugin_when_it_has_id_and_reference_to_version(self): self.default_artifact_name: { "id": self.default_plugin_id, "version": {"ref": version_reference}, - } + }, }, } versions: dict[str, str] = {version_reference: self.default_version} @@ -156,7 +162,7 @@ def test_should_raise_exception_when_there_is_no_plugin_version_by_reference(sel self.default_artifact_name: { "id": self.default_plugin_id, "version": {"ref": "version_reference"}, - } + }, }, } @@ -169,7 +175,7 @@ def test_should_raise_exception_when_plugin_structure_is_incorrect(self): self.default_artifact_name: { "module": self.default_plugin_id, "ref": "version", - } + }, }, } @@ -186,7 +192,7 @@ def test_should_return_empty_libraries_list_when_catalog_has_no_libraries(self): def test_should_parse_library_when_it_has_declaration(self): catalog: dict = { "libraries": { - self.default_artifact_name: f"{self.default_library_module}:{self.default_version}" + self.default_artifact_name: f"{self.default_library_module}:{self.default_version}", }, } expected_library: Library = Library( @@ -201,7 +207,7 @@ def test_should_parse_library_when_it_has_declaration(self): def test_should_raise_exception_when_library_declaration_has_no_version(self): catalog: dict = { "libraries": { - self.default_artifact_name: f"{self.default_library_module}:" + self.default_artifact_name: f"{self.default_library_module}:", }, } @@ -211,7 +217,7 @@ def test_should_raise_exception_when_library_declaration_has_no_version(self): def test_should_raise_exception_when_library_declaration_has_no_coordinates(self): catalog: dict = { "libraries": { - self.default_artifact_name: f":{self.default_version}" + self.default_artifact_name: f":{self.default_version}", }, } @@ -221,7 +227,7 @@ def test_should_raise_exception_when_library_declaration_has_no_coordinates(self def test_should_raise_exception_when_library_declaration_has_no_colon_delimiter(self): catalog: dict = { "libraries": { - self.default_artifact_name: "com.library.module.1.0.0" + self.default_artifact_name: "com.library.module.1.0.0", }, } @@ -231,7 +237,7 @@ def test_should_raise_exception_when_library_declaration_has_no_colon_delimiter( def test_should_raise_exception_when_library_declaration_is_empty(self): catalog: dict = { "libraries": { - self.default_artifact_name: "" + self.default_artifact_name: "", }, } @@ -247,7 +253,7 @@ def test_should_parse_library_when_it_has_group_name_and_version(self): "group": library_group, "name": library_name, "version": self.default_version, - } + }, }, } expected_library: Library = Library( @@ -269,7 +275,7 @@ def test_should_parse_library_when_it_has_group_name_and_version_reference(self) "group": library_group, "name": library_name, "version": {"ref": version_reference}, - } + }, }, } versions: dict[str, str] = {version_reference: self.default_version} @@ -291,7 +297,7 @@ def test_should_raise_exception_when_there_is_library_group_and_name_but_no_vers "group": library_group, "name": library_name, "version": {"ref": "version_reference"}, - } + }, }, } @@ -304,7 +310,7 @@ def test_should_parse_library_when_it_has_module_and_version(self): self.default_artifact_name: { "module": self.default_library_module, "version": self.default_version, - } + }, }, } expected_library: Library = Library( @@ -323,7 +329,7 @@ def test_should_parse_library_when_it_has_module_and_reference_to_version(self): self.default_artifact_name: { "module": self.default_library_module, "version": {"ref": version_reference}, - } + }, }, } versions: dict[str, str] = {version_reference: self.default_version} @@ -342,7 +348,7 @@ def test_should_raise_exception_when_there_is_library_module_but_no_version_by_r self.default_artifact_name: { "module": self.default_library_module, "version": {"ref": "version_reference"}, - } + }, }, } @@ -355,7 +361,7 @@ def test_should_raise_exception_when_library_structure_is_incorrect(self): self.default_artifact_name: { "id": self.default_library_module, "ref": "version", - } + }, }, } @@ -392,7 +398,7 @@ def test_should_parse_repository_when_it_has_name_address_user_and_password(self "user": repository_user, "password": repository_password, }, - ) + ), ] expected_repository: Repository = Repository( name=self.default_repository_name, @@ -411,7 +417,7 @@ def test_should_raise_exception_when_there_is_no_repository_user_but_password_pr "address": self.default_repository_address, "user": "username", }, - ) + ), ] with pytest.raises(KatalogerParseException): @@ -424,7 +430,7 @@ def test_should_raise_exception_when_there_is_no_repository_password_but_user_pr "address": self.default_repository_address, "password": "password", }, - ) + ), ] with pytest.raises(KatalogerParseException): @@ -445,13 +451,13 @@ def test_should_load_catalog_from_path(self): self.default_artifact_name: { "module": self.default_library_module, "version": {"ref": version_reference}, - } + }, }, "plugins": { self.default_artifact_name: { "id": self.default_plugin_id, "version": self.default_version, - } + }, }, } expected_library: Library = Library( @@ -484,7 +490,7 @@ def test_should_load_repositories_from_path(self): "user": repository_user, "password": repository_password, }, - } + }, } expected_library_repository: Repository = Repository( name=self.default_repository_name, diff --git a/tests/helpers/test_xml_parse_helpers.py b/tests/helpers/test_xml_parse_helpers.py index 66c09c1..e4f7d95 100644 --- a/tests/helpers/test_xml_parse_helpers.py +++ b/tests/helpers/test_xml_parse_helpers.py @@ -129,7 +129,7 @@ def test_should_return_none_when_metadata_has_empty_versions_tag(self): assert actual_metadata is None def test_should_return_none_when_metadata_has_empty_versioning_tag(self): - response: str = f"""\ + response: str = """\ com.library @@ -142,7 +142,7 @@ def test_should_return_none_when_metadata_has_empty_versioning_tag(self): assert actual_metadata is None def test_should_return_none_when_metadata_has_no_versioning_tag(self): - response: str = f"""\ + response: str = """\ com.library @@ -154,7 +154,7 @@ def test_should_return_none_when_metadata_has_no_versioning_tag(self): assert actual_metadata is None def test_should_return_none_when_response_has_not_metadata_xml(self): - response: str = f"""\ + response: str = """\