diff --git a/src/fastapi/Dockerfile b/src/fastapi/Dockerfile index 1228ff1..f7e575d 100644 --- a/src/fastapi/Dockerfile +++ b/src/fastapi/Dockerfile @@ -9,7 +9,7 @@ RUN pip install poetry \ && poetry config virtualenvs.create false \ && poetry install --no-dev -COPY backend/bin bin -COPY backend/libs libs +COPY bin bin +COPY lib lib COPY entrypoint.sh . RUN chmod +x /opt/app/entrypoint.sh diff --git a/src/fastapi/Makefile b/src/fastapi/Makefile new file mode 100644 index 0000000..91ad0d8 --- /dev/null +++ b/src/fastapi/Makefile @@ -0,0 +1,3 @@ +include ../../common_makefile.mk + +PROJECT_FOLDERS = bin lib tests diff --git a/src/fastapi/Makefile copy b/src/fastapi/Makefile copy new file mode 100644 index 0000000..77f6406 --- /dev/null +++ b/src/fastapi/Makefile copy @@ -0,0 +1,3 @@ +include ../../common_makefile.mk + +PROJECT_FOLDERS = backend tests diff --git a/src/fastapi/backend/bin/__init__.py b/src/fastapi/bin/__init__.py similarity index 100% rename from src/fastapi/backend/bin/__init__.py rename to src/fastapi/bin/__init__.py diff --git a/src/fastapi/backend/bin/__main__.py b/src/fastapi/bin/__main__.py similarity index 77% rename from src/fastapi/backend/bin/__main__.py rename to src/fastapi/bin/__main__.py index 3e55bc2..2710bfb 100644 --- a/src/fastapi/backend/bin/__main__.py +++ b/src/fastapi/bin/__main__.py @@ -1,8 +1,9 @@ import logging + import uvicorn -import libs.app.app as app_module -from libs.app import settings as libs_app_settings +import lib.app.app as app_module +from lib.app import settings as libs_app_settings logger = logging.getLogger(__name__) diff --git a/src/fastapi/backend/libs/__init__.py b/src/fastapi/lib/__init__.py similarity index 100% rename from src/fastapi/backend/libs/__init__.py rename to src/fastapi/lib/__init__.py diff --git a/src/fastapi/backend/libs/api/__init__.py b/src/fastapi/lib/api/__init__.py similarity index 100% rename from src/fastapi/backend/libs/api/__init__.py rename to src/fastapi/lib/api/__init__.py diff --git a/src/fastapi/backend/libs/api/handlers/__init__.py b/src/fastapi/lib/api/handlers/__init__.py similarity index 100% rename from src/fastapi/backend/libs/api/handlers/__init__.py rename to src/fastapi/lib/api/handlers/__init__.py diff --git a/src/fastapi/backend/libs/api/models/__init__.py b/src/fastapi/lib/api/models/__init__.py similarity index 100% rename from src/fastapi/backend/libs/api/models/__init__.py rename to src/fastapi/lib/api/models/__init__.py diff --git a/src/fastapi/backend/libs/api/models/mixins.py b/src/fastapi/lib/api/models/mixins.py similarity index 99% rename from src/fastapi/backend/libs/api/models/mixins.py rename to src/fastapi/lib/api/models/mixins.py index c60b360..84ceb82 100644 --- a/src/fastapi/backend/libs/api/models/mixins.py +++ b/src/fastapi/lib/api/models/mixins.py @@ -24,4 +24,3 @@ class BaseMixin: @declared_attr def updated_at(cls): return Column(DateTime, server_default=sqlalchemy.func.now()) - diff --git a/src/fastapi/backend/libs/api/schemas/__init__.py b/src/fastapi/lib/api/schemas/__init__.py similarity index 100% rename from src/fastapi/backend/libs/api/schemas/__init__.py rename to src/fastapi/lib/api/schemas/__init__.py diff --git a/src/fastapi/backend/libs/api/schemas/entity.py b/src/fastapi/lib/api/schemas/entity.py similarity index 100% rename from src/fastapi/backend/libs/api/schemas/entity.py rename to src/fastapi/lib/api/schemas/entity.py diff --git a/src/fastapi/backend/libs/api/services/__init__.py b/src/fastapi/lib/api/services/__init__.py similarity index 100% rename from src/fastapi/backend/libs/api/services/__init__.py rename to src/fastapi/lib/api/services/__init__.py diff --git a/src/fastapi/backend/libs/api/services/token.py b/src/fastapi/lib/api/services/token.py similarity index 84% rename from src/fastapi/backend/libs/api/services/token.py rename to src/fastapi/lib/api/services/token.py index fb11a5c..876f77a 100644 --- a/src/fastapi/backend/libs/api/services/token.py +++ b/src/fastapi/lib/api/services/token.py @@ -1,12 +1,13 @@ -from fastapi import FastAPI, HTTPException, Security, status -from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from jose import JWTError, jwt -from libs.api.schemas.entity import Token -from libs.app import settings as libs_app_settings from pydantic import ValidationError +from fastapi import FastAPI, HTTPException, Security, status +from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer +from lib.api.schemas.entity import Token +from lib.app import settings as lib_app_settings + app = FastAPI() -settings = libs_app_settings.get_settings() +settings = lib_app_settings.get_settings() security = HTTPBearer() @@ -24,4 +25,3 @@ def get_token_data( status_code=status.HTTP_401_UNAUTHORIZED, detail="Could not validate credentials", ) - diff --git a/src/fastapi/backend/libs/app/__init__.py b/src/fastapi/lib/app/__init__.py similarity index 100% rename from src/fastapi/backend/libs/app/__init__.py rename to src/fastapi/lib/app/__init__.py diff --git a/src/fastapi/backend/libs/app/app.py b/src/fastapi/lib/app/app.py similarity index 95% rename from src/fastapi/backend/libs/app/app.py rename to src/fastapi/lib/app/app.py index fb5e27e..309b0e1 100644 --- a/src/fastapi/backend/libs/app/app.py +++ b/src/fastapi/lib/app/app.py @@ -2,7 +2,7 @@ import logging import logging.config as logging_config import fastapi -import libs.api.handlers as admin_api_handlers +import lib.api.handlers as admin_api_handlers from .logger import LOGGING from .settings import get_settings @@ -29,7 +29,6 @@ class Application: # app.include_router(admin_api_handlers.user_router, prefix="/api/v1/users", tags=["users"]) # app.include_router(admin_api_handlers.movie_router, prefix="/api/v1/movies", tags=["movies"]) - @app.on_event("startup") async def startup_event(): self.logger.info("Starting server") diff --git a/src/fastapi/backend/libs/app/logger.py b/src/fastapi/lib/app/logger.py similarity index 100% rename from src/fastapi/backend/libs/app/logger.py rename to src/fastapi/lib/app/logger.py diff --git a/src/fastapi/backend/libs/app/settings.py b/src/fastapi/lib/app/settings.py similarity index 96% rename from src/fastapi/backend/libs/app/settings.py rename to src/fastapi/lib/app/settings.py index 65602fe..3edbe95 100644 --- a/src/fastapi/backend/libs/app/settings.py +++ b/src/fastapi/lib/app/settings.py @@ -4,7 +4,7 @@ import pydantic_settings from dotenv import load_dotenv from pydantic import Field -load_dotenv('.env.dev') +load_dotenv(".env.dev") class DbSettings(pydantic_settings.BaseSettings): diff --git a/src/fastapi/backend/libs/db/__init__.py b/src/fastapi/lib/db/__init__.py similarity index 100% rename from src/fastapi/backend/libs/db/__init__.py rename to src/fastapi/lib/db/__init__.py diff --git a/src/fastapi/backend/libs/db/base.py b/src/fastapi/lib/db/base.py similarity index 100% rename from src/fastapi/backend/libs/db/base.py rename to src/fastapi/lib/db/base.py diff --git a/src/fastapi/backend/libs/db/postgres.py b/src/fastapi/lib/db/postgres.py similarity index 90% rename from src/fastapi/backend/libs/db/postgres.py rename to src/fastapi/lib/db/postgres.py index f4ebc4d..de48a67 100644 --- a/src/fastapi/backend/libs/db/postgres.py +++ b/src/fastapi/lib/db/postgres.py @@ -1,10 +1,11 @@ import typing -from libs.app import settings as libs_app_settings from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase -settings = libs_app_settings.get_settings() +from lib.app import settings as lib_app_settings + +settings = lib_app_settings.get_settings() # Создаём базовый класс для будущих моделей diff --git a/src/fastapi/poetry.lock b/src/fastapi/poetry.lock index 3212a56..3c43ed0 100644 --- a/src/fastapi/poetry.lock +++ b/src/fastapi/poetry.lock @@ -1050,17 +1050,43 @@ python-versions = ">=3.7" files = [ {file = "SQLAlchemy-2.0.21-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e7dc99b23e33c71d720c4ae37ebb095bebebbd31a24b7d99dfc4753d2803ede"}, {file = "SQLAlchemy-2.0.21-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f0c4ee579acfe6c994637527c386d1c22eb60bc1c1d36d940d8477e482095d4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f7d57a7e140efe69ce2d7b057c3f9a595f98d0bbdfc23fd055efdfbaa46e3a5"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca38746eac23dd7c20bec9278d2058c7ad662b2f1576e4c3dbfcd7c00cc48fa"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3cf229704074bce31f7f47d12883afee3b0a02bb233a0ba45ddbfe542939cca4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fb87f763b5d04a82ae84ccff25554ffd903baafba6698e18ebaf32561f2fe4aa"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-win32.whl", hash = "sha256:89e274604abb1a7fd5c14867a412c9d49c08ccf6ce3e1e04fffc068b5b6499d4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-win_amd64.whl", hash = "sha256:e36339a68126ffb708dc6d1948161cea2a9e85d7d7b0c54f6999853d70d44430"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bf8eebccc66829010f06fbd2b80095d7872991bfe8415098b9fe47deaaa58063"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b977bfce15afa53d9cf6a632482d7968477625f030d86a109f7bdfe8ce3c064a"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ff3dc2f60dbf82c9e599c2915db1526d65415be323464f84de8db3e361ba5b9"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44ac5c89b6896f4740e7091f4a0ff2e62881da80c239dd9408f84f75a293dae9"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:87bf91ebf15258c4701d71dcdd9c4ba39521fb6a37379ea68088ce8cd869b446"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b69f1f754d92eb1cc6b50938359dead36b96a1dcf11a8670bff65fd9b21a4b09"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-win32.whl", hash = "sha256:af520a730d523eab77d754f5cf44cc7dd7ad2d54907adeb3233177eeb22f271b"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-win_amd64.whl", hash = "sha256:141675dae56522126986fa4ca713739d00ed3a6f08f3c2eb92c39c6dfec463ce"}, {file = "SQLAlchemy-2.0.21-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7614f1eab4336df7dd6bee05bc974f2b02c38d3d0c78060c5faa4cd1ca2af3b8"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d59cb9e20d79686aa473e0302e4a82882d7118744d30bb1dfb62d3c47141b3ec"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a95aa0672e3065d43c8aa80080cdd5cc40fe92dc873749e6c1cf23914c4b83af"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8c323813963b2503e54d0944813cd479c10c636e3ee223bcbd7bd478bf53c178"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:419b1276b55925b5ac9b4c7044e999f1787c69761a3c9756dec6e5c225ceca01"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-win32.whl", hash = "sha256:4615623a490e46be85fbaa6335f35cf80e61df0783240afe7d4f544778c315a9"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-win_amd64.whl", hash = "sha256:cca720d05389ab1a5877ff05af96551e58ba65e8dc65582d849ac83ddde3e231"}, {file = "SQLAlchemy-2.0.21-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4eae01faee9f2b17f08885e3f047153ae0416648f8e8c8bd9bc677c5ce64be9"}, {file = "SQLAlchemy-2.0.21-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3eb7c03fe1cd3255811cd4e74db1ab8dca22074d50cd8937edf4ef62d758cdf4"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2d494b6a2a2d05fb99f01b84cc9af9f5f93bf3e1e5dbdafe4bed0c2823584c1"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b19ae41ef26c01a987e49e37c77b9ad060c59f94d3b3efdfdbf4f3daaca7b5fe"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fc6b15465fabccc94bf7e38777d665b6a4f95efd1725049d6184b3a39fd54880"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:014794b60d2021cc8ae0f91d4d0331fe92691ae5467a00841f7130fe877b678e"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-win32.whl", hash = "sha256:0268256a34806e5d1c8f7ee93277d7ea8cc8ae391f487213139018b6805aeaf6"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-win_amd64.whl", hash = "sha256:73c079e21d10ff2be54a4699f55865d4b275fd6c8bd5d90c5b1ef78ae0197301"}, {file = "SQLAlchemy-2.0.21-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:785e2f2c1cb50d0a44e2cdeea5fd36b5bf2d79c481c10f3a88a8be4cfa2c4615"}, {file = "SQLAlchemy-2.0.21-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c111cd40910ffcb615b33605fc8f8e22146aeb7933d06569ac90f219818345ef"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9cba4e7369de663611ce7460a34be48e999e0bbb1feb9130070f0685e9a6b66"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a69067af86ec7f11a8e50ba85544657b1477aabf64fa447fd3736b5a0a4f67"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ccb99c3138c9bde118b51a289d90096a3791658da9aea1754667302ed6564f6e"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:513fd5b6513d37e985eb5b7ed89da5fd9e72354e3523980ef00d439bc549c9e9"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-win32.whl", hash = "sha256:f9fefd6298433b6e9188252f3bff53b9ff0443c8fde27298b8a2b19f6617eeb9"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-win_amd64.whl", hash = "sha256:2e617727fe4091cedb3e4409b39368f424934c7faa78171749f704b49b4bb4ce"}, {file = "SQLAlchemy-2.0.21-py3-none-any.whl", hash = "sha256:ea7da25ee458d8f404b93eb073116156fd7d8c2a776d8311534851f28277b4ce"}, {file = "SQLAlchemy-2.0.21.tar.gz", hash = "sha256:05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258"}, ] diff --git a/src/fastapi/poetry.toml b/src/fastapi/poetry.toml new file mode 100644 index 0000000..53b35d3 --- /dev/null +++ b/src/fastapi/poetry.toml @@ -0,0 +1,3 @@ +[virtualenvs] +create = true +in-project = true diff --git a/src/fastapi/pyproject.toml b/src/fastapi/pyproject.toml index 0af4e6c..0d3267b 100644 --- a/src/fastapi/pyproject.toml +++ b/src/fastapi/pyproject.toml @@ -6,7 +6,6 @@ requires = ["poetry-core"] line-length = 120 target-version = ['py311'] - [tool.isort] known_first_party = ["backend", "tests"] line_length = 120 @@ -21,16 +20,16 @@ readme = "README.md" version = "0.1.0" [tool.poetry.dependencies] -python = "^3.11" -fastapi = "0.103.1" -sqlalchemy = "^2.0.20" alembic = "^1.12.0" asyncpg = "^0.28.0" +fastapi = "0.103.1" psycopg2 = "^2.9.7" -python-jose = "^3.3.0" -uvicorn = "^0.23.2" pydantic = {extras = ["email"], version = "^2.3.0"} pydantic-settings = "^2.0.3" +python = "^3.11" +python-jose = "^3.3.0" +sqlalchemy = "^2.0.20" +uvicorn = "^0.23.2" [tool.poetry.dev-dependencies] black = "^23.7.0" @@ -86,7 +85,6 @@ variable-rgx = "^_{0,2}[a-z][a-z0-9_]*$" exclude = [ ".venv" ] - pythonPlatform = "All" pythonVersion = "3.11" reportConstantRedefenition = "none"