refactor: migrate templates and static files to self-contained modules
Templates Migration: - Migrate admin templates to modules (tenancy, billing, monitoring, marketplace, etc.) - Migrate vendor templates to modules (tenancy, billing, orders, messaging, etc.) - Migrate storefront templates to modules (catalog, customers, orders, cart, checkout, cms) - Migrate public templates to modules (billing, marketplace, cms) - Keep shared templates in app/templates/ (base.html, errors/, partials/, macros/) - Migrate letzshop partials to marketplace module Static Files Migration: - Migrate admin JS to modules: tenancy (23 files), core (5 files), monitoring (1 file) - Migrate vendor JS to modules: tenancy (4 files), core (2 files) - Migrate shared JS: vendor-selector.js to core, media-picker.js to cms - Migrate storefront JS: storefront-layout.js to core - Keep framework JS in static/ (api-client, utils, money, icons, log-config, lib/) - Update all template references to use module_static paths Naming Consistency: - Rename static/platform/ to static/public/ - Rename app/templates/platform/ to app/templates/public/ - Update all extends and static references Documentation: - Update module-system.md with shared templates documentation - Update frontend-structure.md with new module JS organization Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,14 +2,41 @@
|
||||
"""
|
||||
Monitoring module exceptions.
|
||||
|
||||
Module-specific exceptions for monitoring functionality.
|
||||
This module provides exception classes for monitoring operations including:
|
||||
- Background task tracking
|
||||
- Capacity snapshot management
|
||||
- Code quality/architecture scans
|
||||
"""
|
||||
|
||||
from app.exceptions.base import (
|
||||
BusinessLogicException,
|
||||
ExternalServiceException,
|
||||
ResourceNotFoundException,
|
||||
ValidationException,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
# Task exceptions
|
||||
"TaskNotFoundException",
|
||||
# Capacity exceptions
|
||||
"CapacitySnapshotNotFoundException",
|
||||
# General monitoring exceptions
|
||||
"MonitoringServiceException",
|
||||
# Code quality exceptions
|
||||
"ViolationNotFoundException",
|
||||
"ScanNotFoundException",
|
||||
"ScanExecutionException",
|
||||
"ScanTimeoutException",
|
||||
"ScanParseException",
|
||||
"ViolationOperationException",
|
||||
"InvalidViolationStatusException",
|
||||
]
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Task Exceptions
|
||||
# =============================================================================
|
||||
|
||||
|
||||
class TaskNotFoundException(ResourceNotFoundException):
|
||||
"""Raised when a background task is not found."""
|
||||
@@ -22,6 +49,11 @@ class TaskNotFoundException(ResourceNotFoundException):
|
||||
)
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Capacity Exceptions
|
||||
# =============================================================================
|
||||
|
||||
|
||||
class CapacitySnapshotNotFoundException(ResourceNotFoundException):
|
||||
"""Raised when a capacity snapshot is not found."""
|
||||
|
||||
@@ -33,6 +65,11 @@ class CapacitySnapshotNotFoundException(ResourceNotFoundException):
|
||||
)
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# General Monitoring Exceptions
|
||||
# =============================================================================
|
||||
|
||||
|
||||
class MonitoringServiceException(BusinessLogicException):
|
||||
"""Raised when a monitoring operation fails."""
|
||||
|
||||
@@ -40,11 +77,97 @@ class MonitoringServiceException(BusinessLogicException):
|
||||
super().__init__(
|
||||
message=f"Monitoring operation '{operation}' failed: {reason}",
|
||||
error_code="MONITORING_OPERATION_FAILED",
|
||||
details={"operation": operation, "reason": reason},
|
||||
)
|
||||
|
||||
|
||||
__all__ = [
|
||||
"TaskNotFoundException",
|
||||
"CapacitySnapshotNotFoundException",
|
||||
"MonitoringServiceException",
|
||||
]
|
||||
# =============================================================================
|
||||
# Code Quality Exceptions
|
||||
# =============================================================================
|
||||
|
||||
|
||||
class ViolationNotFoundException(ResourceNotFoundException):
|
||||
"""Raised when a violation is not found."""
|
||||
|
||||
def __init__(self, violation_id: int):
|
||||
super().__init__(
|
||||
resource_type="Violation",
|
||||
identifier=str(violation_id),
|
||||
error_code="VIOLATION_NOT_FOUND",
|
||||
)
|
||||
|
||||
|
||||
class ScanNotFoundException(ResourceNotFoundException):
|
||||
"""Raised when a scan is not found."""
|
||||
|
||||
def __init__(self, scan_id: int):
|
||||
super().__init__(
|
||||
resource_type="Scan",
|
||||
identifier=str(scan_id),
|
||||
error_code="SCAN_NOT_FOUND",
|
||||
)
|
||||
|
||||
|
||||
class ScanExecutionException(ExternalServiceException):
|
||||
"""Raised when architecture scan execution fails."""
|
||||
|
||||
def __init__(self, reason: str):
|
||||
super().__init__(
|
||||
service_name="ArchitectureValidator",
|
||||
message=f"Scan execution failed: {reason}",
|
||||
error_code="SCAN_EXECUTION_FAILED",
|
||||
)
|
||||
|
||||
|
||||
class ScanTimeoutException(ExternalServiceException):
|
||||
"""Raised when architecture scan times out."""
|
||||
|
||||
def __init__(self, timeout_seconds: int = 300):
|
||||
super().__init__(
|
||||
service_name="ArchitectureValidator",
|
||||
message=f"Scan timed out after {timeout_seconds} seconds",
|
||||
error_code="SCAN_TIMEOUT",
|
||||
details={"timeout_seconds": timeout_seconds},
|
||||
)
|
||||
|
||||
|
||||
class ScanParseException(BusinessLogicException):
|
||||
"""Raised when scan results cannot be parsed."""
|
||||
|
||||
def __init__(self, reason: str):
|
||||
super().__init__(
|
||||
message=f"Failed to parse scan results: {reason}",
|
||||
error_code="SCAN_PARSE_FAILED",
|
||||
details={"reason": reason},
|
||||
)
|
||||
|
||||
|
||||
class ViolationOperationException(BusinessLogicException):
|
||||
"""Raised when a violation operation fails."""
|
||||
|
||||
def __init__(self, operation: str, violation_id: int, reason: str):
|
||||
super().__init__(
|
||||
message=f"Failed to {operation} violation {violation_id}: {reason}",
|
||||
error_code="VIOLATION_OPERATION_FAILED",
|
||||
details={
|
||||
"operation": operation,
|
||||
"violation_id": violation_id,
|
||||
"reason": reason,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class InvalidViolationStatusException(ValidationException):
|
||||
"""Raised when a violation status transition is invalid."""
|
||||
|
||||
def __init__(self, violation_id: int, current_status: str, target_status: str):
|
||||
super().__init__(
|
||||
message=f"Cannot change violation {violation_id} from '{current_status}' to '{target_status}'",
|
||||
field="status",
|
||||
details={
|
||||
"violation_id": violation_id,
|
||||
"current_status": current_status,
|
||||
"target_status": target_status,
|
||||
},
|
||||
)
|
||||
self.error_code = "INVALID_VIOLATION_STATUS"
|
||||
|
||||
Reference in New Issue
Block a user