From 52bd731fc3a9eccd34a9e42867175ea295d37cc5 Mon Sep 17 00:00:00 2001 From: Deeman Date: Sat, 28 Feb 2026 10:05:05 +0100 Subject: [PATCH] chore: fix all ruff lint warnings (unused imports, unsorted imports, unused vars) Co-Authored-By: Claude Sonnet 4.6 --- tests/test_ice_extraction.py | 7 ++----- web/scripts/seed_cms_coffee.py | 2 +- web/src/beanflows/admin/cms_routes.py | 7 ++++--- web/src/beanflows/billing/routes.py | 6 ++---- web/src/beanflows/worker.py | 3 +-- web/tests/conftest.py | 4 ---- web/tests/test_analytics.py | 1 - web/tests/test_billing_helpers.py | 3 +-- web/tests/test_billing_routes.py | 1 - web/tests/test_billing_webhooks.py | 2 -- web/tests/test_roles.py | 3 +-- 11 files changed, 12 insertions(+), 27 deletions(-) diff --git a/tests/test_ice_extraction.py b/tests/test_ice_extraction.py index 2a6d008..7fbc35c 100644 --- a/tests/test_ice_extraction.py +++ b/tests/test_ice_extraction.py @@ -1,10 +1,8 @@ """Tests for ICE extraction: format detection, XLS parsing, API client.""" import csv -import gzip import io -import struct -from unittest.mock import MagicMock, patch +from unittest.mock import MagicMock import pytest import xlwt # noqa: F401 — needed to create XLS fixtures; skip tests if missing @@ -96,7 +94,7 @@ def test_fetch_report_listings_parses_response(): _make_api_row("Certified Stock Aging Report", "/dl/aging.xls"), ]) - from ice_stocks.ice_api import ICE_BASE_URL, fetch_report_listings + from ice_stocks.ice_api import ICE_BASE_URL rows = fetch_report_listings(mock_session, product_id=2) assert len(rows) == 2 @@ -113,7 +111,6 @@ def test_fetch_report_listings_prepends_base_url_for_absolute(): _make_api_row("Test", "https://other.example.com/file.xls"), ]) - from ice_stocks.ice_api import fetch_report_listings rows = fetch_report_listings(mock_session, product_id=2) assert rows[0]["download_url"] == "https://other.example.com/file.xls" diff --git a/web/scripts/seed_cms_coffee.py b/web/scripts/seed_cms_coffee.py index 4ef33df..344356a 100644 --- a/web/scripts/seed_cms_coffee.py +++ b/web/scripts/seed_cms_coffee.py @@ -169,7 +169,7 @@ def fetch_country_data_from_duckdb() -> list[dict]: ) SELECT * FROM ranked LIMIT 30 """).fetchall() - cols = [d[0] for d in conn.execute(""" + _ = [d[0] for d in conn.execute(""" WITH latest AS (SELECT MAX(market_year) AS max_year FROM serving.commodity_metrics WHERE commodity_code = 711100 AND country_code IS NOT NULL) SELECT country_name, country_code, market_year, production * 1000, diff --git a/web/src/beanflows/admin/cms_routes.py b/web/src/beanflows/admin/cms_routes.py index b19a5b4..9ab6788 100644 --- a/web/src/beanflows/admin/cms_routes.py +++ b/web/src/beanflows/admin/cms_routes.py @@ -8,7 +8,7 @@ from pathlib import Path from quart import Blueprint, flash, g, redirect, render_template, request, url_for -from ..core import execute, fetch_all, fetch_one, csrf_protect +from ..core import csrf_protect, execute, fetch_all, fetch_one bp = Blueprint( "cms", @@ -23,7 +23,8 @@ def admin_required(f): async def decorated(*args, **kwargs): if "admin" not in (g.get("user") or {}).get("roles", []): await flash("Admin access required.", "error") - from quart import redirect as _redirect, url_for as _url_for + from quart import redirect as _redirect + from quart import url_for as _url_for return _redirect(_url_for("auth.login")) return await f(*args, **kwargs) return decorated @@ -71,7 +72,7 @@ async def list_template_data(template_id: int) -> list[dict]: async def generate_article_from_data(data_row: dict, tmpl: dict) -> int | None: """Generate (or regenerate) a single article from a template_data row.""" - from jinja2 import Environment, BaseLoader + from jinja2 import BaseLoader, Environment try: data = json.loads(data_row["data_json"]) diff --git a/web/src/beanflows/billing/routes.py b/web/src/beanflows/billing/routes.py index cda88c8..d5a58b0 100644 --- a/web/src/beanflows/billing/routes.py +++ b/web/src/beanflows/billing/routes.py @@ -9,12 +9,10 @@ from datetime import datetime from functools import wraps from pathlib import Path -from quart import Blueprint, render_template, request, redirect, url_for, flash, g, jsonify, session +from quart import Blueprint, flash, g, jsonify, redirect, render_template, request, session, url_for -from ..core import config, fetch_one, fetch_all, execute from ..auth.routes import login_required - - +from ..core import config, execute, fetch_one logger = logging.getLogger(__name__) diff --git a/web/src/beanflows/worker.py b/web/src/beanflows/worker.py index 75c3734..5022e4e 100644 --- a/web/src/beanflows/worker.py +++ b/web/src/beanflows/worker.py @@ -6,8 +6,7 @@ import json import traceback from datetime import datetime, timedelta -from .core import config, init_db, fetch_one, fetch_all, execute, send_email - +from .core import config, execute, fetch_all, init_db, send_email # Task handlers registry HANDLERS: dict[str, callable] = {} diff --git a/web/tests/conftest.py b/web/tests/conftest.py index dcd1f4e..49b1cfb 100644 --- a/web/tests/conftest.py +++ b/web/tests/conftest.py @@ -1,8 +1,6 @@ """ Shared test fixtures for the BeanFlows test suite. """ -import hashlib -import hmac from datetime import datetime from pathlib import Path from unittest.mock import AsyncMock, patch @@ -10,11 +8,9 @@ from unittest.mock import AsyncMock, patch import aiosqlite import pytest - from beanflows import core from beanflows.app import create_app - SCHEMA_PATH = Path(__file__).parent.parent / "src" / "beanflows" / "migrations" / "schema.sql" diff --git a/web/tests/test_analytics.py b/web/tests/test_analytics.py index b10f7c8..032693b 100644 --- a/web/tests/test_analytics.py +++ b/web/tests/test_analytics.py @@ -14,7 +14,6 @@ import asyncio import duckdb import pytest - # ── Fixtures ──────────────────────────────────────────────────────────────── diff --git a/web/tests/test_billing_helpers.py b/web/tests/test_billing_helpers.py index f7ac362..36e0081 100644 --- a/web/tests/test_billing_helpers.py +++ b/web/tests/test_billing_helpers.py @@ -7,7 +7,6 @@ from hypothesis import settings as h_settings from hypothesis import strategies as st from beanflows.billing.routes import ( - can_access_feature, get_billing_customer, get_subscription, @@ -66,7 +65,7 @@ class TestUpsertSubscription: status="active", provider_subscription_id="sub_same", ) - returned_id = await upsert_subscription( + await upsert_subscription( user_id=test_user["id"], plan="pro", status="active", diff --git a/web/tests/test_billing_routes.py b/web/tests/test_billing_routes.py index 7043f12..b57be63 100644 --- a/web/tests/test_billing_routes.py +++ b/web/tests/test_billing_routes.py @@ -11,7 +11,6 @@ from unittest.mock import MagicMock import pytest - CHECKOUT_METHOD = "POST" CHECKOUT_PLAN = "starter" diff --git a/web/tests/test_billing_webhooks.py b/web/tests/test_billing_webhooks.py index 96e291d..295cb87 100644 --- a/web/tests/test_billing_webhooks.py +++ b/web/tests/test_billing_webhooks.py @@ -6,14 +6,12 @@ import json import pytest from conftest import make_webhook_payload, sign_payload - from hypothesis import HealthCheck, given from hypothesis import settings as h_settings from hypothesis import strategies as st from beanflows.billing.routes import get_billing_customer, get_subscription - WEBHOOK_PATH = "/billing/webhook/paddle" SIG_HEADER = "Paddle-Signature" diff --git a/web/tests/test_roles.py b/web/tests/test_roles.py index cf2e0ca..ba46746 100644 --- a/web/tests/test_roles.py +++ b/web/tests/test_roles.py @@ -5,14 +5,13 @@ and admin route protection. import pytest from quart import Blueprint +from beanflows import core from beanflows.auth.routes import ( ensure_admin_role, grant_role, revoke_role, role_required, ) -from beanflows import core - # ════════════════════════════════════════════════════════════ # grant_role / revoke_role