diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ac198a26..ba05da1b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,15 +29,9 @@ repos: - id: check-merge-conflict - id: debug-statements - # Python formatting (optional - uncomment if you want) - # - repo: https://github.com/psf/black - # rev: 23.12.1 - # hooks: - # - id: black - # language_version: python3 - - # Python import sorting (optional) - # - repo: https://github.com/pycqa/isort - # rev: 5.13.2 - # hooks: - # - id: isort + # Ruff - linting and import sorting (replaces black + isort) + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.8.4 + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] diff --git a/app/modules/analytics/services/stats_service.py b/app/modules/analytics/services/stats_service.py index 649f6a40..6b065718 100644 --- a/app/modules/analytics/services/stats_service.py +++ b/app/modules/analytics/services/stats_service.py @@ -21,7 +21,10 @@ from sqlalchemy.orm import Session from app.modules.catalog.models import Product # IMPORT-002 from app.modules.customers.models.customer import Customer # IMPORT-002 from app.modules.inventory.models import Inventory # IMPORT-002 -from app.modules.marketplace.models import MarketplaceImportJob, MarketplaceProduct # IMPORT-002 +from app.modules.marketplace.models import ( # IMPORT-002 + MarketplaceImportJob, + MarketplaceProduct, +) from app.modules.orders.models import Order # IMPORT-002 from app.modules.tenancy.exceptions import ( AdminOperationException, diff --git a/app/modules/billing/models/subscription.py b/app/modules/billing/models/subscription.py index 05f8ac8d..69be3bfb 100644 --- a/app/modules/billing/models/subscription.py +++ b/app/modules/billing/models/subscription.py @@ -22,7 +22,6 @@ from sqlalchemy import ( ForeignKey, Index, Integer, - Numeric, String, Text, ) diff --git a/app/modules/billing/schemas/__init__.py b/app/modules/billing/schemas/__init__.py index 5861b2ee..bcc2ae3b 100644 --- a/app/modules/billing/schemas/__init__.py +++ b/app/modules/billing/schemas/__init__.py @@ -21,8 +21,6 @@ from app.modules.billing.schemas.billing import ( CancelRequest, CancelResponse, CategoryListResponse, - ChangeTierRequest as BillingChangeTierRequest, - ChangeTierResponse as BillingChangeTierResponse, # Checkout & Portal schemas CheckoutRequest, CheckoutResponse, @@ -56,12 +54,18 @@ from app.modules.billing.schemas.billing import ( SubscriptionTierListResponse, SubscriptionTierResponse, SubscriptionTierUpdate, - TierListResponse, - TierResponse, # Subscription Tier Admin schemas TierFeatureLimitEntry, + TierListResponse, + TierResponse, UpcomingInvoiceResponse, ) +from app.modules.billing.schemas.billing import ( + ChangeTierRequest as BillingChangeTierRequest, +) +from app.modules.billing.schemas.billing import ( + ChangeTierResponse as BillingChangeTierResponse, +) from app.modules.billing.schemas.subscription import ( ChangeTierRequest, ChangeTierResponse, diff --git a/app/modules/messaging/routes/api/storefront.py b/app/modules/messaging/routes/api/storefront.py index 0284d7b2..2b68bc9e 100644 --- a/app/modules/messaging/routes/api/storefront.py +++ b/app/modules/messaging/routes/api/storefront.py @@ -32,7 +32,10 @@ from app.modules.messaging.exceptions import ( ConversationClosedException, ConversationNotFoundException, ) -from app.modules.messaging.models.message import ConversationType, ParticipantType # API-007 +from app.modules.messaging.models.message import ( # API-007 + ConversationType, + ParticipantType, +) from app.modules.messaging.schemas import ( ConversationDetailResponse, ConversationListResponse, diff --git a/app/modules/monitoring/models/__init__.py b/app/modules/monitoring/models/__init__.py index dfe2353c..349408d7 100644 --- a/app/modules/monitoring/models/__init__.py +++ b/app/modules/monitoring/models/__init__.py @@ -5,10 +5,9 @@ Monitoring module database models. Provides monitoring-related models including capacity snapshots. """ -from app.modules.monitoring.models.capacity_snapshot import CapacitySnapshot - # Admin notification and logging models from app.modules.messaging.models import AdminNotification +from app.modules.monitoring.models.capacity_snapshot import CapacitySnapshot from app.modules.tenancy.models import PlatformAlert __all__ = [ diff --git a/app/modules/monitoring/services/__init__.py b/app/modules/monitoring/services/__init__.py index 96f61dad..6d1ae6cb 100644 --- a/app/modules/monitoring/services/__init__.py +++ b/app/modules/monitoring/services/__init__.py @@ -9,14 +9,14 @@ from app.modules.monitoring.services.admin_audit_service import ( AdminAuditService, admin_audit_service, ) -from app.modules.monitoring.services.capacity_forecast_service import ( - CapacityForecastService, - capacity_forecast_service, -) from app.modules.monitoring.services.background_tasks_service import ( BackgroundTasksService, background_tasks_service, ) +from app.modules.monitoring.services.capacity_forecast_service import ( + CapacityForecastService, + capacity_forecast_service, +) from app.modules.monitoring.services.log_service import ( LogService, log_service, diff --git a/main.py b/main.py index 641567dd..c209e786 100644 --- a/main.py +++ b/main.py @@ -26,11 +26,11 @@ from fastapi import Depends, FastAPI, HTTPException, Request, Response from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse from fastapi.staticfiles import StaticFiles -from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware from sentry_sdk.integrations.fastapi import FastApiIntegration from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration from sqlalchemy import text from sqlalchemy.orm import Session +from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware from app.api.main import api_router from app.core.config import settings diff --git a/requirements-dev.txt b/requirements-dev.txt index b2403cc4..4c6a1f88 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -5,7 +5,7 @@ alembic>=1.14.0 # Linting and formatting tools black>=24.10.0 isort>=5.13.2 -ruff>=0.8.4 # Modern alternative to flake8, faster and Python 3.13 compatible +ruff==0.8.4 # Pinned — must match pre-commit hook and local version mypy>=1.13.0 # Optional: More advanced linting (if you prefer flake8 over ruff) diff --git a/scripts/validate/validate_architecture.py b/scripts/validate/validate_architecture.py index ec9eadd0..dc870e2a 100755 --- a/scripts/validate/validate_architecture.py +++ b/scripts/validate/validate_architecture.py @@ -4663,7 +4663,7 @@ class ArchitectureValidator: if imported_module == module_name: continue - # Skip suppression comments (# IMPORT-002 or # noqa: import-002) + # Skip suppression comments (# IMPORT-002) if "import-002" in line.lower(): continue diff --git a/tests/integration/middleware/conftest.py b/tests/integration/middleware/conftest.py index f31b5740..20373424 100644 --- a/tests/integration/middleware/conftest.py +++ b/tests/integration/middleware/conftest.py @@ -26,8 +26,8 @@ from main import app from tests.integration.middleware.middleware_test_routes import ( admin_router, api_router, - storefront_router, store_router, + storefront_router, ) from tests.integration.middleware.middleware_test_routes import ( router as test_router,