diff --git a/backend/alembic/env.py b/backend/alembic/env.py index 7e6ca51..65d9208 100644 --- a/backend/alembic/env.py +++ b/backend/alembic/env.py @@ -11,7 +11,7 @@ sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from app.core.config import settings from app.core.database import Base -from app.models import database_models # Import all models +from app.models import database_models # noqa: F401 - Import all models for Alembic # this is the Alembic Config object config = context.config diff --git a/backend/app/api/v1/endpoints/mail_accounts.py b/backend/app/api/v1/endpoints/mail_accounts.py index 3415f17..af374ba 100644 --- a/backend/app/api/v1/endpoints/mail_accounts.py +++ b/backend/app/api/v1/endpoints/mail_accounts.py @@ -7,7 +7,7 @@ from sqlalchemy import select, desc from app.core.database import get_db from app.core.deps import get_current_active_user -from app.core.security import encrypt_credential, decrypt_credential +from app.core.security import encrypt_credential from app.models.database_models import User, MailAccount from app.models.schemas import ( MailAccountCreate, @@ -52,7 +52,7 @@ async def create_mail_account( if len(existing_accounts) >= max_accounts: raise HTTPException( status_code=status.HTTP_402_PAYMENT_REQUIRED, - detail=f"Account limit reached. Upgrade your subscription to add more accounts.", + detail="Account limit reached. Upgrade your subscription to add more accounts.", ) # Encrypt password diff --git a/backend/app/api/v1/endpoints/notifications.py b/backend/app/api/v1/endpoints/notifications.py index 784e18e..77b5480 100644 --- a/backend/app/api/v1/endpoints/notifications.py +++ b/backend/app/api/v1/endpoints/notifications.py @@ -1,7 +1,7 @@ """Notification configuration endpoints""" from typing import List -from fastapi import APIRouter, Depends, HTTPException, status +from fastapi import APIRouter, Depends, status from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select @@ -11,7 +11,6 @@ from app.models.database_models import User, NotificationConfig from app.models.schemas import ( NotificationConfigCreate, NotificationConfigResponse, - NotificationConfigUpdate, ) router = APIRouter() diff --git a/backend/app/api/v1/endpoints/providers.py b/backend/app/api/v1/endpoints/providers.py index f7f404a..d955d31 100644 --- a/backend/app/api/v1/endpoints/providers.py +++ b/backend/app/api/v1/endpoints/providers.py @@ -8,7 +8,7 @@ from sqlalchemy import select from app.core.database import get_db from app.core.deps import get_current_active_user -from app.core.security import encrypt_credential, decrypt_credential +from app.core.security import encrypt_credential from app.core.config import settings from app.models.database_models import User, GmailCredential from app.models.schemas import ( diff --git a/backend/app/api/v1/endpoints/subscriptions.py b/backend/app/api/v1/endpoints/subscriptions.py index 1209d3b..d25f02f 100644 --- a/backend/app/api/v1/endpoints/subscriptions.py +++ b/backend/app/api/v1/endpoints/subscriptions.py @@ -1,7 +1,7 @@ """Subscription and payment endpoints""" from typing import List -from fastapi import APIRouter, Depends, HTTPException, status +from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select @@ -17,7 +17,7 @@ router = APIRouter() async def list_subscription_plans(db: AsyncSession = Depends(get_db)): """List all available subscription plans""" result = await db.execute( - select(SubscriptionPlan).where(SubscriptionPlan.is_active == True) + select(SubscriptionPlan).where(SubscriptionPlan.is_active == True) # noqa: E712 ) return result.scalars().all() diff --git a/backend/app/api/v1/endpoints/users.py b/backend/app/api/v1/endpoints/users.py index f7b3eb9..d4fde9f 100644 --- a/backend/app/api/v1/endpoints/users.py +++ b/backend/app/api/v1/endpoints/users.py @@ -1,12 +1,12 @@ """User management endpoints""" -from fastapi import APIRouter, Depends, HTTPException, status +from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.deps import get_current_active_user from app.models.database_models import User -from app.models.schemas import UserResponse, UserDetailResponse, UserUpdate +from app.models.schemas import UserDetailResponse, UserUpdate router = APIRouter() diff --git a/backend/app/core/config.py b/backend/app/core/config.py index b123632..d765040 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -5,7 +5,7 @@ Supports environment variables and .env files. from typing import Optional, List from pydantic_settings import BaseSettings, SettingsConfigDict -from pydantic import PostgresDsn, field_validator, ValidationInfo +from pydantic import field_validator class Settings(BaseSettings): diff --git a/backend/app/core/deps.py b/backend/app/core/deps.py index f8bf957..d3cac30 100644 --- a/backend/app/core/deps.py +++ b/backend/app/core/deps.py @@ -17,7 +17,7 @@ from app.core.security import decode_token from app.models.database_models import User # OAuth2 scheme for token authentication -oauth2_scheme = OAuth2PasswordBearer(tokenUrl=f"/api/v1/auth/login", auto_error=False) +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/v1/auth/login", auto_error=False) http_bearer = HTTPBearer(auto_error=False) diff --git a/backend/app/main.py b/backend/app/main.py index 403b5af..4673ab0 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -4,8 +4,6 @@ Main FastAPI application. from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware -from fastapi.middleware.trustedhost import TrustedHostMiddleware -from fastapi.responses import JSONResponse import logging from app.core.config import settings @@ -68,7 +66,7 @@ def create_application() -> FastAPI: """Run on application startup""" logger.info(f"Starting {settings.APP_NAME} v{settings.APP_VERSION}") logger.info(f"Debug mode: {settings.DEBUG}") - logger.info(f"API documentation: /api/docs") + logger.info("API documentation: /api/docs") @app.on_event("shutdown") async def shutdown_event(): diff --git a/backend/app/models/database_models.py b/backend/app/models/database_models.py index 0dc6bb2..9c88f7c 100644 --- a/backend/app/models/database_models.py +++ b/backend/app/models/database_models.py @@ -3,7 +3,6 @@ Database models for the multi-tenant POP3 forwarder application. """ from datetime import datetime -from typing import Optional from sqlalchemy import ( Column, Integer, diff --git a/backend/app/models/schemas.py b/backend/app/models/schemas.py index 80d4ad5..c655891 100644 --- a/backend/app/models/schemas.py +++ b/backend/app/models/schemas.py @@ -4,7 +4,7 @@ Pydantic schemas for API request/response validation. from datetime import datetime from typing import Optional, Dict, Any, List -from pydantic import BaseModel, EmailStr, Field, validator +from pydantic import BaseModel, EmailStr, Field from enum import Enum diff --git a/backend/app/services/auth_service.py b/backend/app/services/auth_service.py index 2924705..4048393 100644 --- a/backend/app/services/auth_service.py +++ b/backend/app/services/auth_service.py @@ -2,8 +2,7 @@ OAuth2 authentication service for Google and other providers. """ -from typing import Dict, Any, Optional -from datetime import datetime +from typing import Dict, Any import httpx from authlib.integrations.starlette_client import OAuth from fastapi import HTTPException, status diff --git a/backend/app/services/mail_processor.py b/backend/app/services/mail_processor.py index 148afe0..6c48285 100644 --- a/backend/app/services/mail_processor.py +++ b/backend/app/services/mail_processor.py @@ -12,12 +12,10 @@ from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.utils import formatdate, make_msgid from typing import List, Dict, Any, Optional, Tuple -from datetime import datetime import logging from aioimaplib import aioimaplib from app.models.database_models import MailAccount, MailProtocol -from app.core.config import settings logger = logging.getLogger(__name__) diff --git a/backend/app/workers/tasks.py b/backend/app/workers/tasks.py index 8450ef4..5209945 100644 --- a/backend/app/workers/tasks.py +++ b/backend/app/workers/tasks.py @@ -5,7 +5,6 @@ Celery tasks for background email processing. import asyncio import os from datetime import datetime, timedelta -from typing import List from celery import Task import logging @@ -24,7 +23,6 @@ from app.services.mail_processor import MailProcessor from app.services.gmail_service import GmailService, GmailInjectionError from app.core.config import settings from sqlalchemy import select, and_ -from sqlalchemy.ext.asyncio import AsyncSession logger = logging.getLogger(__name__) @@ -94,7 +92,7 @@ async def process_mail_account(account_id: int): gmail_cred_result = await db.execute( select(GmailCredential).where( GmailCredential.user_id == account.user_id, - GmailCredential.is_valid == True, + GmailCredential.is_valid == True, # noqa: E712 ) ) gmail_cred = gmail_cred_result.scalar_one_or_none() @@ -222,7 +220,7 @@ async def process_all_enabled_accounts(): result = await db.execute( select(MailAccount).where( and_( - MailAccount.is_enabled == True, + MailAccount.is_enabled == True, # noqa: E712 MailAccount.status.in_( [AccountStatus.ACTIVE, AccountStatus.TESTING] ), diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index cc6b1d9..c287ae0 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -3,8 +3,7 @@ Test configuration and fixtures. """ import pytest -import asyncio -from typing import AsyncGenerator, Generator +from typing import AsyncGenerator from httpx import AsyncClient from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker from sqlalchemy.pool import NullPool diff --git a/backend/tests/unit/test_gmail_service.py b/backend/tests/unit/test_gmail_service.py index e6121ae..09810e9 100644 --- a/backend/tests/unit/test_gmail_service.py +++ b/backend/tests/unit/test_gmail_service.py @@ -3,7 +3,7 @@ Unit tests for Gmail service module. """ import pytest -from unittest.mock import MagicMock, patch, AsyncMock +from unittest.mock import MagicMock from app.services.gmail_service import GmailService, GmailInjectionError, GMAIL_SCOPES diff --git a/backend/tests/unit/test_provider_presets.py b/backend/tests/unit/test_provider_presets.py index a5de124..aea06fe 100644 --- a/backend/tests/unit/test_provider_presets.py +++ b/backend/tests/unit/test_provider_presets.py @@ -2,7 +2,6 @@ Unit tests for provider presets and mail server auto-detection. """ -import pytest from app.services.mail_processor import MailServerAutoDetect