core/pyproject.toml
Untone 599a6c9f59
All checks were successful
Deploy on push / deploy (push) Successful in 6s
authors-sort-fix3
2025-06-26 17:19:42 +03:00

188 lines
12 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[tool.ruff]
line-length = 120 # Максимальная длина строки кода
fix = true # Автоматическое исправление ошибок где возможно
[tool.ruff.lint]
# Включаем автоматическое исправление для всех правил, которые поддерживают это
fixable = ["ALL"]
unfixable = []
# Выбранные правила для проверки кода
select = [
"E", # pycodestyle errors - ошибки стиля кода
"W", # pycodestyle warnings - предупреждения стиля кода
"F", # pyflakes - неиспользуемые импорты, переменные и синтаксические ошибки
"I", # isort - сортировка и группировка импортов
"N", # pep8-naming - соглашения именования PEP 8
"UP", # pyupgrade - обновление синтаксиса до современного Python
"YTT", # flake8-2020 - проверки для Python 2020+
"ANN", # flake8-annotations - проверка аннотаций типов
"S", # bandit - проверки безопасности
"BLE", # flake8-blind-except - избегание слепых except блоков
"FBT", # flake8-boolean-trap - избегание boolean параметров
"B", # flake8-bugbear - обнаружение вероятных багов
"A", # flake8-builtins - избегание переопределения встроенных функций
"C4", # flake8-comprehensions - улучшение list/dict/set comprehensions
"DTZ", # flake8-datetimez - правильная работа с часовыми поясами
"T10", # flake8-debugger - обнаружение отладочных вызовов
"DJ", # flake8-django - специфичные для Django проверки
"EM", # flake8-errmsg - правильное форматирование сообщений об ошибках
"EXE", # flake8-executable - проверка исполняемых файлов
"FA", # flake8-future-annotations - использование future annotations
"ISC", # flake8-implicit-str-concat - неявная конкатенация строк
"ICN", # flake8-import-conventions - соглашения импортов
"G", # flake8-logging-format - форматирование логирования
"INP", # flake8-no-pep420 - проверка __init__.py файлов
"PIE", # flake8-pie - разнообразные улучшения кода
"T20", # flake8-print - избегание print statements
"PYI", # flake8-pyi - проверки для .pyi файлов
"PT", # flake8-pytest-style - стиль pytest тестов
"Q", # flake8-quotes - единообразие кавычек
"RSE", # flake8-raise - правильное использование raise
"RET", # flake8-return - правильное использование return
"SLF", # flake8-self - избегание доступа к приватным членам
"SLOT", # flake8-slots - использование __slots__
"SIM", # flake8-simplify - упрощение кода
"TID", # flake8-tidy-imports - организация импортов
"INT", # flake8-gettext - интернационализация
"ARG", # flake8-unused-arguments - неиспользуемые аргументы
"PTH", # flake8-use-pathlib - использование pathlib вместо os.path
"TD", # flake8-todos - проверка TODO комментариев
"PD", # pandas-vet - лучшие практики pandas
"PGH", # pygrep-hooks - общие проверки с помощью grep
"PL", # pylint - расширенные проверки качества кода
"TRY", # tryceratops - улучшение обработки исключений
"FLY", # flynt - преобразование в f-strings
"NPY", # numpy specific rules - правила для numpy
"AIR", # airflow - правила для Apache Airflow
"PERF", # perflint - проверки производительности
"FURB", # refurb - рефакторинг предложения
"LOG", # flake8-logging - правильное логирование
"RUF", # ruff specific rules - специфичные правила ruff
]
# Игнорируемые правила (в основном конфликтующие с форматтером)
ignore = [
"S603", # subprocess calls - разрешаем в коде вызовы subprocess
"S607", # partial executable path - разрешаем в коде частичные пути к исполняемым файлам
"S608", # subprocess-without-shell - разрешаем в коде вызовы subprocess без shell
"COM812", # trailing-comma-missing - конфликтует с форматтером
"COM819", # trailing-comma-prohibited -
"ISC001", # single-line-implicit-string-concatenation -
"ISC002", # multi-line-implicit-string-concatenation -
"Q000", # bad-quotes-inline-string -
"Q001", # bad-quotes-multiline-string -
"Q002", # bad-quotes-docstring -
"Q003", # avoidable-escaped-quote -
"W191", # tab-indentation -
"E111", # indentation-with-invalid-multiple -
"E114", # indentation-with-invalid-multiple-comment -
"E117", # over-indented -
"EM101", # exception can use f-string
"D206", # indent-with-spaces -
"D300", # triple-single-quotes -
"E501", # line-too-long - используем line-length вместо этого правила
"G004", # f-strings в логах разрешены
"FA100", # from __future__ import annotations не нужно для Python 3.13+
"FA102", # PEP 604 union синтаксис доступен в Python 3.13+
"BLE001", # blind except - разрешаем в коде общие except блоки
"TRY301", # Abstract `raise` to an inner function - иногда удобнее
"TRY300", # return/break в try блоке - иногда удобнее
"ARG001", # неиспользуемые аргументы - часто нужны для совместимости API
"PLR0911", #
"PLR0913", # too many arguments - иногда неизбежно
"PLR0912", # too many branches - иногда неизбежно
"PLR0915", # too many statements - иногда неизбежно
"PLR0911", # too many return statements - иногда неизбежно для обработки различных case'ов
"FBT001", # boolean positional arguments - иногда удобно для API совместимости
"FBT002", # boolean default arguments - иногда удобно для API совместимости
"PERF203", # try-except in loop - иногда нужно для обработки отдельных элементов
# Игнорируем некоторые строгие правила для удобства разработки
"ANN003", # Missing type annotation for `*args` - иногда нужно
"ANN401", # Dynamically typed expressions (Any) - иногда нужно
"S101", # assert statements - нужно в тестах
"T201", # print statements - нужно для отладки
"TRY003", # Avoid specifying long messages outside the exception class - иногда допустимо
"PLR2004", # Magic values - иногда допустимо
"RUF001", # ambiguous unicode characters - для кириллицы
"RUF002", #
"RUF003", #
"RUF006", #
"TD002", # TODO без автора - не критично
"TD003", # TODO без ссылки на issue - не критично
]
# Настройки для отдельных директорий
[tool.ruff.lint.per-file-ignores]
# Тесты - более мягкие правила
"tests/**/*.py" = [
"S101", # assert statements - нормально в тестах
"PLR2004", # magic values - нормально в тестах
"ANN", # type annotations - не обязательно в тестах
"EXE001", # shebang without executable - нормально для тестовых скриптов
"PTH100", # os.path usage - допустимо в тестах
"PTH120", # os.path.dirname - допустимо в тестах
"BLE001", # blind except - допустимо в тестах
"T201", # print statements - нормально в тестах
"F841", # unused variables - нормально в тестах
"ARG001", # unused arguments - нормально в тестах
"DTZ005", # datetime without tz - допустимо в тестах
]
# Утилиты - более мягкие правила для аннотаций
"utils/**/*.py" = [
"T201", # print statements - иногда нужно в утилитах
"A001", # builtin shadowing - иногда нужно
"F841", # unused variables - иногда остаются при рефакторинге
"RET503", # missing return - иногда допустимо
"ARG001", # unused arguments - иногда для совместимости API
]
# Миграции Alembic
"alembic/**/*.py" = [
"ANN", # type annotations - не нужно в миграциях
"INP001", # missing __init__.py - нормально для alembic
]
# Настройки приложения
"settings.py" = [
"S105", # possible hardcoded password - "Authorization" это название заголовка HTTP
]
# Тестовые файлы в корне
"test_*.py" = [
"S106", # hardcoded password - нормально в тестах
"S603", # subprocess calls - нормально в тестах
"S607", # partial executable path - нормально в тестах
"BLE001", # blind except - допустимо в тестах
"ANN", # type annotations - не обязательно в тестах
"T201", # print statements - нормально в тестах
"INP001", # missing __init__.py - нормально для скриптов
]
[tool.ruff.lint.isort]
# Настройки для сортировки импортов
known-first-party = ["auth", "cache", "orm", "resolvers", "services", "utils", "schema", "settings"]
section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"]
[tool.pytest.ini_options]
# Конфигурация pytest
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = [
"-ra", # Показывать краткую сводку всех результатов тестов
"--strict-markers", # Требовать регистрации всех маркеров
"--tb=short", # Короткий traceback
"-v", # Verbose output
]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"integration: marks tests as integration tests",
"unit: marks tests as unit tests",
]
# Настройки для pytest-asyncio
asyncio_mode = "auto" # Автоматическое обнаружение async тестов
asyncio_default_fixture_loop_scope = "function" # Область видимости event loop для фикстур