Skip to content

Commit 3c222d9

Browse files
author
reinhud
committed
Changed models to test relationships
1 parent e266e93 commit 3c222d9

24 files changed

+61
-617
lines changed

src/.env.example

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Generator

Whitespace-only changes.

src/fastapi_server/app/api/routes/router.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
"""
55
from fastapi import APIRouter
66

7-
from app.api.routes import user
7+
from app.api.routes import children, parents
88

99

1010
router = APIRouter()
1111

12-
router.include_router(user.router, prefix="/user", tags=["User Endpoints"])
12+
router.include_router(children.router, prefix="/children", tags=["Children Endpoints"])
13+
router.include_router(parents.router, prefix="/parents", tags=["Parents Endpoints"])
1314

1415

src/fastapi_server/app/api/routes/user.py

Lines changed: 0 additions & 63 deletions
This file was deleted.

src/fastapi_server/app/core/config.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
"""App configuration functions and access to settings"""
2+
import os
3+
4+
import alembic
5+
from alembic.config import Config
26
from fastapi import FastAPI
7+
from loguru import logger
8+
from pydantic import PostgresDsn
9+
from sqlalchemy import create_engine
10+
from sqlalchemy.orm import Session
11+
from sqlalchemy_utils import database_exists, create_database
12+
import warnings
313

414
from app.core.app_settings import AppSettings
15+
from app.db.models.base import Base
516

617

718
def get_app_settings() -> AppSettings:
@@ -16,5 +27,3 @@ def add_middleware(app: FastAPI) -> None:
1627
pass
1728

1829

19-
20-
Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,40 @@
11
"""Connection to the Postgres database."""
2+
from loguru import logger
3+
from sqlalchemy.exc import SQLAlchemyError
24
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
35

46
from app.core.config import get_app_settings
7+
from app.db.models.base import Base
58

69

710
def get_async_engine() -> AsyncEngine:
811
"""Return async database engine."""
9-
async_engine: AsyncEngine = create_async_engine(
10-
get_app_settings().database_url,
11-
echo=True, # see sql querries executed
12-
future=True,
13-
)
12+
try:
13+
async_engine: AsyncEngine = create_async_engine(
14+
get_app_settings().database_url,
15+
echo=True, # see sql querries executed
16+
future=True,
17+
)
18+
except SQLAlchemyError as e:
19+
logger.warning("Unable to establish db engine, database might not exist yet")
20+
logger.warning(e)
1421

1522
return async_engine
1623

1724

25+
async def initialize_database() -> None:
26+
"""Create table in metadata if they don't exist yet.
27+
28+
This uses a sync connection because the 'create_all' doesn't
29+
feature async yet.
30+
"""
31+
async_engine = get_async_engine()
32+
async with async_engine.begin() as async_conn:
33+
logger.info("Trying to create new tables")
34+
35+
await async_conn.run_sync(Base.metadata.create_all)
36+
37+
38+
39+
40+

src/fastapi_server/app/db/models/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
Base = declarative_base()
99

1010
@declarative_mixin
11-
class BaseSaModel:
11+
class BaseDBModel:
1212
"""Class defining common db model components."""
1313
# autoinc pk key
1414
id = Column(Integer, primary_key=True, autoincrement=True)

src/fastapi_server/app/db/models/user.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/fastapi_server/app/db/repositories/user.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/fastapi_server/app/fastapi_server.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
from app.api.routes.router import router as api_router
2323
from app.core.config import add_middleware, get_app_settings
24+
from app.db.db_session import initialize_database
2425

2526
def get_app() -> FastAPI:
2627
"""Instanciating and setting up FastAPI application"""
@@ -34,6 +35,11 @@ def get_app() -> FastAPI:
3435

3536
app.include_router(api_router, prefix=settings.api_prefix)
3637

38+
@app.on_event("startup")
39+
async def startup_event() -> None:
40+
logger.warning("Startup Event starting")
41+
await initialize_database()
42+
3743
return app
3844

3945

src/fastapi_server/app/models/domain/user.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/fastapi_server/app/models/utility_schemas/user.py

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/fastapi_server/migrations/env.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import sys
66

77
from alembic import context
8+
from loguru import logger
89
from sqlalchemy import engine_from_config
910
from sqlalchemy.ext.asyncio import AsyncEngine
1011
from sqlalchemy.pool import NullPool
@@ -13,6 +14,7 @@
1314
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
1415
from app.core.config import get_app_settings
1516
from app.db.models.base import Base
17+
from app.db.models.metadata import metadata_family
1618

1719

1820
settings = get_app_settings()
@@ -23,8 +25,8 @@
2325

2426
# Interpret the config file for Python logging.
2527
# This line sets up loggers basically.
26-
if config.config_file_name is not None:
27-
fileConfig(config.config_file_name)
28+
# if config.config_file_name is not None:
29+
# fileConfig(config.config_file_name)
2830

2931
# add your model's MetaData object here
3032
# for 'autogenerate' support
@@ -76,7 +78,7 @@ async def run_migrations_online():
7678
7779
"""
7880
# varies between live and test migrations
79-
DATABASE_URL = f"{settings.database_url}_test" if os.environ.get("Testing") else settings.database_url
81+
DATABASE_URL = f"{settings.database_url}_test" if os.environ.get("TESTING") else settings.database_url
8082

8183
connectable = context.config.attributes.get("connection", None)
8284
config.set_main_option("sqlalchemy.url", DATABASE_URL)
@@ -86,7 +88,7 @@ async def run_migrations_online():
8688
context.config.get_section(context.config.config_ini_section),
8789
prefix="sqlalchemy.",
8890
poolclass=NullPool,
89-
future=True
91+
# future=True
9092
)
9193
)
9294

@@ -97,6 +99,8 @@ async def run_migrations_online():
9799

98100

99101
if context.is_offline_mode():
102+
logger.info("Running migrations offline.")
100103
run_migrations_offline()
101104
else:
105+
logger.info("Running migrations online.")
102106
asyncio.run(run_migrations_online())

src/fastapi_server/migrations/versions/0373c9fedf60_revision_before_test.py

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)