* Update CRUD utils to use types better. * Simplify Pydantic model names, from `UserInCreate` to `UserCreate`, etc. * Upgrade packages. * Add new generic "Items" models, crud utils, endpoints, and tests. To facilitate re-using them to create new functionality. As they are simple and generic (not like Users), it's easier to copy-paste and adapt them to each use case. * Update endpoints/*path operations* to simplify code and use new utilities, prefix and tags in `include_router`. * Update testing utils. * Update linting rules, relax vulture to reduce false positives. * Update migrations to include new Items. * Update project README.md with tips about how to start with backend.
40 lines
948 B
Python
40 lines
948 B
Python
import logging
|
|
|
|
from tenacity import after_log, before_log, retry, stop_after_attempt, wait_fixed
|
|
|
|
from app.db.session import db_session
|
|
from app.tests.api.api_v1.test_login import test_get_access_token
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
max_tries = 60 * 5 # 5 minutes
|
|
wait_seconds = 1
|
|
|
|
|
|
@retry(
|
|
stop=stop_after_attempt(max_tries),
|
|
wait=wait_fixed(wait_seconds),
|
|
before=before_log(logger, logging.INFO),
|
|
after=after_log(logger, logging.WARN),
|
|
)
|
|
def init():
|
|
try:
|
|
# Try to create session to check if DB is awake
|
|
db_session.execute("SELECT 1")
|
|
# Wait for API to be awake, run one simple tests to authenticate
|
|
test_get_access_token()
|
|
except Exception as e:
|
|
logger.error(e)
|
|
raise e
|
|
|
|
|
|
def main():
|
|
logger.info("Initializing service")
|
|
init()
|
|
logger.info("Service finished initializing")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|