chore: consolidate to single ruff config in root pyproject.toml
All checks were successful
CI / test-cli (push) Successful in 11s
CI / test-sqlmesh (push) Successful in 14s
CI / test-web (push) Successful in 14s
CI / tag (push) Successful in 2s

- Merge web ruff settings (select E/F/I/UP, line-length 100) into root config
- Remove [tool.ruff] section from web/pyproject.toml
- Remove "web" from root ruff exclude list
- Simplify pre-commit hook to one command: ruff check .
- Update CI to use: uv run ruff check . (from repo root)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Deeman
2026-02-28 12:21:01 +01:00
parent 42c1309b20
commit c8b86569ff
14 changed files with 29 additions and 37 deletions

View File

@@ -45,7 +45,7 @@ test:web:
script: script:
- uv sync --all-packages - uv sync --all-packages
- cd web && uv run pytest tests/ -x -q - cd web && uv run pytest tests/ -x -q
- cd web && uv run ruff check src/ tests/ - uv run ruff check .
# ── Tag (pull-based deploy) ─────────────────────────────────────────────────── # ── Tag (pull-based deploy) ───────────────────────────────────────────────────
# Creates v<N> tag after all tests pass. The on-server supervisor polls for new # Creates v<N> tag after all tests pass. The on-server supervisor polls for new

View File

@@ -15,8 +15,14 @@ import sys
from pathlib import Path from pathlib import Path
import yfinance as yf import yfinance as yf
from extract_core import content_hash, end_run, landing_path, open_state_db, start_run from extract_core import (
from extract_core import write_bytes_atomic content_hash,
end_run,
landing_path,
open_state_db,
start_run,
write_bytes_atomic,
)
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=logging.INFO,

View File

@@ -1,4 +1,3 @@
from .normalize import normalize_zipped_csv
import logging import logging
import os import os
import sys import sys
@@ -7,8 +6,16 @@ from io import BytesIO
from pathlib import Path from pathlib import Path
import niquests import niquests
from extract_core import end_run, landing_path, normalize_etag, open_state_db, start_run from extract_core import (
from extract_core import write_bytes_atomic end_run,
landing_path,
normalize_etag,
open_state_db,
start_run,
write_bytes_atomic,
)
from .normalize import normalize_zipped_csv
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=logging.INFO,

View File

@@ -1,8 +1,7 @@
import zipfile
import gzip import gzip
from io import BytesIO
import pathlib import pathlib
import zipfile
from io import BytesIO
def normalize_zipped_csv(buffer: BytesIO)->BytesIO: def normalize_zipped_csv(buffer: BytesIO)->BytesIO:

View File

@@ -88,14 +88,15 @@ exclude = [
"site-packages", "site-packages",
"venv", "venv",
"notebooks", "notebooks",
"web",
] ]
line-length = 100
indent-width = 4 indent-width = 4
target-version = "py313" target-version = "py313"
[tool.ruff.lint] [tool.ruff.lint]
select = ["E", "F", "I", "UP"]
ignore = [ ignore = [
"E501", # line too long (handled by formatter) "E501", # line too long (handled by formatter)

View File

@@ -11,12 +11,8 @@ if [[ ! -x "$RUFF" ]]; then
exit 1 exit 1
fi fi
echo "→ ruff check (root)" echo "→ ruff check"
"$RUFF" check --fix "$REPO_ROOT" "$RUFF" check --fix "$REPO_ROOT"
echo "→ ruff check (web/src web/tests)"
"$RUFF" check --fix "$REPO_ROOT/web/src" "$REPO_ROOT/web/tests" \
--config "$REPO_ROOT/web/pyproject.toml"
# Re-stage any files ruff fixed so they land in the commit. # Re-stage any files ruff fixed so they land in the commit.
git diff --name-only | xargs -r git add git diff --name-only | xargs -r git add

View File

@@ -7,7 +7,6 @@ from unittest.mock import MagicMock
from cftc_cot.normalize import find_csv_inner_filename, normalize_zipped_csv from cftc_cot.normalize import find_csv_inner_filename, normalize_zipped_csv
# ============================================================================= # =============================================================================
# normalize.py # normalize.py
# ============================================================================= # =============================================================================

View File

@@ -6,7 +6,6 @@ from unittest.mock import MagicMock
import pytest import pytest
import xlwt # noqa: F401 — needed to create XLS fixtures; skip tests if missing import xlwt # noqa: F401 — needed to create XLS fixtures; skip tests if missing
from ice_stocks.ice_api import fetch_report_listings, find_latest_report from ice_stocks.ice_api import fetch_report_listings, find_latest_report
from ice_stocks.xls_parse import OLE2_MAGIC, detect_file_format, xls_to_rows from ice_stocks.xls_parse import OLE2_MAGIC, detect_file_format, xls_to_rows

View File

@@ -36,14 +36,6 @@ dev-dependencies = [
"ruff>=0.3.0", "ruff>=0.3.0",
] ]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "UP"]
ignore = ["E501"]
[tool.pytest.ini_options] [tool.pytest.ini_options]
asyncio_mode = "auto" asyncio_mode = "auto"
testpaths = ["tests"] testpaths = ["tests"]

View File

@@ -23,8 +23,7 @@ def admin_required(f):
async def decorated(*args, **kwargs): async def decorated(*args, **kwargs):
if "admin" not in (g.get("user") or {}).get("roles", []): if "admin" not in (g.get("user") or {}).get("roles", []):
await flash("Admin access required.", "error") await flash("Admin access required.", "error")
from quart import redirect as _redirect from quart import redirect as _redirect, url_for as _url_for
from quart import url_for as _url_for
return _redirect(_url_for("auth.login")) return _redirect(_url_for("auth.login"))
return await f(*args, **kwargs) return await f(*args, **kwargs)
return decorated return decorated

View File

@@ -105,8 +105,7 @@ def create_app() -> Quart:
# Health check # Health check
@app.route("/health") @app.route("/health")
async def health(): async def health():
from .analytics import _db_path as serving_db_path from .analytics import _db_path as serving_db_path, fetch_analytics
from .analytics import fetch_analytics
from .core import fetch_one from .core import fetch_one
result = {"status": "healthy", "sqlite": "ok", "duckdb": "ok"} result = {"status": "healthy", "sqlite": "ok", "duckdb": "ok"}
try: try:

View File

@@ -13,8 +13,7 @@ import os
import sys import sys
from dotenv import load_dotenv from dotenv import load_dotenv
from paddle_billing import Client as PaddleClient from paddle_billing import Client as PaddleClient, Environment, Options
from paddle_billing import Environment, Options
from paddle_billing.Entities.Shared import CurrencyCode, Money, TaxCategory from paddle_billing.Entities.Shared import CurrencyCode, Money, TaxCategory
from paddle_billing.Resources.Prices.Operations import CreatePrice from paddle_billing.Resources.Prices.Operations import CreatePrice
from paddle_billing.Resources.Products.Operations import CreateProduct from paddle_billing.Resources.Products.Operations import CreateProduct

View File

@@ -14,9 +14,7 @@ from beanflows.billing.routes import (
upsert_subscription, upsert_subscription,
) )
from beanflows.core import config from beanflows.core import config
from hypothesis import HealthCheck, given from hypothesis import HealthCheck, given, settings as h_settings, strategies as st
from hypothesis import settings as h_settings
from hypothesis import strategies as st
# ════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════
# get_subscription # get_subscription

View File

@@ -7,9 +7,7 @@ import json
import pytest import pytest
from beanflows.billing.routes import get_billing_customer, get_subscription from beanflows.billing.routes import get_billing_customer, get_subscription
from conftest import make_webhook_payload, sign_payload from conftest import make_webhook_payload, sign_payload
from hypothesis import HealthCheck, given from hypothesis import HealthCheck, given, settings as h_settings, strategies as st
from hypothesis import settings as h_settings
from hypothesis import strategies as st
WEBHOOK_PATH = "/billing/webhook/paddle" WEBHOOK_PATH = "/billing/webhook/paddle"
SIG_HEADER = "Paddle-Signature" SIG_HEADER = "Paddle-Signature"