Compare commits

...

4 Commits

Author SHA1 Message Date
Jakub Miazek
2fdc1e9723
Merge pull request #185 from grillazz/171-simple-and-fast-smtp-client
refactor SchedulerMiddleware
2024-11-22 14:43:02 +01:00
Jakub Miazek
dd619e70ce refactor SchedulerMiddleware 2024-11-22 14:10:39 +01:00
Jakub Miazek
a7c70079b0
Merge pull request #184 from grillazz/178-update-shakespeare-models-with-latest-version-of-sqlacodegen
refresh alembic migrations
2024-11-22 13:21:28 +01:00
Jakub Miazek
488dd4612e refresh alembic migrations 2024-11-22 13:19:49 +01:00
4 changed files with 28 additions and 21 deletions

View File

@ -29,7 +29,7 @@ RUN apt-get purge -y curl git build-essential \
FROM install AS app-image
ENV PYTHONPATH=/home/code/ PYTHONHASHSEED=0
ENV PYTHONPATH=/home/code/ PYTHONHASHSEED=0 PYTHONASYNCIODEBUG=1
COPY tests/ tests/
COPY app/ app/

View File

@ -27,7 +27,7 @@ docker-create-db-migration: ## Create new alembic database migration aka databa
.PHONY: docker-test
docker-test: ## Run project tests
docker compose -f compose.yml -f test-compose.yml run --rm app pytest tests --durations=0
docker compose -f compose.yml -f test-compose.yml run --rm app pytest tests --durations=0 -vv
.PHONY: docker-test-snapshot
docker-test-snapshot: ## Run project tests with inline snapshot
@ -51,16 +51,16 @@ slim-build: ## with power of docker-slim build smaller and safer images
.PHONY: docker-feed-database
docker-feed-database: ## create database objects and insert data
docker compose exec db psql devdb user -f /home/gx/code/shakespeare_work.sql | true
docker compose exec db psql devdb user -f /home/gx/code/shakespeare_chapter.sql | true
docker compose exec db psql devdb user -f /home/gx/code/shakespeare_wordform.sql | true
docker compose exec db psql devdb user -f /home/gx/code/shakespeare_character.sql | true
docker compose exec db psql devdb user -f /home/gx/code/shakespeare_paragraph.sql | true
docker compose exec db psql devdb user -f /home/gx/code/shakespeare_character_work.sql
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_work.sql | true
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_chapter.sql | true
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_wordform.sql | true
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_character.sql | true
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_paragraph.sql | true
docker compose exec db psql devdb devdb -f /home/gx/code/shakespeare_character_work.sql
.PHONY: model-generate
model-generate: ## generate sqlalchemy models from database
poetry run sqlacodegen --generator declarative postgresql://user:secret@0.0.0.0/devdb --outfile models.py --schemas shakespeare
poetry run sqlacodegen --generator declarative postgresql://devdb:secret@0.0.0.0/devdb --outfile models.py --schemas shakespeare --options nobidi
.PHONY: docker-up-granian
docker-up-granian: ## Run project with compose and granian

View File

@ -1,17 +1,17 @@
"""
"""init
Revision ID: 68cd4c3a0af0
Revision ID: 0c69050b5a3e
Revises:
Create Date: 2024-01-02 20:12:46.214651
Create Date: 2024-11-22 12:12:12.343675
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = "68cd4c3a0af0"
revision = "0c69050b5a3e"
down_revision = None
branch_labels = None
depends_on = None

View File

@ -1,5 +1,7 @@
from datetime import datetime
from attrs import define
from sqlalchemy import text
from starlette.types import ASGIApp, Receive, Scope, Send
from apscheduler import AsyncScheduler
@ -20,16 +22,20 @@ async def tick():
return True
@define
class SchedulerMiddleware:
def __init__(
self,
app: ASGIApp,
scheduler: AsyncScheduler,
) -> None:
self.app = app
self.scheduler = scheduler
app: ASGIApp
scheduler: AsyncScheduler
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
"""
Handles the incoming request and schedules tasks if the scope type is 'lifespan'.
Args:
scope (Scope): The ASGI scope dictionary containing request information.
receive (Receive): The ASGI receive callable.
send (Send): The ASGI send callable.
"""
if scope["type"] == "lifespan":
async with self.scheduler:
await self.scheduler.add_schedule(
@ -39,3 +45,4 @@ class SchedulerMiddleware:
await self.app(scope, receive, send)
else:
await self.app(scope, receive, send)