Desktop-приложение на Kivy и веб-версия на FastAPI для расчета механических нагрузок на опоры при подвесе кабеля. Код приложения оформлен как Python-пакет cable_span_calc в src/.
main.py- совместимый launcher для запуска из корня проекта.src/cable_span_calc/app.py- основная точка входа Kivy-приложения.src/cable_span_calc/cable.py- расчетная модель кабеля.src/cable_span_calc/plotting.py- генерация графика пролета в PNG-буфер.src/cable_span_calc/ui/- интерфейс, виджеты и JSON-сохранение проектов.src/cable_span_calc/web/- FastAPI API и статический web-интерфейс.src/cable_span_calc/resources/- изображения, используемые интерфейсом.tests/- smoke-тесты расчетов и генерации графика.examples/- отдельные демонстрационные наброски.docs/diagrams/- PlantUML-диаграммы проекта.docs/images/- иллюстрации и старые сгенерированные изображения.
uv sync
uv run python main.pyВеб-версия:
uv run cable-span-calc-web --reloadПосле запуска откройте http://127.0.0.1:8000. OpenAPI-документация доступна на http://127.0.0.1:8000/docs.
Альтернативные варианты:
PYTHONPATH=src uv run cable-span-calc
PYTHONPATH=src uv run python -m cable_span_calcДля проверок:
uv run pytest
uv run ruff check .Проект закреплен на Python >=3.9,<3.13, потому что текущие зависимости Kivy/Matplotlib надежнее работают в этом диапазоне. Файл .python-version просит uv использовать Python 3.12.
Для web-версии:
docker compose up --build cable-span-calc-webЗатем откройте http://127.0.0.1:8000.
Для Kivy-приложения контейнеру нужен доступ к дисплею хоста.
Сборка:
docker build -t cable-span-calc .Linux/X11:
xhost +local:docker
docker run --rm -it \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
cable-span-calcmacOS требует запущенный XQuartz с включенной опцией "Allow connections from network clients". Обычно достаточно:
docker run --rm -it \
-e DISPLAY=host.docker.internal:0 \
cable-span-calcЧерез Compose:
docker compose up --build cable-span-calc- Виртуальное окружение, кеши тестов, системные файлы
.DS_Store/Thumbs.dbи локальные JSON-сохранения игнорируются git. plotting.pyиспользует backendAgg, чтобы генерация графика работала в тестах и headless-средах.- Текущий UI рассчитан на большое окно:
app.pyзадает стартовый размер1800x1200.