Compare commits

..

No commits in common. "2fdc1e9723bfc4478094462a4ed650947c9d0ef4" and "c7775c78e6d74587a47a7e6c77f67a02e5bbf6a2" have entirely different histories.

4 changed files with 21 additions and 28 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 PYTHONASYNCIODEBUG=1 ENV PYTHONPATH=/home/code/ PYTHONHASHSEED=0
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 -vv docker compose -f compose.yml -f test-compose.yml run --rm app pytest tests --durations=0
.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 devdb -f /home/gx/code/shakespeare_work.sql | true 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_chapter.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_wordform.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_character.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_paragraph.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_character_work.sql docker compose exec db psql devdb user -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://devdb:secret@0.0.0.0/devdb --outfile models.py --schemas shakespeare --options nobidi poetry run sqlacodegen --generator declarative postgresql://user:secret@0.0.0.0/devdb --outfile models.py --schemas shakespeare
.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: 0c69050b5a3e Revision ID: 68cd4c3a0af0
Revises: Revises:
Create Date: 2024-11-22 12:12:12.343675 Create Date: 2024-01-02 20:12:46.214651
""" """
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 = "0c69050b5a3e" revision = "68cd4c3a0af0"
down_revision = None down_revision = None
branch_labels = None branch_labels = None
depends_on = None depends_on = None

View File

@ -1,7 +1,5 @@
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
@ -22,20 +20,16 @@ async def tick():
return True return True
@define
class SchedulerMiddleware: class SchedulerMiddleware:
app: ASGIApp def __init__(
scheduler: AsyncScheduler self,
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(
@ -45,4 +39,3 @@ 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)