mirror of
https://github.com/trushildhokiya/allininx-2.git
synced 2025-03-15 14:28:39 +00:00
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
from ssl import CERT_REQUIRED
|
|
|
|
from sqlalchemy import text
|
|
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
|
|
|
|
from reworkd_platform.services.ssl import get_ssl_context
|
|
from reworkd_platform.settings import settings
|
|
|
|
|
|
def create_engine() -> AsyncEngine:
|
|
"""
|
|
Creates SQLAlchemy engine instance.
|
|
|
|
:return: SQLAlchemy engine instance.
|
|
"""
|
|
if settings.environment == "development":
|
|
return create_async_engine(
|
|
str(settings.db_url),
|
|
echo=settings.db_echo,
|
|
)
|
|
|
|
ssl_context = get_ssl_context(settings)
|
|
ssl_context.verify_mode = CERT_REQUIRED
|
|
connect_args = {"ssl": ssl_context}
|
|
|
|
return create_async_engine(
|
|
str(settings.db_url),
|
|
echo=settings.db_echo,
|
|
connect_args=connect_args,
|
|
)
|
|
|
|
|
|
async def create_database() -> None:
|
|
"""Create a database."""
|
|
engine = create_async_engine(str(settings.db_url.with_path("/mysql")))
|
|
|
|
async with engine.connect() as conn:
|
|
database_existance = await conn.execute(
|
|
text(
|
|
"SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA" # noqa: S608
|
|
f" WHERE SCHEMA_NAME='{settings.db_base}';",
|
|
)
|
|
)
|
|
database_exists = database_existance.scalar() == 1
|
|
|
|
if database_exists:
|
|
await drop_database()
|
|
|
|
async with engine.connect() as conn: # noqa: WPS440
|
|
await conn.execute(text(f"CREATE DATABASE {settings.db_base};"))
|
|
|
|
|
|
async def drop_database() -> None:
|
|
"""Drop current database."""
|
|
engine = create_async_engine(str(settings.db_url.with_path("/mysql")))
|
|
async with engine.connect() as conn:
|
|
await conn.execute(text(f"DROP DATABASE {settings.db_base};"))
|