complexity-meter


Namecomplexity-meter JSON
Version 0.0.1 PyPI version JSON
download
home_pageNone
SummaryScript to track python project complexity
upload_time2025-07-26 00:11:39
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords python complexity analyzer statistics
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Анализ сложности проектов на python

Идея описана в статье моего блога - [Управление простотой](https://олег.кряхтит.онлайн/2025/06/14/simplicity-management.html).

# Кратко

Утилита для скоринга относительной сложности проекта. Сравнивать между собой проекты с её помощью не имеет большого смысла, идея в отслеживании динамики усложнения проекта в процессе его жизненного цикла. Комплексная метрика - попугаи.

## Формат вывода

Запуск на самого себя. Если null в тестах это проблема - надо писать тесты, а не ныть.

``` yaml
app:
  lines: 409
  files: 5
  dependencies: 0
  directories: 0
  max_directory_depth: 0
  functions:
    count: 34
    size_stats:
      min: 1
      mean: 10
      p90: 21
      p95: 27
      max: 31
  classes:
    count: 10
    size_stats:
      min: 2
      mean: 40
      p90: 295
      p95: 295
      max: 295
  imports:
    count: 26
    size_stats:
      min: 2
      mean: 5
      p90: 11
      p95: 11
      max: 11
tests:
  lines: 0
  files: 0
  dependencies: 0
  directories: 0
  max_directory_depth: 0
  functions:
    count: 0
    size_stats: null
  classes:
    count: 0
    size_stats: null
  imports:
    count: 0
    size_stats: null
logical:
  api_endpoints: 0
  async_events: 0
  event_subscriptions: 0
  periodic_tasks: 0
  integrated_systems: 0
complexity_score: 172
```

# Длинно

Писалось по такому ТЗ (обвесил комментариями и отметил нереализованные пункты).

1. Анализ физической структуры проекта:
   - Подсчёт строк кода (LOC) раздельно для основного кода и тестов
   - Подсчёт количества файлов (.py) раздельно для app и tests
   - Подсчёт количества директорий раздельно для app и tests
   - Определение максимальной глубины вложенности директорий (кажется почти бесполезным).

2. Анализ кодовой базы:
   - Подсчёт количества классов раздельно для app и tests
   - Подсчёт количества функций раздельно для app и tests
   - Расчёт статистики размеров (min, mean, p90, p95, max) для классов и функций (p90, p95 и max совпадают в небольших проектах и не имеют значения).
   - Определение максимальной глубины наследования классов (кажется почти бесполезным).

3. Анализ зависимостей:
   - Определение зависимостей из pyproject.toml
     - PEP 621
     - Poetry
   - Анализ requirements.txt, requirements-dev.txt, requirements-test.txt
   - Разделение зависимостей на основные (app) и тестовые (tests)

4. Анализ логической структуры:
   - Обнаружение API эндпоинтов (FastAPI)
   - Подсчёт асинхронных событий (FastStream)
   - Выявление подписок на события (FastStream)
   - Обнаружение периодических задач (FastStream - оказалось ненужным).
   - Определение интеграций с внешними системами
     - [x] PostgreSQL, Redis и др. (кажется почти бесполезным)
     - [ ] HTTP-клиенты / SDK в микросервисной архитектуре

5. Расчёт комплексной метрики:
   - Вычисление единого коэффициента сложности проекта
   - Использование логарифмического масштабирования метрик
   - Жёстко заданные весовые коэффициенты для разных аспектов сложности, которые можно поправить "под себя", но я бы не стал. Всё равно это попугаи.

6. Фильтрация и игнорирование:
   - [ ] Автоматическое использование .gitignore
   - Автоматическое разделение на основной код и тесты по шаблонам имён
   - Пропуск бинарных и не-Python файлов

7. Обработка ошибок:
   - Устойчивость к синтаксическим ошибкам в коде
   - Обработка проблем с кодировкой файлов

8. Вывод результатов:
   - Машинно- и человеко-читаемый YAML-подобный вывод.
   - Разделение метрик на логические группы (app, tests, logical, complexity_score).
   - Включение всех рассчитанных метрик
   - Чёткое отделение финального коэффициента сложности

9. Производительность:
    - Никаких требований, но работает быстро.

10. Интерфейс:
    - Принимает только один обязательный аргумент: путь к директории проекта

11. Поддержка технологий:
    - Совместимость с FastAPI и FastStream
    - Поддержка Poetry и стандартных requirements.txt
    - Распознавание async/await функций

12. Статистическая обработка:
    - Корректная обработка пустых выборок
    - Устойчивость к выбросам в данных

13. Архитектура:
    - Решил отклониться от "один python-скрипт без зависимостей"
    - "Плагинная" архитектура - достаточно докинуть новых файлов в plugins для поддержки других фреймворков, в том числе и самопальных/корпоративных.

14. Практическая полезность:
    - Возможность сравнения динамики усложнения проекта
    - Выявление "раздутых" компонентов (большие классы/функции)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "complexity-meter",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "python, complexity, analyzer, statistics",
    "author": null,
    "author_email": "Oleg Strizhechenko <oleg.strizhechenko@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/b3/c5/39b20eeb56549ba8853346ca1501a7ecc08179bb492732ea1e083474b65e/complexity_meter-0.0.1.tar.gz",
    "platform": null,
    "description": "# \u0410\u043d\u0430\u043b\u0438\u0437 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 python\n\n\u0418\u0434\u0435\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u043e\u0435\u0433\u043e \u0431\u043b\u043e\u0433\u0430 - [\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439](https://\u043e\u043b\u0435\u0433.\u043a\u0440\u044f\u0445\u0442\u0438\u0442.\u043e\u043d\u043b\u0430\u0439\u043d/2025/06/14/simplicity-management.html).\n\n# \u041a\u0440\u0430\u0442\u043a\u043e\n\n\u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u0441\u043a\u043e\u0440\u0438\u043d\u0433\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0441 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430, \u0438\u0434\u0435\u044f \u0432 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0435\u0433\u043e \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430. \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430 - \u043f\u043e\u043f\u0443\u0433\u0430\u0438.\n\n## \u0424\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430\n\n\u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f. \u0415\u0441\u043b\u0438 null \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 - \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u0430 \u043d\u0435 \u043d\u044b\u0442\u044c.\n\n``` yaml\napp:\n  lines: 409\n  files: 5\n  dependencies: 0\n  directories: 0\n  max_directory_depth: 0\n  functions:\n    count: 34\n    size_stats:\n      min: 1\n      mean: 10\n      p90: 21\n      p95: 27\n      max: 31\n  classes:\n    count: 10\n    size_stats:\n      min: 2\n      mean: 40\n      p90: 295\n      p95: 295\n      max: 295\n  imports:\n    count: 26\n    size_stats:\n      min: 2\n      mean: 5\n      p90: 11\n      p95: 11\n      max: 11\ntests:\n  lines: 0\n  files: 0\n  dependencies: 0\n  directories: 0\n  max_directory_depth: 0\n  functions:\n    count: 0\n    size_stats: null\n  classes:\n    count: 0\n    size_stats: null\n  imports:\n    count: 0\n    size_stats: null\nlogical:\n  api_endpoints: 0\n  async_events: 0\n  event_subscriptions: 0\n  periodic_tasks: 0\n  integrated_systems: 0\ncomplexity_score: 172\n```\n\n# \u0414\u043b\u0438\u043d\u043d\u043e\n\n\u041f\u0438\u0441\u0430\u043b\u043e\u0441\u044c \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0422\u0417 (\u043e\u0431\u0432\u0435\u0441\u0438\u043b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0438 \u043e\u0442\u043c\u0435\u0442\u0438\u043b \u043d\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b).\n\n1. \u0410\u043d\u0430\u043b\u0438\u0437 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430:\n   - \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 (LOC) \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\n   - \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 (.py) \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f app \u0438 tests\n   - \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f app \u0438 tests\n   - \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 (\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c).\n\n2. \u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b:\n   - \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f app \u0438 tests\n   - \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f app \u0438 tests\n   - \u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 (min, mean, p90, p95, max) \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (p90, p95 \u0438 max \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f).\n   - \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c).\n\n3. \u0410\u043d\u0430\u043b\u0438\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439:\n   - \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438\u0437 pyproject.toml\n     - PEP 621\n     - Poetry\n   - \u0410\u043d\u0430\u043b\u0438\u0437 requirements.txt, requirements-dev.txt, requirements-test.txt\n   - \u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 (app) \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 (tests)\n\n4. \u0410\u043d\u0430\u043b\u0438\u0437 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:\n   - \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 API \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 (FastAPI)\n   - \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (FastStream)\n   - \u0412\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (FastStream)\n   - \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 (FastStream - \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c).\n   - \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0439 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438\n     - [x] PostgreSQL, Redis \u0438 \u0434\u0440. (\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c)\n     - [ ] HTTP-\u043a\u043b\u0438\u0435\u043d\u0442\u044b / SDK \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435\n\n5. \u0420\u0430\u0441\u0447\u0451\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438:\n   - \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n   - \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a\n   - \u0416\u0451\u0441\u0442\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0441\u043e\u0432\u044b\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \"\u043f\u043e\u0434 \u0441\u0435\u0431\u044f\", \u043d\u043e \u044f \u0431\u044b \u043d\u0435 \u0441\u0442\u0430\u043b. \u0412\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043f\u0443\u0433\u0430\u0438.\n\n6. \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:\n   - [ ] \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 .gitignore\n   - \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u0438 \u0442\u0435\u0441\u0442\u044b \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c \u0438\u043c\u0451\u043d\n   - \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0438 \u043d\u0435-Python \u0444\u0430\u0439\u043b\u043e\u0432\n\n7. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a:\n   - \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0430\u043c \u0432 \u043a\u043e\u0434\u0435\n   - \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\n\n8. \u0412\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432:\n   - \u041c\u0430\u0448\u0438\u043d\u043d\u043e- \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e-\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 YAML-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434.\n   - \u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a \u043d\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b (app, tests, logical, complexity_score).\n   - \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\n   - \u0427\u0451\u0442\u043a\u043e\u0435 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n\n9. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:\n    - \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e.\n\n10. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:\n    - \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442: \u043f\u0443\u0442\u044c \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n\n11. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439:\n    - \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 FastAPI \u0438 FastStream\n    - \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Poetry \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 requirements.txt\n    - \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 async/await \u0444\u0443\u043d\u043a\u0446\u0438\u0439\n\n12. \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430:\n    - \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0443\u0441\u0442\u044b\u0445 \u0432\u044b\u0431\u043e\u0440\u043e\u043a\n    - \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0432\u044b\u0431\u0440\u043e\u0441\u0430\u043c \u0432 \u0434\u0430\u043d\u043d\u044b\u0445\n\n13. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430:\n    - \u0420\u0435\u0448\u0438\u043b \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \"\u043e\u0434\u0438\u043d python-\u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439\"\n    - \"\u041f\u043b\u0430\u0433\u0438\u043d\u043d\u0430\u044f\" \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 - \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043a\u0438\u043d\u0443\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 plugins \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441\u0430\u043c\u043e\u043f\u0430\u043b\u044c\u043d\u044b\u0445/\u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445.\n\n14. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u044c:\n    - \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n    - \u0412\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \"\u0440\u0430\u0437\u0434\u0443\u0442\u044b\u0445\" \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b/\u0444\u0443\u043d\u043a\u0446\u0438\u0438)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Script to track python project complexity",
    "version": "0.0.1",
    "project_urls": {
        "Homepage": "https://codeberg.org/strizhechenko/complexity-meter"
    },
    "split_keywords": [
        "python",
        " complexity",
        " analyzer",
        " statistics"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "041175a44f68ddbadfc47972c042aa6a25e9a8acaa214a3a9d89d72aa86c08ab",
                "md5": "479a68e4b3cfd9bae84505e119694fa8",
                "sha256": "a7bf9e0ad106da77ac1f583982f928ac4e185080527e2233b9e80439e5de0bc8"
            },
            "downloads": -1,
            "filename": "complexity_meter-0.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "479a68e4b3cfd9bae84505e119694fa8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 11971,
            "upload_time": "2025-07-26T00:11:37",
            "upload_time_iso_8601": "2025-07-26T00:11:37.347696Z",
            "url": "https://files.pythonhosted.org/packages/04/11/75a44f68ddbadfc47972c042aa6a25e9a8acaa214a3a9d89d72aa86c08ab/complexity_meter-0.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b3c539b20eeb56549ba8853346ca1501a7ecc08179bb492732ea1e083474b65e",
                "md5": "4e486833a52513cae39b4e5d304524b8",
                "sha256": "eead8dbd5e46921038461745332f4b519695b447cc206d369264002443616541"
            },
            "downloads": -1,
            "filename": "complexity_meter-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "4e486833a52513cae39b4e5d304524b8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 12488,
            "upload_time": "2025-07-26T00:11:39",
            "upload_time_iso_8601": "2025-07-26T00:11:39.443363Z",
            "url": "https://files.pythonhosted.org/packages/b3/c5/39b20eeb56549ba8853346ca1501a7ecc08179bb492732ea1e083474b65e/complexity_meter-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-26 00:11:39",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": true,
    "codeberg_user": "strizhechenko",
    "codeberg_project": "complexity-meter",
    "lcname": "complexity-meter"
}
        
Elapsed time: 0.61795s