This commit is contained in:
PotapovaA 2026-09-15 17:49:12 +03:00
parent aa4085209a
commit 7decc3378e
4 changed files with 2857 additions and 12 deletions

View File

@ -1,12 +1,27 @@
import asyncio import asyncio
from logging.config import fileConfig from logging.config import fileConfig
from pathlib import Path
from pydantic import AliasChoices, Field
from pydantic_settings import BaseSettings, SettingsConfigDict
from sqlalchemy import engine_from_config from sqlalchemy import engine_from_config
from sqlalchemy import pool from sqlalchemy import pool
from sqlalchemy.ext.asyncio import AsyncEngine from sqlalchemy.ext.asyncio import AsyncEngine
from alembic import context from alembic import context
from src.core.config import settings
from src.models import * from src.models import *
class MigrationSettings(BaseSettings):
database_url: str = Field(validation_alias=AliasChoices(
"OPENBAO__DATABASE__DATABASE_URL",
"OPENBAO__SETTINGS__DATABASE_URL",
))
model_config = SettingsConfigDict(
env_file=Path(__file__).resolve().parents[1] / ".env",
extra="ignore",
)
# this is the Alembic Config object, which provides # this is the Alembic Config object, which provides
# access to the values within the .ini file in use. # access to the values within the .ini file in use.
config = context.config config = context.config
@ -16,7 +31,7 @@ config = context.config
if config.config_file_name is not None: if config.config_file_name is not None:
fileConfig(config.config_file_name) fileConfig(config.config_file_name)
config.set_main_option("sqlalchemy.url", settings.OPENBAO.DATABASE.DATABASE_URL) config.set_main_option("sqlalchemy.url", MigrationSettings().database_url.replace("%", "%%"))
# add your model's MetaData object here # add your model's MetaData object here
# for 'autogenerate' support # for 'autogenerate' support
# from myapp import mymodel # from myapp import mymodel
@ -45,6 +60,7 @@ def do_run_migrations(connection) -> None:
) )
with context.begin_transaction(): with context.begin_transaction():
context.execute('CREATE SCHEMA IF NOT EXISTS "dkb"')
context.run_migrations() context.run_migrations()
def run_migrations_offline() -> None: def run_migrations_offline() -> None:
@ -71,6 +87,7 @@ def run_migrations_offline() -> None:
) )
with context.begin_transaction(): with context.begin_transaction():
context.execute('CREATE SCHEMA IF NOT EXISTS "dkb"')
context.run_migrations() context.run_migrations()
@ -96,7 +113,9 @@ async def run_migrations_online() -> None:
await connectable.dispose() await connectable.dispose()
if context.is_offline_mode(): if config.attributes.get("connection") is not None:
do_run_migrations(config.attributes["connection"])
elif context.is_offline_mode():
run_migrations_offline() run_migrations_offline()
else: else:
asyncio.run(run_migrations_online()) asyncio.run(run_migrations_online())

View File

@ -1,5 +1,6 @@
import uvicorn import uvicorn
from src import app, get_settings from src.app import app
from src.core.config import get_settings
if __name__ == "__main__": if __name__ == "__main__":
settings = get_settings() settings = get_settings()
@ -9,4 +10,3 @@ if __name__ == "__main__":
port=settings.server.PORT, port=settings.server.PORT,
lifespan="on", lifespan="on",
) )

View File

@ -1,7 +1 @@
from .app import app """API package. Import application entry points explicitly from src.app."""
from .core.config import get_settings
__all__ = [
'app',
'get_settings',
]

2832
web/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff