40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
import logging
|
|
import typing
|
|
|
|
import tortoise
|
|
import tortoise.config
|
|
import tortoise.migrations.api
|
|
|
|
if typing.TYPE_CHECKING:
|
|
from app.params import Parameters
|
|
|
|
|
|
class Database:
|
|
def __init__(self, params: Parameters) -> None:
|
|
self.env = params.env
|
|
self.logger = logging.getLogger(self.__class__.__name__)
|
|
self.config = tortoise.config.TortoiseConfig(
|
|
connections={"default": tortoise.config.DBUrlConfig(params.db_uri)},
|
|
apps={
|
|
"models": tortoise.config.AppConfig(
|
|
models=["app.models"],
|
|
default_connection="default",
|
|
migrations="app.migrations",
|
|
)
|
|
},
|
|
)
|
|
|
|
def init(self) -> typing.Self:
|
|
self.logger.info("Migrating database")
|
|
tortoise.run_async(tortoise.migrations.api.migrate(config=self.config))
|
|
self.logger.info("Initializing database")
|
|
tortoise.run_async(
|
|
tortoise.Tortoise.init(config=self.config, _enable_global_fallback=True)
|
|
)
|
|
self.logger.info("Database ready")
|
|
return self
|
|
|
|
def __enter__(self) -> typing.Self:
|
|
|
|
return self
|