From 9ebf7b3a083a11e354b86c650193aa22e3368f28 Mon Sep 17 00:00:00 2001 From: tsygankoviva Date: Mon, 26 Oct 2026 14:36:31 +0300 Subject: [PATCH] =?UTF-8?q?AURORA-1677:=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B,=20ruff=20?= =?UTF-8?q?=D0=B8=20mypy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- pyproject.toml | 2 +- requirements-dev.txt | 3 --- requirements.txt | 2 -- setup.py | 32 +++++++++++++------------- tests/test_loader.py | 2 +- tests/test_version.py | 53 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 72 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 85f0f11..c9574dd 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ install: ## Установить или переустановить библи lint: ## ruff check, ruff format --check, mypy $(BIN)/ruff check . $(BIN)/ruff format --check . - $(BIN)/mypy pylib_ai_arm_statements + $(BIN)/mypy arm_statements test: ## pytest $(BIN)/pytest diff --git a/pyproject.toml b/pyproject.toml index 33376fc..661bda8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ target-version = "py311" select = ["E", "F", "I", "UP", "B", "PL"] [tool.ruff.lint.isort] -known-first-party = ["pylib_ai_arm_statements"] +known-first-party = ["arm_statements"] [tool.mypy] python_version = "3.11" diff --git a/requirements-dev.txt b/requirements-dev.txt index d5950ad..b6c59b5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,6 +1,3 @@ -pandas>=2.0.0 -numpy>=1.24.0 - build>=0.10.0 twine>=4.0.0 ruff==0.16.10 diff --git a/requirements.txt b/requirements.txt index d322c39..279cd47 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,2 @@ # Пример зависимостей для работы с данными -pandas>=2.0.0 -numpy>=1.24.0 PyYAML==6.0.3 diff --git a/setup.py b/setup.py index 5f9a0f4..49944d7 100644 --- a/setup.py +++ b/setup.py @@ -1,31 +1,31 @@ -from setuptools import setup, find_packages import os +from setuptools import find_packages, setup -version_file = os.path.join(os.path.dirname(__file__), 'VERSION') -with open(version_file, 'r') as f: +version_file = os.path.join(os.path.dirname(__file__), "VERSION") +with open(version_file) as f: version = f.read().strip() -with open('requirements.txt') as f: - requirements = [line.strip() for line in f if line.strip() and not line.startswith('#')] +with open("requirements.txt") as f: + requirements = [line.strip() for line in f if line.strip() and not line.startswith("#")] -with open('README.md', encoding='utf-8') as f: +with open("README.md", encoding="utf-8") as f: long_description = f.read() setup( name="pylib-ai-arm-statements", version=version, - author='tsygankov-iva', - description='Библиотека нормализации форм ББ/ОФР для ДКБ АРМКА', + author="tsygankov-iva", + description="Библиотека нормализации форм ББ/ОФР для ДКБ АРМКА", long_description=long_description, - long_description_content_type='text/markdown', - packages=find_packages(exclude=['tests', 'tests.*']), + long_description_content_type="text/markdown", + packages=find_packages(exclude=["tests", "tests.*"]), install_requires=requirements, - python_requires='>=3.10', + python_requires=">=3.11", classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Developers', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + # 'Programming Language :: Python :: 3.10', + "Programming Language :: Python :: 3.11", ], -) \ No newline at end of file +) diff --git a/tests/test_loader.py b/tests/test_loader.py index 8ea2e8a..066dfaa 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -9,7 +9,7 @@ from arm_statements.issues import WarningCode, make_warning from arm_statements.loader import LABEL_KEYS, Rules, RulesError, load_rules from arm_statements.model import DocumentType, Edition, FormVariant, Severity -RULES_DIR = Path(__file__).resolve().parent.parent / "pylib_ai_arm_statements" / "rules" +RULES_DIR = Path(__file__).resolve().parent.parent / "arm_statements" / "rules" SPEC_WARNINGS = { "JSON_FAILED": ("error", "file"), diff --git a/tests/test_version.py b/tests/test_version.py index 817baec..ab26ecc 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -1,5 +1,9 @@ +from importlib.metadata import PackageNotFoundError from pathlib import Path +import pytest + +import arm_statements.version as version_module from arm_statements.version import statements_version FULL_HASH = "abc1234def5678abc1234def5678abc1234def56" @@ -19,3 +23,52 @@ def test_version_empty_file_is_none(tmp_path: Path) -> None: marker = tmp_path / "VERSION" marker.write_text(" \n", encoding="utf-8") assert statements_version(marker) is None + + +@pytest.mark.parametrize("contents", [None, " \n"]) +def test_default_marker_falls_back_to_distribution( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, contents: str | None +) -> None: + marker = tmp_path / "VERSION" + if contents is not None: + marker.write_text(contents, encoding="utf-8") + monkeypatch.setattr(version_module, "_DEFAULT_MARKER", marker) + monkeypatch.setattr(version_module, "version", lambda name: "0.1.1" if name == "pylib-ai-arm-statements" else None) + assert statements_version() == "0.1.1" + + +def test_default_marker_takes_priority(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + marker = tmp_path / "VERSION" + marker.write_text(f" {FULL_HASH}\n", encoding="utf-8") + monkeypatch.setattr(version_module, "_DEFAULT_MARKER", marker) + + def unexpected_metadata_lookup(name: str) -> str: + raise AssertionError(f"Unexpected metadata lookup: {name}") + + monkeypatch.setattr(version_module, "version", unexpected_metadata_lookup) + assert statements_version() == FULL_HASH + + +def test_default_version_without_metadata_is_none(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setattr(version_module, "_DEFAULT_MARKER", tmp_path / "VERSION") + + def missing_distribution(name: str) -> str: + raise PackageNotFoundError(name) + + monkeypatch.setattr(version_module, "version", missing_distribution) + assert statements_version() is None + + +@pytest.mark.parametrize("contents", [None, " \n"]) +def test_explicit_marker_does_not_use_distribution( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, contents: str | None +) -> None: + marker = tmp_path / "VERSION" + if contents is not None: + marker.write_text(contents, encoding="utf-8") + + def unexpected_metadata_lookup(name: str) -> str: + raise AssertionError(f"Unexpected metadata lookup: {name}") + + monkeypatch.setattr(version_module, "version", unexpected_metadata_lookup) + assert statements_version(marker) is None