Skip to content

Commit

Permalink
Fixed database initialization. (#43)
Browse files Browse the repository at this point in the history
Description:
* Added function to populate tables on startup for sqlalchemy and ormar.
* Added tortoise startup parameter.
* Fixed tortoise config.
* Fixed k8s config files.

Signed-off-by: Pavel Kirilin <[email protected]>
  • Loading branch information
s3rius authored Oct 13, 2021
1 parent 1ad18d5 commit bd165db
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,24 @@ spec:
args:
- -c
- >-
{%- if cookiecutter.enable_migrations == "True" %}
{%- if cookiecutter.orm in ['sqlalchemy', 'ormar'] %}
alembic upgrade head &&
{%- elif cookiecutter.orm == 'tortoise' %}
aerich upgrade &&
{%- endif %}
{%- endif %}
python -m {{cookiecutter.project_name }}
{%- endif %}
env:
- name: {{cookiecutter.project_name | upper }}_HOST
value: "0.0.0.0"
- name: {{cookiecutter.project_name | upper }}_WORKERS_COUNT
value: "10"
{%- if cookiecutter.db_info.name != "none" %}
{%- if cookiecutter.db_info.name != "sqlite" %}
{%- if cookiecutter.db_info.name not in ["none", "sqlite"] %}
- name: {{cookiecutter.project_name | upper }}_DB_HOST
value: "{{cookiecutter.kube_name}}-db-service"
{%- endif %}
{%- endif %}
{%- if cookiecutter.enable_redis == 'True' %}
- name: {{cookiecutter.project_name | upper }}_REDIS_HOST
value: "{{cookiecutter.kube_name}}-redis-service"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ spec:
- port: {{cookiecutter.db_info.port}}
targetPort: {{cookiecutter.db_info.port}}
---
{%- if cookiecutter.enable_migrations == "True" %}
apiVersion: batch/v1
kind: Job
metadata:
Expand Down Expand Up @@ -87,5 +88,5 @@ spec:
command: ["./wait-for-it.sh", "-t", "60", "{{cookiecutter.kube_name}}-db-service:{{cookiecutter.db_info.port}}"]
restartPolicy: Never


---
{%- endif %}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
},
"apps": {
"models": {
"models": ["aerich.models"] + MODELS_MODULES,
"models": MODELS_MODULES {%- if cookiecutter.enable_migrations == "True" %} + ["aerich.models"] {%- endif %} ,
"default_connection": "default",
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,14 @@ def get_app() -> FastAPI:
{% endif %}

{%- if cookiecutter.orm == 'tortoise' %}
register_tortoise(app, config=TORTOISE_CONFIG, add_exception_handlers=True)
register_tortoise(
app,
config=TORTOISE_CONFIG,
add_exception_handlers=True,
{%- if cookiecutter.enable_migrations == "False" %}
generate_schemas=True,
{%- endif %}
)
{%- endif %}

return app
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@

{%- if cookiecutter.orm == "ormar" %}
from {{cookiecutter.project_name}}.db.config import database
{%- if cookiecutter.db_info.name != "none" and cookiecutter.enable_migrations == "False" %}
from sqlalchemy.engine import create_engine
from {{cookiecutter.project_name}}.db.meta import meta
from {{cookiecutter.project_name}}.db.models import load_all_models
{%- endif %}
{%- endif %}

{%- if cookiecutter.orm == "sqlalchemy" %}
Expand All @@ -21,6 +26,11 @@
)
from sqlalchemy.orm import sessionmaker

{%- if cookiecutter.db_info.name != "none" and cookiecutter.enable_migrations == "False" %}
from {{cookiecutter.project_name}}.db.meta import meta
from {{cookiecutter.project_name}}.db.models import load_all_models
{%- endif %}


def _setup_db(app: FastAPI) -> None:
"""
Expand All @@ -47,11 +57,34 @@ def _setup_db(app: FastAPI) -> None:

{% if cookiecutter.enable_redis == "True" %}
def _setup_redis(app: FastAPI) -> None:
"""
Initialize redis connection.
:param app: current FastAPI app.
"""
app.state.redis_pool = aioredis.ConnectionPool.from_url(
str(settings.redis_url),
)
{%- endif %}

{%- if cookiecutter.db_info.name != "none" and cookiecutter.enable_migrations == "False" %}
{%- if cookiecutter.orm in ["ormar", "sqlalchemy"] %}
async def _create_tables() -> None:
"""Populates tables in the database."""
load_all_models()
{%- if cookiecutter.orm == "ormar" %}
engine = create_engine(str(settings.db_url))
with engine.connect() as connection:
meta.create_all(connection)
engine.dispose()
{%- elif cookiecutter.orm == "sqlalchemy" %}
engine = create_async_engine(str(settings.db_url))
async with engine.begin() as connection:
await connection.run_sync(meta.create_all)
await engine.dispose()
{%- endif %}
{%- endif %}
{%- endif %}

def startup(app: FastAPI) -> Callable[[], Awaitable[None]]:
"""
Expand All @@ -67,9 +100,14 @@ def startup(app: FastAPI) -> Callable[[], Awaitable[None]]:
async def _startup() -> None: # noqa: WPS430
{%- if cookiecutter.orm == "sqlalchemy" %}
_setup_db(app)
{% elif cookiecutter.orm == "ormar" %}
{%- elif cookiecutter.orm == "ormar" %}
await database.connect()
{%- endif %}
{%- if cookiecutter.db_info.name != "none" and cookiecutter.enable_migrations == "False" %}
{%- if cookiecutter.orm in ["ormar", "sqlalchemy"] %}
await _create_tables()
{%- endif %}
{%- endif %}
{%- if cookiecutter.enable_redis == "True" %}
_setup_redis(app)
{%- endif %}
Expand Down

0 comments on commit bd165db

Please sign in to comment.