Migrate from sqlmodel to pure sqlalchemy

This commit is contained in:
2025-05-18 22:13:07 +02:00
parent 061a52c90a
commit a0adf281b5
12 changed files with 68 additions and 52 deletions

View File

@ -12,7 +12,8 @@ from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles
from sqlmodel import Session, select
from sqlalchemy import select
from sqlalchemy.orm import Session
from sshecret_admin import api, frontend
from sshecret_admin.auth.models import PasswordDB, init_db
from sshecret_admin.core.db import setup_database
@ -50,7 +51,7 @@ def create_admin_app(
settings=settings, regenerate=False
)
with Session(engine) as session:
existing_password = session.exec(select(PasswordDB).where(PasswordDB.id == 1)).first()
existing_password = session.scalars(select(PasswordDB).where(PasswordDB.id == 1)).first()
if not encr_master_password:
if existing_password:

View File

@ -9,7 +9,8 @@ from typing import Any, cast
import click
import uvicorn
from pydantic import ValidationError
from sqlmodel import Session, create_engine, select
from sqlalchemy import select, create_engine
from sqlalchemy.orm import Session
from sshecret_admin.auth.authentication import hash_password
from sshecret_admin.auth.models import PasswordDB, User, init_db
from sshecret_admin.core.settings import AdminServerSettings
@ -80,7 +81,7 @@ def cli_change_user_passwd(ctx: click.Context, username: str, password: str) ->
engine = create_engine(settings.admin_db)
init_db(engine)
with Session(engine) as session:
user = session.exec(select(User).where(User.username == username)).first()
user = session.scalars(select(User).where(User.username == username)).first()
if not user:
raise click.ClickException(f"Error: No such user, {username}.")
new_passwd_hash = hash_password(password)
@ -100,7 +101,7 @@ def cli_delete_user(ctx: click.Context, username: str) -> None:
engine = create_engine(settings.admin_db)
init_db(engine)
with Session(engine) as session:
user = session.exec(select(User).where(User.username == username)).first()
user = session.scalars(select(User).where(User.username == username)).first()
if not user:
raise click.ClickException(f"Error: No such user, {username}.")
@ -142,7 +143,7 @@ def cli_repl(ctx: click.Context) -> None:
engine = create_engine(settings.admin_db)
init_db(engine)
with Session(engine) as session:
password_db = session.exec(select(PasswordDB).where(PasswordDB.id == 1)).first()
password_db = session.scalars(select(PasswordDB).where(PasswordDB.id == 1)).first()
if not password_db:
raise click.ClickException(

View File

@ -2,17 +2,17 @@
from collections.abc import Generator, Callable
from sqlmodel import Session, create_engine
import sqlalchemy as sa
from sqlalchemy.orm import Session
from sqlalchemy.engine import URL
from sqlalchemy import create_engine, Engine
def setup_database(
db_url: URL | str,
) -> tuple[sa.Engine, Callable[[], Generator[Session, None, None]]]:
) -> tuple[Engine, Callable[[], Generator[Session, None, None]]]:
"""Setup database."""
engine = create_engine(db_url, echo=False)
engine = create_engine(db_url, echo=False, future=True)
def get_db_session() -> Generator[Session, None, None]:
"""Get DB Session."""

View File

@ -1,10 +1,10 @@
"""Common type definitions."""
from collections.abc import AsyncGenerator, Callable, Generator
from collections.abc import AsyncGenerator, Awaitable, Callable, Generator
from dataclasses import dataclass
from typing import Awaitable, Self
from typing import Self
from sqlmodel import Session
from sqlalchemy.orm import Session
from sshecret_admin.auth import User
from sshecret_admin.services import AdminBackend
from sshecret_admin.core.settings import AdminServerSettings