mirror of
https://github.com/grillazz/fastapi-sqlalchemy-asyncpg.git
synced 2025-08-26 16:40:40 +03:00
Compare commits
4 Commits
c7775c78e6
...
2fdc1e9723
Author | SHA1 | Date | |
---|---|---|---|
|
2fdc1e9723 | ||
|
dd619e70ce | ||
|
a7c70079b0 | ||
|
488dd4612e |
@ -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/
|
||||||
|
16
Makefile
16
Makefile
@ -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
|
||||||
|
@ -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
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user