The Test Suite job failed on every push since the black check was added because the tree had never been formatted, and pre-commit said 120 columns while CI ran black's default 88. pyproject.toml now carries [tool.black] / [tool.isort] (88, black profile) as the single source; pre-commit reads it; `make format` applied it (13 files, whitespace only, 146 insertions / 128 deletions, tests unchanged at 146 passed). ci.yml: lint (black, isort, flake8 hard errors) + pytest. The Docker registry push, VictoriaMetrics integration test, staging/production deploy and Apache-Bench jobs were template scaffolding for hosts and registries that do not exist; production is a systemd unit updated by git pull. Removed rather than left permanently skipped. docs.yml: the "Check markdown links" step curl'd every URL in every .md and failed on localhost examples and the Tailscale IP, and the Sphinx jobs built artifacts nobody read. Replaced by two checks that mean something: relative links/images in README, CONTRIBUTING and docs/ resolve inside the repo, and the FastAPI OpenAPI schema exports with the documented endpoints present (uploaded as an artifact).
144 lines
3.6 KiB
TOML
144 lines
3.6 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=61.0", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "northern-thailand-ping-river-monitor"
|
|
version = "3.1.3"
|
|
description = "Real-time water level monitoring system for the Ping River Basin in Northern Thailand"
|
|
readme = "README.md"
|
|
license = {text = "MIT"}
|
|
authors = [
|
|
{name = "Ping River Monitor Team", email = "contact@example.com"}
|
|
]
|
|
keywords = [
|
|
"water monitoring",
|
|
"hydrology",
|
|
"thailand",
|
|
"ping river",
|
|
"environmental monitoring",
|
|
"time series",
|
|
"fastapi",
|
|
"real-time data"
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Intended Audience :: Science/Research",
|
|
"Intended Audience :: System Administrators",
|
|
"Topic :: Scientific/Engineering :: Hydrology",
|
|
"Topic :: System :: Monitoring",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Operating System :: OS Independent",
|
|
"Environment :: Web Environment",
|
|
"Framework :: FastAPI"
|
|
]
|
|
requires-python = ">=3.11"
|
|
dependencies = [
|
|
# Core dependencies
|
|
"requests==2.31.0",
|
|
"schedule==1.2.0",
|
|
"pandas==2.0.3",
|
|
"numpy>=1.24,<2",
|
|
# Flood forecasting (ML)
|
|
"scikit-learn==1.9.0",
|
|
# Web API framework
|
|
"fastapi==0.104.1",
|
|
"uvicorn[standard]==0.24.0",
|
|
"pydantic==2.5.0",
|
|
# Database adapters
|
|
"sqlalchemy==2.0.23",
|
|
"influxdb==5.3.1",
|
|
"pymysql==1.1.0",
|
|
"psycopg2-binary==2.9.9",
|
|
# Monitoring and metrics
|
|
"psutil==5.9.6"
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
# Testing
|
|
"pytest==7.4.3",
|
|
"pytest-cov==4.1.0",
|
|
"pytest-asyncio==0.21.1",
|
|
# Code formatting and linting
|
|
"black==23.11.0",
|
|
"flake8==6.1.0",
|
|
"isort==5.12.0",
|
|
"mypy==1.7.1",
|
|
# Pre-commit hooks
|
|
"pre-commit==3.5.0",
|
|
# Development tools
|
|
"ipython==8.17.2",
|
|
"jupyter==1.0.0",
|
|
# Type stubs
|
|
"types-requests==2.31.0.10",
|
|
"types-python-dateutil==2.8.19.14"
|
|
]
|
|
docs = [
|
|
"sphinx==7.2.6",
|
|
"sphinx-rtd-theme==1.3.0",
|
|
"sphinx-autodoc-typehints==1.25.2"
|
|
]
|
|
all = [
|
|
"influxdb==5.3.1",
|
|
"pymysql==1.1.0",
|
|
"psycopg2-binary==2.9.9"
|
|
]
|
|
|
|
[project.scripts]
|
|
ping-river-monitor = "src.main:main"
|
|
ping-river-api = "src.web_api:main"
|
|
|
|
[project.urls]
|
|
Homepage = "https://git.b4l.co.th/B4L/Northern-Thailand-Ping-River-Monitor"
|
|
Repository = "https://git.b4l.co.th/B4L/Northern-Thailand-Ping-River-Monitor"
|
|
Issues = "https://git.b4l.co.th/B4L/Northern-Thailand-Ping-River-Monitor/issues"
|
|
Documentation = "https://git.b4l.co.th/B4L/Northern-Thailand-Ping-River-Monitor/wiki"
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
# Testing
|
|
"pytest==7.4.3",
|
|
"pytest-cov==4.1.0",
|
|
"pytest-asyncio==0.21.1",
|
|
# Code formatting and linting
|
|
"black==23.11.0",
|
|
"flake8==6.1.0",
|
|
"isort==5.12.0",
|
|
"mypy==1.7.1",
|
|
# Pre-commit hooks
|
|
"pre-commit==3.5.0",
|
|
# Development tools
|
|
"ipython==8.17.2",
|
|
"jupyter==1.0.0",
|
|
# Type stubs
|
|
"types-requests==2.31.0.10",
|
|
"types-python-dateutil==2.8.19.14",
|
|
# Documentation
|
|
"sphinx==7.2.6",
|
|
"sphinx-rtd-theme==1.3.0",
|
|
"sphinx-autodoc-typehints==1.25.2",
|
|
"pyinstaller>=6.16.0",
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["src"]
|
|
|
|
[tool.setuptools.package-dir]
|
|
"" = "src"
|
|
|
|
# One formatting contract for CI, pre-commit and editors. Black's default 88
|
|
# columns; isort in black-compatible mode. Run `make format` before committing.
|
|
[tool.black]
|
|
line-length = 88
|
|
target-version = ["py311"]
|
|
extend-exclude = '/(\.venv|venv|models|\.claude-flow|\.swarm)/'
|
|
|
|
[tool.isort]
|
|
profile = "black"
|
|
line_length = 88
|
|
known_first_party = ["src"]
|
|
skip_gitignore = true
|