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 FROM install AS app-image
ENV PYTHONPATH=/home/code/ PYTHONHASHSEED=0 ENV PYTHONPATH=/home/code/ PYTHONHASHSEED=0 PYTHONASYNCIODEBUG=1
COPY tests/ tests/ COPY tests/ tests/
COPY app/ app/ COPY app/ app/

View File

@ -27,7 +27,7 @@ docker-create-db-migration: ## Create new alembic database migration aka databa
.PHONY: docker-test .PHONY: docker-test
docker-test: ## Run project tests 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 .PHONY: docker-test-snapshot
docker-test-snapshot: ## Run project tests with inline 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 .PHONY: docker-feed-database
docker-feed-database: ## create database objects and insert data 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 devdb -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 devdb -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 devdb -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 devdb -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 devdb -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_character_work.sql
.PHONY: model-generate .PHONY: model-generate
model-generate: ## generate sqlalchemy models from database 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 .PHONY: docker-up-granian
docker-up-granian: ## Run project with compose and granian docker-up-granian: ## Run project with compose and granian

View File

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

View File

@ -1,5 +1,7 @@
from datetime import datetime from datetime import datetime
from attrs import define
from sqlalchemy import text from sqlalchemy import text
from starlette.types import ASGIApp, Receive, Scope, Send from starlette.types import ASGIApp, Receive, Scope, Send
from apscheduler import AsyncScheduler from apscheduler import AsyncScheduler
@ -20,16 +22,20 @@ async def tick():
return True return True
@define
class SchedulerMiddleware: class SchedulerMiddleware:
def __init__( app: ASGIApp
self, scheduler: AsyncScheduler
app: ASGIApp,
scheduler: AsyncScheduler,
) -> None:
self.app = app
self.scheduler = scheduler
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: 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": if scope["type"] == "lifespan":
async with self.scheduler: async with self.scheduler:
await self.scheduler.add_schedule( await self.scheduler.add_schedule(
@ -39,3 +45,4 @@ class SchedulerMiddleware:
await self.app(scope, receive, send) await self.app(scope, receive, send)
else: else:
await self.app(scope, receive, send) await self.app(scope, receive, send)