chore: Sort imports, fix deprecated pydantic option.

This commit is contained in:
Elisiário Couto
2025-09-14 21:11:01 +01:00
parent 5ae3a51d81
commit 2467cb2f5a
35 changed files with 95 additions and 74 deletions

View File

@@ -1,5 +1,5 @@
from datetime import datetime
from typing import List, Optional, Dict, Any
from typing import Any, Dict, List, Optional
from pydantic import BaseModel

View File

@@ -1,4 +1,4 @@
from typing import Optional, List
from typing import List, Optional
from pydantic import BaseModel

View File

@@ -1,15 +1,16 @@
from typing import Optional, List, Union
from typing import List, Optional, Union
from fastapi import APIRouter, HTTPException, Query
from loguru import logger
from leggen.api.models.common import APIResponse
from leggen.api.models.accounts import (
AccountDetails,
AccountBalance,
AccountDetails,
AccountUpdate,
Transaction,
TransactionSummary,
AccountUpdate,
)
from leggen.api.models.common import APIResponse
from leggen.services.database_service import DatabaseService
router = APIRouter()

View File

@@ -1,13 +1,13 @@
from fastapi import APIRouter, HTTPException, Query
from loguru import logger
from leggen.api.models.common import APIResponse
from leggen.api.models.banks import (
BankInstitution,
BankConnectionRequest,
BankRequisition,
BankConnectionStatus,
BankInstitution,
BankRequisition,
)
from leggen.api.models.common import APIResponse
from leggen.services.gocardless_service import GoCardlessService
from leggen.utils.gocardless import REQUISITION_STATUS

View File

@@ -1,14 +1,15 @@
from typing import Dict, Any
from typing import Any, Dict
from fastapi import APIRouter, HTTPException
from loguru import logger
from leggen.api.models.common import APIResponse
from leggen.api.models.notifications import (
DiscordConfig,
NotificationFilters,
NotificationSettings,
NotificationTest,
DiscordConfig,
TelegramConfig,
NotificationFilters,
)
from leggen.services.notification_service import NotificationService
from leggen.utils.config import config

View File

@@ -1,11 +1,12 @@
from typing import Optional
from fastapi import APIRouter, HTTPException, BackgroundTasks
from fastapi import APIRouter, BackgroundTasks, HTTPException
from loguru import logger
from leggen.api.models.common import APIResponse
from leggen.api.models.sync import SyncRequest, SchedulerConfig
from leggen.services.sync_service import SyncService
from leggen.api.models.sync import SchedulerConfig, SyncRequest
from leggen.background.scheduler import scheduler
from leggen.services.sync_service import SyncService
from leggen.utils.config import config
router = APIRouter()

View File

@@ -1,10 +1,11 @@
from typing import Optional, List, Union
from datetime import datetime, timedelta
from typing import List, Optional, Union
from fastapi import APIRouter, HTTPException, Query
from loguru import logger
from leggen.api.models.common import APIResponse, PaginatedResponse
from leggen.api.models.accounts import Transaction, TransactionSummary
from leggen.api.models.common import APIResponse, PaginatedResponse
from leggen.services.database_service import DatabaseService
router = APIRouter()

View File

@@ -1,8 +1,9 @@
import os
import requests
from typing import Dict, Any, Optional, List, Union
from typing import Any, Dict, List, Optional, Union
from urllib.parse import urljoin
import requests
from leggen.utils.text import error

View File

@@ -2,9 +2,9 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
from loguru import logger
from leggen.utils.config import config
from leggen.services.sync_service import SyncService
from leggen.services.notification_service import NotificationService
from leggen.services.sync_service import SyncService
from leggen.utils.config import config
class BackgroundScheduler:

View File

@@ -1,7 +1,7 @@
import click
from leggen.main import cli
from leggen.api_client import LeggenAPIClient
from leggen.main import cli
from leggen.utils.text import datefmt, print_table

View File

@@ -1,9 +1,9 @@
import click
from leggen.main import cli
from leggen.api_client import LeggenAPIClient
from leggen.main import cli
from leggen.utils.disk import save_file
from leggen.utils.text import info, print_table, warning, success
from leggen.utils.text import info, print_table, success, warning
@cli.command()

View File

@@ -1,8 +1,9 @@
"""Generate sample database command."""
import click
from pathlib import Path
import click
@click.command()
@click.option(
@@ -34,8 +35,8 @@ def generate_sample_db(
"""Generate a sample database with realistic financial data for testing."""
# Import here to avoid circular imports
import sys
import subprocess
import sys
from pathlib import Path as PathlibPath
# Get the script path

View File

@@ -7,7 +7,7 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from loguru import logger
from leggen.api.routes import banks, accounts, sync, notifications, transactions
from leggen.api.routes import accounts, banks, notifications, sync, transactions
from leggen.background.scheduler import scheduler
from leggen.utils.config import config
from leggen.utils.paths import path_manager

View File

@@ -1,7 +1,7 @@
import click
from leggen.main import cli
from leggen.api_client import LeggenAPIClient
from leggen.main import cli
from leggen.utils.text import datefmt, echo, info, print_table

View File

@@ -1,7 +1,7 @@
import click
from leggen.main import cli
from leggen.api_client import LeggenAPIClient
from leggen.main import cli
from leggen.utils.text import error, info, success

View File

@@ -1,7 +1,7 @@
import click
from leggen.main import cli
from leggen.api_client import LeggenAPIClient
from leggen.main import cli
from leggen.utils.text import datefmt, info, print_table

View File

@@ -6,8 +6,8 @@ from pathlib import Path
import click
from leggen.utils.config import load_config
from leggen.utils.text import error
from leggen.utils.paths import path_manager
from leggen.utils.text import error
cmd_folder = os.path.abspath(os.path.join(os.path.dirname(__file__), "commands"))

View File

@@ -1,4 +1,5 @@
from typing import Optional, List
from typing import List, Optional
from pydantic import BaseModel, Field
@@ -61,6 +62,4 @@ class Config(BaseModel):
scheduler: SchedulerConfig = Field(default_factory=SchedulerConfig)
class Config:
allow_population_by_field_name = (
True # Allow both 'case_insensitive' and 'case-insensitive'
)
validate_by_name = True

View File

@@ -1,14 +1,14 @@
from datetime import datetime, timedelta
from typing import List, Dict, Any, Optional
import sqlite3
import json
import sqlite3
from collections import defaultdict
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
from loguru import logger
from leggen.services.transaction_processor import TransactionProcessor
from leggen.utils.config import config
from leggen.utils.paths import path_manager
from leggen.services.transaction_processor import TransactionProcessor
class DatabaseService:
@@ -721,8 +721,8 @@ class DatabaseService:
) -> List[Dict[str, Any]]:
"""Persist transactions to SQLite"""
try:
import sqlite3
import json
import sqlite3
db_path = path_manager.get_database_path()
conn = sqlite3.connect(str(db_path))

View File

@@ -1,8 +1,8 @@
import json
import httpx
from pathlib import Path
from typing import Dict, Any, List
from typing import Any, Dict, List
import httpx
from loguru import logger
from leggen.utils.config import config

View File

@@ -1,4 +1,4 @@
from typing import List, Dict, Any
from typing import Any, Dict, List
from loguru import logger
@@ -119,9 +119,10 @@ class NotificationService:
) -> None:
"""Send Discord notifications for transactions"""
try:
from leggen.notifications.discord import send_transactions_message
import click
from leggen.notifications.discord import send_transactions_message
# Create a mock context with the webhook
ctx = click.Context(click.Command("notifications"))
ctx.obj = {
@@ -148,9 +149,10 @@ class NotificationService:
) -> None:
"""Send Telegram notifications for transactions"""
try:
from leggen.notifications.telegram import send_transaction_message
import click
from leggen.notifications.telegram import send_transaction_message
# Create a mock context with the telegram config
ctx = click.Context(click.Command("notifications"))
telegram_config = self.notifications_config.get("telegram", {})
@@ -175,9 +177,10 @@ class NotificationService:
async def _send_discord_test(self, message: str) -> None:
"""Send Discord test notification"""
try:
from leggen.notifications.discord import send_expire_notification
import click
from leggen.notifications.discord import send_expire_notification
# Create a mock context with the webhook
ctx = click.Context(click.Command("test"))
ctx.obj = {
@@ -206,9 +209,10 @@ class NotificationService:
async def _send_telegram_test(self, message: str) -> None:
"""Send Telegram test notification"""
try:
from leggen.notifications.telegram import send_expire_notification
import click
from leggen.notifications.telegram import send_expire_notification
# Create a mock context with the telegram config
ctx = click.Context(click.Command("test"))
telegram_config = self.notifications_config.get("telegram", {})
@@ -237,9 +241,10 @@ class NotificationService:
async def _send_discord_expiry(self, notification_data: Dict[str, Any]) -> None:
"""Send Discord expiry notification"""
try:
from leggen.notifications.discord import send_expire_notification
import click
from leggen.notifications.discord import send_expire_notification
# Create a mock context with the webhook
ctx = click.Context(click.Command("expiry"))
ctx.obj = {
@@ -262,9 +267,10 @@ class NotificationService:
async def _send_telegram_expiry(self, notification_data: Dict[str, Any]) -> None:
"""Send Telegram expiry notification"""
try:
from leggen.notifications.telegram import send_expire_notification
import click
from leggen.notifications.telegram import send_expire_notification
# Create a mock context with the telegram config
ctx = click.Context(click.Command("expiry"))
telegram_config = self.notifications_config.get("telegram", {})

View File

@@ -4,8 +4,8 @@ from typing import List
from loguru import logger
from leggen.api.models.sync import SyncResult, SyncStatus
from leggen.services.gocardless_service import GoCardlessService
from leggen.services.database_service import DatabaseService
from leggen.services.gocardless_service import GoCardlessService
from leggen.services.notification_service import NotificationService

View File

@@ -1,5 +1,5 @@
from datetime import datetime
from typing import List, Dict, Any
from typing import Any, Dict, List
class TransactionProcessor:

View File

@@ -1,17 +1,17 @@
import os
import sys
import tomllib
import tomli_w
from pathlib import Path
from typing import Dict, Any, Optional
from typing import Any, Dict, Optional
import click
import tomli_w
from loguru import logger
from pydantic import ValidationError
from leggen.utils.text import error
from leggen.utils.paths import path_manager
from leggen.models.config import Config as ConfigModel
from leggen.utils.paths import path_manager
from leggen.utils.text import error
class Config:

View File

@@ -7,7 +7,7 @@ import sqlite3
import sys
from datetime import datetime, timedelta
from pathlib import Path
from typing import List, Dict, Any
from typing import Any, Dict, List
import click

View File

@@ -1,10 +1,11 @@
"""Pytest configuration and shared fixtures."""
import pytest
import tempfile
import json
import tempfile
from pathlib import Path
from unittest.mock import patch
import pytest
from fastapi.testclient import TestClient
from leggen.commands.server import create_app

View File

@@ -1,8 +1,9 @@
"""Tests for analytics fixes to ensure all transactions are used in statistics."""
import pytest
from datetime import datetime, timedelta
from unittest.mock import Mock, AsyncMock, patch
from unittest.mock import AsyncMock, Mock, patch
import pytest
from fastapi.testclient import TestClient
from leggen.commands.server import create_app

View File

@@ -1,8 +1,9 @@
"""Tests for accounts API endpoints."""
import pytest
from unittest.mock import patch
import pytest
@pytest.mark.api
class TestAccountsAPI:

View File

@@ -1,9 +1,10 @@
"""Tests for banks API endpoints."""
from unittest.mock import patch
import httpx
import pytest
import respx
import httpx
from unittest.mock import patch
@pytest.mark.api

View File

@@ -1,9 +1,10 @@
"""Tests for CLI API client."""
from unittest.mock import patch
import pytest
import requests
import requests_mock
from unittest.mock import patch
from leggen.api_client import LeggenAPIClient

View File

@@ -1,8 +1,9 @@
"""Tests for transactions API endpoints."""
import pytest
from unittest.mock import patch
from datetime import datetime
from unittest.mock import patch
import pytest
@pytest.mark.api

View File

@@ -1,8 +1,9 @@
"""Tests for configuration management."""
import pytest
from unittest.mock import patch
import pytest
from leggen.utils.config import Config

View File

@@ -1,13 +1,14 @@
"""Integration tests for configurable paths."""
import pytest
import tempfile
import os
import tempfile
from pathlib import Path
from unittest.mock import patch
from leggen.utils.paths import path_manager
import pytest
from leggen.services.database_service import DatabaseService
from leggen.utils.paths import path_manager
@pytest.mark.unit

View File

@@ -1,8 +1,9 @@
"""Tests for database service."""
import pytest
from unittest.mock import patch
from datetime import datetime
from unittest.mock import patch
import pytest
from leggen.services.database_service import DatabaseService

View File

@@ -1,8 +1,9 @@
"""Tests for background scheduler."""
import pytest
from unittest.mock import patch, AsyncMock, MagicMock
from datetime import datetime
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from leggen.background.scheduler import BackgroundScheduler