From a543c822224c1027ce3687f4e66b5a0ba5e41368 Mon Sep 17 00:00:00 2001 From: MrNaif2018 Date: Fri, 20 Dec 2024 19:25:01 +0300 Subject: [PATCH] Use ruff linter --- .pre-commit-config.yaml | 28 ++++------------------------ Makefile | 8 +++----- generator/generator.py | 8 ++------ generator/test-requirements.txt | 4 +--- generator/tests/test_core.py | 4 ++-- generator/utils.py | 9 +++++---- pyproject.toml | 30 +++++++++++++++++++++++++----- 7 files changed, 42 insertions(+), 49 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ca88970..890fa2e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,27 +3,11 @@ repos: rev: v5.0.0 hooks: - id: check-merge-conflict - - repo: https://github.com/asottile/yesqa - rev: v1.5.0 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.8.3 hooks: - - id: yesqa - - repo: https://github.com/psf/black - rev: 24.10.0 - hooks: - - id: black - - repo: https://github.com/pycqa/isort - rev: 5.13.2 - hooks: - - id: isort - - repo: https://github.com/pycqa/flake8 - rev: 7.1.1 - hooks: - - id: flake8 - - repo: https://github.com/asottile/pyupgrade - rev: v3.18.0 - hooks: - - id: pyupgrade - args: ["--py311-plus"] + - id: ruff + - id: ruff-format - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: @@ -31,8 +15,6 @@ repos: - id: trailing-whitespace - id: mixed-line-ending - id: requirements-txt-fixer - exclude: >- - ^examples/atomic_tipbot/requirements.txt$ - id: check-case-conflict - id: check-shebang-scripts-are-executable - id: check-json @@ -41,8 +23,6 @@ repos: - id: check-symlinks - id: debug-statements - id: fix-byte-order-marker - - id: fix-encoding-pragma - args: ["--remove"] - id: detect-private-key - repo: https://github.com/pre-commit/mirrors-prettier rev: v4.0.0-alpha.8 diff --git a/Makefile b/Makefile index 61247ad..8fe9665 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,13 @@ all: ci lint: - flake8 + ruff check checkformat: - black --check . - isort --check . + ruff format --check format: - black . - isort . + ruff format test: pytest generator/tests/ ${ARGS} diff --git a/generator/generator.py b/generator/generator.py index 91ac3e1..f6017b0 100644 --- a/generator/generator.py +++ b/generator/generator.py @@ -102,10 +102,7 @@ def add_components(settings: Settings) -> OrderedSet: def load_component(component: str): - if os.path.isabs(component): # pragma: no cover - path = component - else: - path = path_join(COMPONENTS_DIR, component + ".yml") + path = component if os.path.isabs(component) else path_join(COMPONENTS_DIR, component + ".yml") if not exists(path): return {} with open(path) as f: @@ -201,12 +198,11 @@ def generate(components: OrderedSet, settings: Settings): execute_rules(rules, services, settings) networks = {j: i[j] for i in networks for j in i} volumes = {j: i[j] for i in volumes for j in i} - data = { + return { "services": services, "networks": networks, "volumes": volumes, } - return data def save(data, out_path=GENERATED_PATH): diff --git a/generator/test-requirements.txt b/generator/test-requirements.txt index 3e5a1a7..c48ed06 100644 --- a/generator/test-requirements.txt +++ b/generator/test-requirements.txt @@ -1,6 +1,4 @@ -black -flake8 -isort>=5 pre-commit pytest pytest-cov +ruff diff --git a/generator/tests/test_core.py b/generator/tests/test_core.py index edac264..79875f2 100644 --- a/generator/tests/test_core.py +++ b/generator/tests/test_core.py @@ -48,7 +48,7 @@ def check_service(service, service_data): def check_key(service, service_data, key, key_type=list, value_type=str): if key in service_data: assert isinstance(service_data[key], key_type) - if key_type == list: + if key_type is list: assert all(isinstance(value, value_type) for value in service_data[key]) @@ -63,7 +63,7 @@ def check_additional_keys(service, service_data): if "environment" in service_data: assert isinstance(service_data["environment"], dict) for key, value in service_data["environment"].items(): - assert isinstance(key, str) and value is None or isinstance(value, (str, int)) + assert isinstance(key, str) and value is None or isinstance(value, str | int) @pytest.mark.parametrize("service", DEFAULT_SERVICES) diff --git a/generator/utils.py b/generator/utils.py index e7783e9..908a3f9 100644 --- a/generator/utils.py +++ b/generator/utils.py @@ -27,7 +27,9 @@ def config_error(message): class ModifyKey: - def __init__(self, services, service, key, default={}, save_key=None): + def __init__(self, services, service, key, default=None, save_key=None): + if default is None: + default = {} self.services = services self.service = service self.key = key @@ -57,12 +59,11 @@ def apply_recursive(data, func): if not to_delete: new_data[key] = new return False, new_data - elif isinstance(data, list): + if isinstance(data, list): new_data = [] for value in data: to_delete, new = apply_recursive(value, func) if not to_delete: new_data.append(new) return False, new_data - else: - return func(data) + return func(data) diff --git a/pyproject.toml b/pyproject.toml index db056a5..5594413 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,26 @@ -[tool.black] -line-length=127 +[tool.ruff] +target-version = "py311" +line-length = 127 -[tool.isort] -profile = "black" -line_length = 127 +[tool.ruff.lint] +select = [ + "F", + "E", + "I", + "UP", + "YTT", + "B", + "T10", + "C", + "SIM", + "RUF100", + "RET", + "A", + "S", + "ASYNC", +] +ignore = ["RET502", "RET503", "S104", "S507", "ASYNC110"] +mccabe = { max-complexity = 12 } + +[tool.ruff.lint.per-file-ignores] +"generator/tests/*" = ["S"]