fix(lint): auto-fix ruff violations and tune lint rules
- Auto-fixed 4,496 lint issues (import sorting, modern syntax, etc.) - Added ignore rules for patterns intentional in this codebase: E402 (late imports), E712 (SQLAlchemy filters), B904 (raise from), SIM108/SIM105/SIM117 (readability preferences) - Added per-file ignores for tests and scripts - Excluded broken scripts/rename_terminology.py (has curly quotes) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,18 @@ This module contains the canonical implementations of marketplace-related servic
|
||||
"""
|
||||
|
||||
# Main marketplace services
|
||||
# Letzshop submodule services
|
||||
from app.modules.marketplace.services.letzshop import (
|
||||
LetzshopClient,
|
||||
LetzshopClientError,
|
||||
)
|
||||
from app.modules.marketplace.services.letzshop.credentials_service import (
|
||||
LetzshopCredentialsService,
|
||||
)
|
||||
from app.modules.marketplace.services.letzshop.order_service import LetzshopOrderService
|
||||
from app.modules.marketplace.services.letzshop.store_sync_service import (
|
||||
LetzshopStoreSyncService,
|
||||
)
|
||||
from app.modules.marketplace.services.letzshop_export_service import (
|
||||
LetzshopExportService,
|
||||
letzshop_export_service,
|
||||
@@ -23,24 +35,11 @@ from app.modules.marketplace.services.onboarding_service import (
|
||||
get_onboarding_service,
|
||||
)
|
||||
from app.modules.marketplace.services.platform_signup_service import (
|
||||
PlatformSignupService,
|
||||
platform_signup_service,
|
||||
SignupSessionData,
|
||||
AccountCreationResult,
|
||||
PlatformSignupService,
|
||||
SignupCompletionResult,
|
||||
)
|
||||
|
||||
# Letzshop submodule services
|
||||
from app.modules.marketplace.services.letzshop import (
|
||||
LetzshopClient,
|
||||
LetzshopClientError,
|
||||
)
|
||||
from app.modules.marketplace.services.letzshop.credentials_service import (
|
||||
LetzshopCredentialsService,
|
||||
)
|
||||
from app.modules.marketplace.services.letzshop.order_service import LetzshopOrderService
|
||||
from app.modules.marketplace.services.letzshop.store_sync_service import (
|
||||
LetzshopStoreSyncService,
|
||||
SignupSessionData,
|
||||
platform_signup_service,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
|
||||
@@ -8,7 +8,8 @@ for all Letzshop API operations.
|
||||
|
||||
import logging
|
||||
import time
|
||||
from typing import Any, Callable
|
||||
from collections.abc import Callable
|
||||
from typing import Any
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ from datetime import UTC, datetime
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.utils.encryption import decrypt_value, encrypt_value, mask_api_key
|
||||
from app.modules.marketplace.models import StoreLetzshopCredentials
|
||||
from app.utils.encryption import decrypt_value, encrypt_value, mask_api_key
|
||||
|
||||
from .client_service import LetzshopClient
|
||||
|
||||
|
||||
@@ -8,14 +8,15 @@ with `channel='letzshop'`.
|
||||
"""
|
||||
|
||||
import logging
|
||||
from collections.abc import Callable
|
||||
from datetime import UTC, datetime
|
||||
from typing import Any, Callable
|
||||
from typing import Any
|
||||
|
||||
from sqlalchemy import String, and_, func, or_
|
||||
from sqlalchemy import func, or_
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.modules.orders.services.order_service import order_service as unified_order_service
|
||||
from app.modules.billing.services.subscription_service import subscription_service
|
||||
from app.modules.catalog.models import Product
|
||||
from app.modules.marketplace.models import (
|
||||
LetzshopFulfillmentQueue,
|
||||
LetzshopHistoricalImportJob,
|
||||
@@ -24,7 +25,9 @@ from app.modules.marketplace.models import (
|
||||
StoreLetzshopCredentials,
|
||||
)
|
||||
from app.modules.orders.models import Order, OrderItem
|
||||
from app.modules.catalog.models import Product
|
||||
from app.modules.orders.services.order_service import (
|
||||
order_service as unified_order_service,
|
||||
)
|
||||
from app.modules.tenancy.models import Store
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -1049,7 +1052,7 @@ class LetzshopOrderService:
|
||||
return {
|
||||
"total_orders": total_orders,
|
||||
"unique_customers": unique_customers,
|
||||
"orders_by_status": {status: count for status, count in status_counts},
|
||||
"orders_by_status": dict(status_counts),
|
||||
"orders_by_locale": {
|
||||
locale or "unknown": count for locale, count in locale_counts
|
||||
},
|
||||
|
||||
@@ -7,16 +7,17 @@ in the letzshop_store_cache table for fast lookups during signup.
|
||||
"""
|
||||
|
||||
import logging
|
||||
from collections.abc import Callable
|
||||
from datetime import UTC, datetime
|
||||
from typing import Any, Callable
|
||||
from typing import Any
|
||||
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.dialects.postgresql import insert as pg_insert
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from .client_service import LetzshopClient
|
||||
from app.modules.marketplace.models import LetzshopStoreCache
|
||||
|
||||
from .client_service import LetzshopClient
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -146,14 +147,13 @@ class LetzshopStoreSyncService:
|
||||
setattr(existing, key, value)
|
||||
existing.last_synced_at = datetime.now(UTC)
|
||||
return "updated"
|
||||
else:
|
||||
# Create new record
|
||||
cache_entry = LetzshopStoreCache(
|
||||
**parsed,
|
||||
last_synced_at=datetime.now(UTC),
|
||||
)
|
||||
self.db.add(cache_entry)
|
||||
return "created"
|
||||
# Create new record
|
||||
cache_entry = LetzshopStoreCache(
|
||||
**parsed,
|
||||
last_synced_at=datetime.now(UTC),
|
||||
)
|
||||
self.db.add(cache_entry)
|
||||
return "created"
|
||||
|
||||
def _parse_store_data(self, data: dict[str, Any]) -> dict[str, Any]:
|
||||
"""
|
||||
@@ -436,10 +436,9 @@ class LetzshopStoreSyncService:
|
||||
|
||||
from sqlalchemy import func
|
||||
|
||||
from app.modules.tenancy.services.admin_service import admin_service
|
||||
from app.modules.tenancy.models import Merchant
|
||||
from app.modules.tenancy.models import Store
|
||||
from app.modules.tenancy.models import Merchant, Store
|
||||
from app.modules.tenancy.schemas.store import StoreCreate
|
||||
from app.modules.tenancy.services.admin_service import admin_service
|
||||
|
||||
# Get cache entry
|
||||
cache_entry = self.get_cached_store(letzshop_slug)
|
||||
|
||||
@@ -8,12 +8,12 @@ Generates Google Shopping compatible CSV files for Letzshop marketplace.
|
||||
import csv
|
||||
import io
|
||||
import logging
|
||||
from datetime import UTC, datetime
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from app.modules.marketplace.models import LetzshopSyncLog, MarketplaceProduct
|
||||
from app.modules.catalog.models import Product
|
||||
from app.modules.marketplace.models import LetzshopSyncLog, MarketplaceProduct
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ from typing import TYPE_CHECKING
|
||||
|
||||
from app.modules.contracts.features import (
|
||||
FeatureDeclaration,
|
||||
FeatureProviderProtocol,
|
||||
FeatureScope,
|
||||
FeatureType,
|
||||
FeatureUsage,
|
||||
|
||||
@@ -12,13 +12,12 @@ from app.modules.marketplace.models import (
|
||||
MarketplaceImportError,
|
||||
MarketplaceImportJob,
|
||||
)
|
||||
from app.modules.tenancy.models import User
|
||||
from app.modules.tenancy.models import Store
|
||||
from app.modules.marketplace.schemas import (
|
||||
AdminMarketplaceImportJobResponse,
|
||||
MarketplaceImportJobRequest,
|
||||
MarketplaceImportJobResponse,
|
||||
)
|
||||
from app.modules.tenancy.models import Store, User
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -16,9 +16,8 @@ from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.modules.contracts.metrics import (
|
||||
MetricValue,
|
||||
MetricsContext,
|
||||
MetricsProviderProtocol,
|
||||
MetricValue,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -51,7 +50,10 @@ class MarketplaceMetricsProvider:
|
||||
- Imported products (staging)
|
||||
- Import job statistics
|
||||
"""
|
||||
from app.modules.marketplace.models import MarketplaceImportJob, MarketplaceProduct
|
||||
from app.modules.marketplace.models import (
|
||||
MarketplaceImportJob,
|
||||
MarketplaceProduct,
|
||||
)
|
||||
from app.modules.tenancy.models import Store
|
||||
|
||||
try:
|
||||
@@ -194,7 +196,10 @@ class MarketplaceMetricsProvider:
|
||||
|
||||
Aggregates import and staging data across all stores.
|
||||
"""
|
||||
from app.modules.marketplace.models import MarketplaceImportJob, MarketplaceProduct
|
||||
from app.modules.marketplace.models import (
|
||||
MarketplaceImportJob,
|
||||
MarketplaceProduct,
|
||||
)
|
||||
from app.modules.tenancy.models import StorePlatform
|
||||
|
||||
try:
|
||||
|
||||
@@ -23,23 +23,26 @@ from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from app.exceptions import ValidationException
|
||||
from app.modules.inventory.models import Inventory
|
||||
from app.modules.inventory.schemas import (
|
||||
InventoryLocationResponse,
|
||||
InventorySummaryResponse,
|
||||
)
|
||||
from app.modules.marketplace.exceptions import (
|
||||
InvalidMarketplaceProductDataException,
|
||||
MarketplaceProductAlreadyExistsException,
|
||||
MarketplaceProductNotFoundException,
|
||||
MarketplaceProductValidationException,
|
||||
)
|
||||
from app.utils.data_processing import GTINProcessor, PriceProcessor
|
||||
from app.modules.inventory.models import Inventory
|
||||
from app.modules.marketplace.models import (
|
||||
MarketplaceProduct,
|
||||
MarketplaceProductTranslation,
|
||||
)
|
||||
from app.modules.inventory.schemas import InventoryLocationResponse, InventorySummaryResponse
|
||||
from app.modules.marketplace.schemas import (
|
||||
MarketplaceProductCreate,
|
||||
MarketplaceProductUpdate,
|
||||
)
|
||||
from app.utils.data_processing import GTINProcessor, PriceProcessor
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -859,8 +862,7 @@ class MarketplaceProductService:
|
||||
Returns:
|
||||
Dict with copied, skipped, failed counts and details
|
||||
"""
|
||||
from app.modules.catalog.models import Product
|
||||
from app.modules.catalog.models import ProductTranslation
|
||||
from app.modules.catalog.models import Product, ProductTranslation
|
||||
from app.modules.tenancy.models import Store
|
||||
|
||||
store = db.query(Store).filter(Store.id == store_id).first()
|
||||
@@ -880,9 +882,10 @@ class MarketplaceProductService:
|
||||
raise MarketplaceProductNotFoundException("No marketplace products found")
|
||||
|
||||
# Check product limit from subscription
|
||||
from app.modules.billing.services.feature_service import feature_service
|
||||
from sqlalchemy import func
|
||||
|
||||
from app.modules.billing.services.feature_service import feature_service
|
||||
|
||||
current_products = (
|
||||
db.query(func.count(Product.id))
|
||||
.filter(Product.store_id == store_id)
|
||||
|
||||
@@ -16,7 +16,6 @@ from sqlalchemy.orm import Session
|
||||
from app.modules.contracts.widgets import (
|
||||
BreakdownWidget,
|
||||
DashboardWidget,
|
||||
DashboardWidgetProviderProtocol,
|
||||
ListWidget,
|
||||
WidgetBreakdownItem,
|
||||
WidgetContext,
|
||||
@@ -140,7 +139,7 @@ class MarketplaceWidgetProvider:
|
||||
from sqlalchemy.orm import joinedload
|
||||
|
||||
from app.modules.marketplace.models import MarketplaceImportJob
|
||||
from app.modules.tenancy.models import Store, StorePlatform
|
||||
from app.modules.tenancy.models import StorePlatform
|
||||
|
||||
limit = context.limit if context else 5
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ from datetime import UTC, datetime
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.modules.tenancy.exceptions import StoreNotFoundException
|
||||
from app.modules.marketplace.exceptions import (
|
||||
OnboardingCsvUrlRequiredException,
|
||||
OnboardingNotFoundException,
|
||||
@@ -22,15 +21,16 @@ from app.modules.marketplace.exceptions import (
|
||||
OnboardingSyncJobNotFoundException,
|
||||
OnboardingSyncNotCompleteException,
|
||||
)
|
||||
from app.modules.marketplace.services.letzshop import (
|
||||
LetzshopCredentialsService,
|
||||
LetzshopOrderService,
|
||||
)
|
||||
from app.modules.marketplace.models import (
|
||||
OnboardingStatus,
|
||||
OnboardingStep,
|
||||
StoreOnboarding,
|
||||
)
|
||||
from app.modules.marketplace.services.letzshop import (
|
||||
LetzshopCredentialsService,
|
||||
LetzshopOrderService,
|
||||
)
|
||||
from app.modules.tenancy.exceptions import StoreNotFoundException
|
||||
from app.modules.tenancy.models import Store
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -295,14 +295,13 @@ class OnboardingService:
|
||||
"store_id": None,
|
||||
"shop_slug": shop_slug,
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"success": False,
|
||||
"message": error or "Connection failed",
|
||||
"store_name": None,
|
||||
"store_id": None,
|
||||
"shop_slug": None,
|
||||
}
|
||||
return {
|
||||
"success": False,
|
||||
"message": error or "Connection failed",
|
||||
"store_name": None,
|
||||
"store_id": None,
|
||||
"shop_slug": None,
|
||||
}
|
||||
|
||||
def complete_letzshop_api(
|
||||
self,
|
||||
|
||||
@@ -11,8 +11,8 @@ Handles all database operations for the platform signup flow:
|
||||
|
||||
import logging
|
||||
import secrets
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from dataclasses import dataclass
|
||||
from datetime import UTC, datetime, timedelta
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
@@ -22,20 +22,26 @@ from app.exceptions import (
|
||||
ResourceNotFoundException,
|
||||
ValidationException,
|
||||
)
|
||||
from app.modules.messaging.services.email_service import EmailService
|
||||
from app.modules.marketplace.services.onboarding_service import OnboardingService
|
||||
from app.modules.billing.services.stripe_service import stripe_service
|
||||
from middleware.auth import AuthManager
|
||||
from app.modules.tenancy.models import Merchant
|
||||
from app.modules.billing.models import (
|
||||
SubscriptionStatus,
|
||||
SubscriptionTier,
|
||||
TierCode,
|
||||
)
|
||||
from app.modules.billing.services.subscription_service import subscription_service as sub_service
|
||||
from app.modules.tenancy.models import User
|
||||
from app.modules.tenancy.models import Store, StorePlatform, StoreUser, StoreUserType
|
||||
from app.modules.tenancy.models import Platform
|
||||
from app.modules.billing.services.stripe_service import stripe_service
|
||||
from app.modules.billing.services.subscription_service import (
|
||||
subscription_service as sub_service,
|
||||
)
|
||||
from app.modules.marketplace.services.onboarding_service import OnboardingService
|
||||
from app.modules.messaging.services.email_service import EmailService
|
||||
from app.modules.tenancy.models import (
|
||||
Merchant,
|
||||
Platform,
|
||||
Store,
|
||||
StorePlatform,
|
||||
StoreUser,
|
||||
StoreUserType,
|
||||
User,
|
||||
)
|
||||
from middleware.auth import AuthManager
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -221,7 +227,7 @@ class PlatformSignupService:
|
||||
ResourceNotFoundException: If session not found
|
||||
ConflictException: If store already claimed
|
||||
"""
|
||||
session = self.get_session_or_raise(session_id)
|
||||
self.get_session_or_raise(session_id)
|
||||
|
||||
# Check if store is already claimed
|
||||
if self.check_store_claimed(db, letzshop_slug):
|
||||
|
||||
Reference in New Issue
Block a user