refactor: modernize code quality tooling with Ruff
- Replace black, isort, and flake8 with Ruff (all-in-one linter and formatter) - Add comprehensive pyproject.toml configuration - Simplify Makefile code quality targets - Configure exclusions for venv/.venv in pyproject.toml - Auto-fix 1,359 linting issues across codebase Benefits: - Much faster builds (Ruff is written in Rust) - Single tool replaces multiple tools - More comprehensive rule set (UP, B, C4, SIM, PIE, RET, Q) - All configuration centralized in pyproject.toml - Better import sorting and formatting consistency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -15,7 +15,7 @@ Schemas include:
|
||||
|
||||
import re
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
||||
|
||||
@@ -36,7 +36,7 @@ class VendorCreate(BaseModel):
|
||||
name: str = Field(
|
||||
..., description="Display name of the vendor", min_length=2, max_length=255
|
||||
)
|
||||
description: Optional[str] = Field(None, description="Vendor description")
|
||||
description: str | None = Field(None, description="Vendor description")
|
||||
|
||||
# Owner Information (Creates User Account)
|
||||
owner_email: str = Field(
|
||||
@@ -45,21 +45,21 @@ class VendorCreate(BaseModel):
|
||||
)
|
||||
|
||||
# Business Contact Information (Vendor Fields)
|
||||
contact_email: Optional[str] = Field(
|
||||
contact_email: str | None = Field(
|
||||
None,
|
||||
description="Public business contact email (defaults to owner_email if not provided)",
|
||||
)
|
||||
contact_phone: Optional[str] = Field(None, description="Contact phone number")
|
||||
website: Optional[str] = Field(None, description="Website URL")
|
||||
contact_phone: str | None = Field(None, description="Contact phone number")
|
||||
website: str | None = Field(None, description="Website URL")
|
||||
|
||||
# Business Details
|
||||
business_address: Optional[str] = Field(None, description="Business address")
|
||||
tax_number: Optional[str] = Field(None, description="Tax/VAT number")
|
||||
business_address: str | None = Field(None, description="Business address")
|
||||
tax_number: str | None = Field(None, description="Tax/VAT number")
|
||||
|
||||
# Marketplace URLs (multi-language support)
|
||||
letzshop_csv_url_fr: Optional[str] = Field(None, description="French CSV URL")
|
||||
letzshop_csv_url_en: Optional[str] = Field(None, description="English CSV URL")
|
||||
letzshop_csv_url_de: Optional[str] = Field(None, description="German CSV URL")
|
||||
letzshop_csv_url_fr: str | None = Field(None, description="French CSV URL")
|
||||
letzshop_csv_url_en: str | None = Field(None, description="English CSV URL")
|
||||
letzshop_csv_url_de: str | None = Field(None, description="German CSV URL")
|
||||
|
||||
@field_validator("owner_email", "contact_email")
|
||||
@classmethod
|
||||
@@ -95,29 +95,29 @@ class VendorUpdate(BaseModel):
|
||||
"""
|
||||
|
||||
# Basic Information
|
||||
name: Optional[str] = Field(None, min_length=2, max_length=255)
|
||||
description: Optional[str] = None
|
||||
subdomain: Optional[str] = Field(None, min_length=2, max_length=100)
|
||||
name: str | None = Field(None, min_length=2, max_length=255)
|
||||
description: str | None = None
|
||||
subdomain: str | None = Field(None, min_length=2, max_length=100)
|
||||
|
||||
# Business Contact Information (Vendor Fields)
|
||||
contact_email: Optional[str] = Field(
|
||||
contact_email: str | None = Field(
|
||||
None, description="Public business contact email"
|
||||
)
|
||||
contact_phone: Optional[str] = None
|
||||
website: Optional[str] = None
|
||||
contact_phone: str | None = None
|
||||
website: str | None = None
|
||||
|
||||
# Business Details
|
||||
business_address: Optional[str] = None
|
||||
tax_number: Optional[str] = None
|
||||
business_address: str | None = None
|
||||
tax_number: str | None = None
|
||||
|
||||
# Marketplace URLs
|
||||
letzshop_csv_url_fr: Optional[str] = None
|
||||
letzshop_csv_url_en: Optional[str] = None
|
||||
letzshop_csv_url_de: Optional[str] = None
|
||||
letzshop_csv_url_fr: str | None = None
|
||||
letzshop_csv_url_en: str | None = None
|
||||
letzshop_csv_url_de: str | None = None
|
||||
|
||||
# Status (Admin only)
|
||||
is_active: Optional[bool] = None
|
||||
is_verified: Optional[bool] = None
|
||||
is_active: bool | None = None
|
||||
is_verified: bool | None = None
|
||||
|
||||
@field_validator("subdomain")
|
||||
@classmethod
|
||||
@@ -145,22 +145,22 @@ class VendorResponse(BaseModel):
|
||||
vendor_code: str
|
||||
subdomain: str
|
||||
name: str
|
||||
description: Optional[str]
|
||||
description: str | None
|
||||
owner_user_id: int
|
||||
|
||||
# Contact Information (Business)
|
||||
contact_email: Optional[str]
|
||||
contact_phone: Optional[str]
|
||||
website: Optional[str]
|
||||
contact_email: str | None
|
||||
contact_phone: str | None
|
||||
website: str | None
|
||||
|
||||
# Business Information
|
||||
business_address: Optional[str]
|
||||
tax_number: Optional[str]
|
||||
business_address: str | None
|
||||
tax_number: str | None
|
||||
|
||||
# Marketplace URLs
|
||||
letzshop_csv_url_fr: Optional[str]
|
||||
letzshop_csv_url_en: Optional[str]
|
||||
letzshop_csv_url_de: Optional[str]
|
||||
letzshop_csv_url_fr: str | None
|
||||
letzshop_csv_url_en: str | None
|
||||
letzshop_csv_url_de: str | None
|
||||
|
||||
# Status Flags
|
||||
is_active: bool
|
||||
@@ -196,13 +196,13 @@ class VendorCreateResponse(VendorDetailResponse):
|
||||
temporary_password: str = Field(
|
||||
..., description="Temporary password for owner (SHOWN ONLY ONCE)"
|
||||
)
|
||||
login_url: Optional[str] = Field(None, description="URL for vendor owner to login")
|
||||
login_url: str | None = Field(None, description="URL for vendor owner to login")
|
||||
|
||||
|
||||
class VendorListResponse(BaseModel):
|
||||
"""Schema for paginated vendor list."""
|
||||
|
||||
vendors: List[VendorResponse]
|
||||
vendors: list[VendorResponse]
|
||||
total: int
|
||||
skip: int
|
||||
limit: int
|
||||
@@ -237,7 +237,7 @@ class VendorTransferOwnership(BaseModel):
|
||||
..., description="Must be true to confirm ownership transfer"
|
||||
)
|
||||
|
||||
transfer_reason: Optional[str] = Field(
|
||||
transfer_reason: str | None = Field(
|
||||
None,
|
||||
max_length=500,
|
||||
description="Reason for ownership transfer (for audit logs)",
|
||||
@@ -260,12 +260,12 @@ class VendorTransferOwnershipResponse(BaseModel):
|
||||
vendor_code: str
|
||||
vendor_name: str
|
||||
|
||||
old_owner: Dict[str, Any] = Field(
|
||||
old_owner: dict[str, Any] = Field(
|
||||
..., description="Information about the previous owner"
|
||||
)
|
||||
new_owner: Dict[str, Any] = Field(
|
||||
new_owner: dict[str, Any] = Field(
|
||||
..., description="Information about the new owner"
|
||||
)
|
||||
|
||||
transferred_at: datetime
|
||||
transfer_reason: Optional[str]
|
||||
transfer_reason: str | None
|
||||
|
||||
Reference in New Issue
Block a user