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:
@@ -5,64 +5,64 @@ Messaging module services.
|
||||
This module contains the canonical implementations of messaging-related services.
|
||||
"""
|
||||
|
||||
from app.modules.messaging.services.messaging_service import (
|
||||
messaging_service,
|
||||
MessagingService,
|
||||
)
|
||||
from app.modules.messaging.services.message_attachment_service import (
|
||||
message_attachment_service,
|
||||
MessageAttachmentService,
|
||||
)
|
||||
from app.modules.messaging.services.admin_notification_service import (
|
||||
admin_notification_service,
|
||||
AdminNotificationService,
|
||||
platform_alert_service,
|
||||
PlatformAlertService,
|
||||
AlertType,
|
||||
# Constants
|
||||
NotificationType,
|
||||
PlatformAlertService,
|
||||
Priority,
|
||||
AlertType,
|
||||
Severity,
|
||||
admin_notification_service,
|
||||
platform_alert_service,
|
||||
)
|
||||
from app.modules.messaging.services.email_service import (
|
||||
EmailService,
|
||||
EmailProvider,
|
||||
ResolvedTemplate,
|
||||
BrandingContext,
|
||||
send_email,
|
||||
get_provider,
|
||||
get_platform_provider,
|
||||
get_store_provider,
|
||||
get_platform_email_config,
|
||||
# Provider classes
|
||||
SMTPProvider,
|
||||
SendGridProvider,
|
||||
MailgunProvider,
|
||||
SESProvider,
|
||||
DebugProvider,
|
||||
# Configurable provider classes
|
||||
ConfigurableSMTPProvider,
|
||||
ConfigurableSendGridProvider,
|
||||
ConfigurableMailgunProvider,
|
||||
ConfigurableSESProvider,
|
||||
# Store provider classes
|
||||
StoreSMTPProvider,
|
||||
StoreSendGridProvider,
|
||||
StoreMailgunProvider,
|
||||
StoreSESProvider,
|
||||
PLATFORM_DEFAULT_LANGUAGE,
|
||||
# Constants
|
||||
PLATFORM_NAME,
|
||||
PLATFORM_SUPPORT_EMAIL,
|
||||
PLATFORM_DEFAULT_LANGUAGE,
|
||||
SUPPORTED_LANGUAGES,
|
||||
WHITELABEL_TIERS,
|
||||
POWERED_BY_FOOTER_HTML,
|
||||
POWERED_BY_FOOTER_TEXT,
|
||||
SUPPORTED_LANGUAGES,
|
||||
WHITELABEL_TIERS,
|
||||
BrandingContext,
|
||||
ConfigurableMailgunProvider,
|
||||
ConfigurableSendGridProvider,
|
||||
ConfigurableSESProvider,
|
||||
# Configurable provider classes
|
||||
ConfigurableSMTPProvider,
|
||||
DebugProvider,
|
||||
EmailProvider,
|
||||
EmailService,
|
||||
MailgunProvider,
|
||||
ResolvedTemplate,
|
||||
SendGridProvider,
|
||||
SESProvider,
|
||||
# Provider classes
|
||||
SMTPProvider,
|
||||
StoreMailgunProvider,
|
||||
StoreSendGridProvider,
|
||||
StoreSESProvider,
|
||||
# Store provider classes
|
||||
StoreSMTPProvider,
|
||||
get_platform_email_config,
|
||||
get_platform_provider,
|
||||
get_provider,
|
||||
get_store_provider,
|
||||
send_email,
|
||||
)
|
||||
from app.modules.messaging.services.email_template_service import (
|
||||
EmailTemplateService,
|
||||
TemplateData,
|
||||
StoreOverrideData,
|
||||
TemplateData,
|
||||
)
|
||||
from app.modules.messaging.services.message_attachment_service import (
|
||||
MessageAttachmentService,
|
||||
message_attachment_service,
|
||||
)
|
||||
from app.modules.messaging.services.messaging_service import (
|
||||
MessagingService,
|
||||
messaging_service,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
|
||||
@@ -12,12 +12,15 @@ import logging
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any
|
||||
|
||||
from sqlalchemy import and_, case, func
|
||||
from sqlalchemy import and_, case
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.modules.messaging.models.admin_notification import AdminNotification
|
||||
from app.modules.tenancy.models import PlatformAlert
|
||||
from app.modules.tenancy.schemas.admin import AdminNotificationCreate, PlatformAlertCreate
|
||||
from app.modules.tenancy.schemas.admin import (
|
||||
AdminNotificationCreate,
|
||||
PlatformAlertCreate,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -37,12 +37,16 @@ from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.text import MIMEText
|
||||
from typing import Any
|
||||
|
||||
from jinja2 import Environment, BaseLoader
|
||||
from jinja2 import BaseLoader, Environment
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.config import settings
|
||||
from app.modules.messaging.models import EmailLog, EmailStatus, EmailTemplate
|
||||
from app.modules.messaging.models import StoreEmailTemplate
|
||||
from app.modules.messaging.models import (
|
||||
EmailLog,
|
||||
EmailStatus,
|
||||
EmailTemplate,
|
||||
StoreEmailTemplate,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -118,7 +122,6 @@ class EmailProvider(ABC):
|
||||
Returns:
|
||||
tuple: (success, provider_message_id, error_message)
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class SMTPProvider(EmailProvider):
|
||||
@@ -190,7 +193,7 @@ class SendGridProvider(EmailProvider):
|
||||
) -> tuple[bool, str | None, str | None]:
|
||||
try:
|
||||
from sendgrid import SendGridAPIClient
|
||||
from sendgrid.helpers.mail import Mail, Email, To, Content
|
||||
from sendgrid.helpers.mail import Content, Email, Mail, To
|
||||
|
||||
message = Mail(
|
||||
from_email=Email(from_email, from_name),
|
||||
@@ -211,8 +214,7 @@ class SendGridProvider(EmailProvider):
|
||||
if response.status_code in (200, 201, 202):
|
||||
message_id = response.headers.get("X-Message-Id")
|
||||
return True, message_id, None
|
||||
else:
|
||||
return False, None, f"SendGrid error: {response.status_code}"
|
||||
return False, None, f"SendGrid error: {response.status_code}"
|
||||
|
||||
except ImportError:
|
||||
return False, None, "SendGrid library not installed. Run: pip install sendgrid"
|
||||
@@ -263,8 +265,7 @@ class MailgunProvider(EmailProvider):
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
return True, result.get("id"), None
|
||||
else:
|
||||
return False, None, f"Mailgun error: {response.status_code} - {response.text}"
|
||||
return False, None, f"Mailgun error: {response.status_code} - {response.text}"
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Mailgun send error: {e}")
|
||||
@@ -519,7 +520,7 @@ class ConfigurableSendGridProvider(EmailProvider):
|
||||
) -> tuple[bool, str | None, str | None]:
|
||||
try:
|
||||
from sendgrid import SendGridAPIClient
|
||||
from sendgrid.helpers.mail import Mail, Email, To, Content
|
||||
from sendgrid.helpers.mail import Content, Email, Mail, To
|
||||
|
||||
message = Mail(
|
||||
from_email=Email(from_email, from_name),
|
||||
@@ -540,8 +541,7 @@ class ConfigurableSendGridProvider(EmailProvider):
|
||||
if response.status_code in (200, 201, 202):
|
||||
message_id = response.headers.get("X-Message-Id")
|
||||
return True, message_id, None
|
||||
else:
|
||||
return False, None, f"SendGrid error: {response.status_code}"
|
||||
return False, None, f"SendGrid error: {response.status_code}"
|
||||
|
||||
except ImportError:
|
||||
return False, None, "SendGrid library not installed"
|
||||
@@ -595,8 +595,7 @@ class ConfigurableMailgunProvider(EmailProvider):
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
return True, result.get("id"), None
|
||||
else:
|
||||
return False, None, f"Mailgun error: {response.status_code} - {response.text}"
|
||||
return False, None, f"Mailgun error: {response.status_code} - {response.text}"
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Configurable Mailgun send error: {e}")
|
||||
@@ -765,7 +764,7 @@ class StoreSendGridProvider(EmailProvider):
|
||||
) -> tuple[bool, str | None, str | None]:
|
||||
try:
|
||||
from sendgrid import SendGridAPIClient
|
||||
from sendgrid.helpers.mail import Mail, Email, To, Content
|
||||
from sendgrid.helpers.mail import Content, Email, Mail, To
|
||||
|
||||
message = Mail(
|
||||
from_email=Email(from_email, from_name),
|
||||
@@ -786,8 +785,7 @@ class StoreSendGridProvider(EmailProvider):
|
||||
if response.status_code in (200, 201, 202):
|
||||
message_id = response.headers.get("X-Message-Id")
|
||||
return True, message_id, None
|
||||
else:
|
||||
return False, None, f"SendGrid error: {response.status_code}"
|
||||
return False, None, f"SendGrid error: {response.status_code}"
|
||||
|
||||
except ImportError:
|
||||
return False, None, "SendGrid library not installed"
|
||||
@@ -841,8 +839,7 @@ class StoreMailgunProvider(EmailProvider):
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
return True, result.get("id"), None
|
||||
else:
|
||||
return False, None, f"Mailgun error: {response.status_code} - {response.text}"
|
||||
return False, None, f"Mailgun error: {response.status_code} - {response.text}"
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Store Mailgun send error: {e}")
|
||||
@@ -1038,7 +1035,9 @@ class EmailService:
|
||||
def _get_store_tier(self, store_id: int) -> str | None:
|
||||
"""Get store's subscription tier with caching."""
|
||||
if store_id not in self._store_tier_cache:
|
||||
from app.modules.billing.services.subscription_service import subscription_service
|
||||
from app.modules.billing.services.subscription_service import (
|
||||
subscription_service,
|
||||
)
|
||||
|
||||
tier = subscription_service.get_current_tier(self.db, store_id)
|
||||
self._store_tier_cache[store_id] = tier.value if tier else None
|
||||
@@ -1169,16 +1168,15 @@ class EmailService:
|
||||
store_logo_url=store.get_logo_url(),
|
||||
is_whitelabel=True,
|
||||
)
|
||||
else:
|
||||
# Standard: Wizamart branding with store details
|
||||
return BrandingContext(
|
||||
platform_name=PLATFORM_NAME,
|
||||
platform_logo_url=None, # Use default platform logo
|
||||
support_email=PLATFORM_SUPPORT_EMAIL,
|
||||
store_name=store.name if store else None,
|
||||
store_logo_url=store.get_logo_url() if store else None,
|
||||
is_whitelabel=False,
|
||||
)
|
||||
# Standard: Wizamart branding with store details
|
||||
return BrandingContext(
|
||||
platform_name=PLATFORM_NAME,
|
||||
platform_logo_url=None, # Use default platform logo
|
||||
support_email=PLATFORM_SUPPORT_EMAIL,
|
||||
store_name=store.name if store else None,
|
||||
store_logo_url=store.get_logo_url() if store else None,
|
||||
is_whitelabel=False,
|
||||
)
|
||||
|
||||
def resolve_template(
|
||||
self,
|
||||
|
||||
@@ -24,8 +24,12 @@ from app.exceptions.base import (
|
||||
ResourceNotFoundException,
|
||||
ValidationException,
|
||||
)
|
||||
from app.modules.messaging.models import EmailCategory, EmailLog, EmailTemplate
|
||||
from app.modules.messaging.models import StoreEmailTemplate
|
||||
from app.modules.messaging.models import (
|
||||
EmailCategory,
|
||||
EmailLog,
|
||||
EmailTemplate,
|
||||
StoreEmailTemplate,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -498,7 +502,7 @@ class EmailTemplateService:
|
||||
"body_html": platform_version.body_html,
|
||||
} if platform_version else None,
|
||||
}
|
||||
elif platform_version:
|
||||
if platform_version:
|
||||
return {
|
||||
"code": code,
|
||||
"language": language,
|
||||
@@ -510,8 +514,7 @@ class EmailTemplateService:
|
||||
"variables": self._parse_required_variables(platform_template.required_variables),
|
||||
"platform_template": None,
|
||||
}
|
||||
else:
|
||||
raise ResourceNotFoundException(f"No template found for language: {language}")
|
||||
raise ResourceNotFoundException(f"No template found for language: {language}")
|
||||
|
||||
def create_or_update_store_override(
|
||||
self,
|
||||
|
||||
@@ -156,9 +156,10 @@ class MessageAttachmentService:
|
||||
def _create_thumbnail(self, content: bytes, original_path: str) -> dict:
|
||||
"""Create thumbnail for image attachments."""
|
||||
try:
|
||||
from PIL import Image
|
||||
import io
|
||||
|
||||
from PIL import Image
|
||||
|
||||
img = Image.open(io.BytesIO(content))
|
||||
width, height = img.size
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ from typing import TYPE_CHECKING
|
||||
|
||||
from app.modules.contracts.features import (
|
||||
FeatureDeclaration,
|
||||
FeatureProviderProtocol,
|
||||
FeatureScope,
|
||||
FeatureType,
|
||||
FeatureUsage,
|
||||
|
||||
@@ -17,6 +17,7 @@ from typing import Any
|
||||
from sqlalchemy import and_, func, or_
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from app.modules.customers.models.customer import Customer
|
||||
from app.modules.messaging.models.message import (
|
||||
Conversation,
|
||||
ConversationParticipant,
|
||||
@@ -25,7 +26,6 @@ from app.modules.messaging.models.message import (
|
||||
MessageAttachment,
|
||||
ParticipantType,
|
||||
)
|
||||
from app.modules.customers.models.customer import Customer
|
||||
from app.modules.tenancy.models import User
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
Reference in New Issue
Block a user