Coverage for app/backend_pre_start.py: 70%
23 statements
« prev ^ index » next coverage.py v7.6.1, created at 2026-03-24 11:40 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2026-03-24 11:40 +0000
1import logging
3from sqlalchemy import Engine
4from sqlmodel import Session, select
5from tenacity import after_log, before_log, retry, stop_after_attempt, wait_fixed
7from app.core.db import engine
9logging.basicConfig(level=logging.INFO)
10logger = logging.getLogger(__name__)
12max_tries = 60 * 5 # 5 minutes
13wait_seconds = 1
16@retry(
17 stop=stop_after_attempt(max_tries),
18 wait=wait_fixed(wait_seconds),
19 before=before_log(logger, logging.INFO),
20 after=after_log(logger, logging.WARN),
21)
22def init(db_engine: Engine) -> None:
23 try:
24 with Session(db_engine) as session:
25 # Try to create session to check if DB is awake
26 session.exec(select(1))
27 except Exception as e:
28 logger.error(e)
29 raise e
32def main() -> None:
33 logger.info("Initializing service")
34 init(engine)
35 logger.info("Service finished initializing")
38if __name__ == "__main__":
39 main()