From 19cc8b5eea486445547ac16aba213764d21e2bac Mon Sep 17 00:00:00 2001 From: Kurbanov Bulat Date: Fri, 3 Dec 2021 23:27:20 +0300 Subject: [PATCH] Add pagination and build.dockerfile --- docker/build.dockerfile | 35 +++++++++++++++++++++++++++++++++++ requirements.txt | 2 +- scripts/start_production.sh | 3 +++ src/app/views.py | 9 ++++++--- 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 docker/build.dockerfile create mode 100644 scripts/start_production.sh diff --git a/docker/build.dockerfile b/docker/build.dockerfile new file mode 100644 index 0000000..21e3701 --- /dev/null +++ b/docker/build.dockerfile @@ -0,0 +1,35 @@ +FROM python:3.10-slim as build-image + +RUN apt-get update \ + && apt-get install --no-install-recommends -y gcc build-essential python3-dev libpq-dev libffi-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /root/venv +COPY ./requirements.txt /root/venv/ + +ENV VENV_PATH=/opt/venv + +RUN python -m venv $VENV_PATH \ + && . /opt/venv/bin/activate \ + && pip install -r requirements.txt --no-cache-dir + + +FROM python:3.10-slim as runtime-image + +RUN apt-get update \ + && apt-get install --no-install-recommends -y python3-dev libpq-dev libffi-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY ./src/ /app/ + +ENV VENV_PATH=/opt/venv +COPY --from=build-image $VENV_PATH $VENV_PATH +ENV PATH="$VENV_PATH/bin:$PATH" + +COPY ./scripts/start_production.sh /root/ + +EXPOSE 8080 + +CMD bash /root/start_production.sh diff --git a/requirements.txt b/requirements.txt index 8ca5e16..2200c52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,6 @@ fastapi-pagination pydantic alembic ormar -uvicorn +uvicorn[standart] asyncpg psycopg2 diff --git a/scripts/start_production.sh b/scripts/start_production.sh new file mode 100644 index 0000000..4b02d41 --- /dev/null +++ b/scripts/start_production.sh @@ -0,0 +1,3 @@ +cd /app +alembic -c ./app/alembic.ini upgrade head +uvicorn main:app --host="0.0.0.0" --port="8080" diff --git a/src/app/views.py b/src/app/views.py index d716b05..c1f1066 100644 --- a/src/app/views.py +++ b/src/app/views.py @@ -1,4 +1,7 @@ -from fastapi import APIRouter, HTTPException, status +from fastapi import APIRouter, HTTPException, status, Depends + +from fastapi_pagination import Page, Params +from fastapi_pagination.ext.ormar import paginate from app.serializers import UserCreateOrUpdate, UserDetail, LanguageDetail from app.models import User, Language @@ -13,9 +16,9 @@ users_router = APIRouter( ) -@users_router.get("/", response_model=list[UserDetail]) +@users_router.get("/", dependencies=[Depends(Params)], response_model=Page[UserDetail]) async def get_users(): - return await User.objects.select_related("allowed_langs").all() + return await paginate(User.objects.select_related("allowed_langs")) @users_router.get("/{user_id}", response_model=UserDetail)