diff --git a/src/fastapi/lib/api/services/token.py b/src/fastapi/lib/api/services/token.py deleted file mode 100644 index 876f77a..0000000 --- a/src/fastapi/lib/api/services/token.py +++ /dev/null @@ -1,27 +0,0 @@ -from jose import JWTError, jwt -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 = lib_app_settings.get_settings() - -security = HTTPBearer() - - -def get_token_data( - authorization: HTTPAuthorizationCredentials = Security(security), -) -> Token: - token = authorization.credentials - try: - secret_key = settings.jwt_secret_key - payload = jwt.decode(token, secret_key, algorithms=["HS256"]) - return Token(**payload) - except (JWTError, ValidationError): - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="Could not validate credentials", - ) diff --git a/src/fastapi/.dockerignore b/src/fastapi_app/.dockerignore similarity index 100% rename from src/fastapi/.dockerignore rename to src/fastapi_app/.dockerignore diff --git a/src/fastapi/.env.example b/src/fastapi_app/.env.example similarity index 100% rename from src/fastapi/.env.example rename to src/fastapi_app/.env.example diff --git a/src/fastapi/Dockerfile b/src/fastapi_app/Dockerfile similarity index 100% rename from src/fastapi/Dockerfile rename to src/fastapi_app/Dockerfile diff --git a/src/fastapi/Makefile b/src/fastapi_app/Makefile similarity index 100% rename from src/fastapi/Makefile rename to src/fastapi_app/Makefile diff --git a/src/fastapi/bin/__init__.py b/src/fastapi_app/bin/__init__.py similarity index 100% rename from src/fastapi/bin/__init__.py rename to src/fastapi_app/bin/__init__.py diff --git a/src/fastapi/bin/__main__.py b/src/fastapi_app/bin/__main__.py similarity index 74% rename from src/fastapi/bin/__main__.py rename to src/fastapi_app/bin/__main__.py index 2710bfb..56f3fd8 100644 --- a/src/fastapi/bin/__main__.py +++ b/src/fastapi_app/bin/__main__.py @@ -1,16 +1,15 @@ import logging -import uvicorn - import lib.app.app as app_module -from lib.app import settings as libs_app_settings +import uvicorn +from lib.app import settings as app_settings logger = logging.getLogger(__name__) app_instance = app_module.Application() app = app_instance.create_app() -settings = libs_app_settings.get_settings() +settings = app_settings.get_settings() if __name__ == "__main__": diff --git a/src/fastapi/docker-compose.dev.yml b/src/fastapi_app/docker-compose.dev.yml similarity index 77% rename from src/fastapi/docker-compose.dev.yml rename to src/fastapi_app/docker-compose.dev.yml index 4fd8fed..283ac0b 100644 --- a/src/fastapi/docker-compose.dev.yml +++ b/src/fastapi_app/docker-compose.dev.yml @@ -10,7 +10,7 @@ services: env_file: - .env ports: - - "${db_port}:5432" + - "${db_port}:{db_port}" volumes: - postgres_data:/var/lib/postgresql/data/ restart: always @@ -20,12 +20,12 @@ services: api: build: context: . - container_name: fastapi + container_name: fastapi_app image: fastapi_app restart: always entrypoint: ["/opt/app/entrypoint.sh"] ports: - - "${server_port}:5432" + - "${server_port}:{server_port}" depends_on: - db env_file: @@ -45,15 +45,6 @@ services: networks: - api_network - redis: - image: redis:7.0.11 - restart: always - command: redis-server --bind 0.0.0.0 - ports: - - "6379:6379" - networks: - - backend_network - volumes: postgres_data: diff --git a/src/fastapi/docker-compose.yml b/src/fastapi_app/docker-compose.yml similarity index 81% rename from src/fastapi/docker-compose.yml rename to src/fastapi_app/docker-compose.yml index 4a0f62d..88a2117 100644 --- a/src/fastapi/docker-compose.yml +++ b/src/fastapi_app/docker-compose.yml @@ -10,7 +10,7 @@ services: env_file: - .env ports: - - "127.0.0.1:${db_port}:5432" + - "127.0.0.1:${db_port}:{db_port}" volumes: - postgres_data:/var/lib/postgresql/data/ restart: always @@ -20,7 +20,7 @@ services: api: build: context: . - container_name: fastapi + container_name: fastapi_app image: fastapi_app restart: always entrypoint: ["/opt/app/entrypoint.sh"] @@ -43,13 +43,6 @@ services: networks: - api_network - redis: - image: redis:7.0.11 - restart: always - command: redis-server --bind 0.0.0.0 - networks: - - backend_network - volumes: postgres_data: diff --git a/src/fastapi/entrypoint.sh b/src/fastapi_app/entrypoint.sh similarity index 100% rename from src/fastapi/entrypoint.sh rename to src/fastapi_app/entrypoint.sh diff --git a/src/fastapi/lib/__init__.py b/src/fastapi_app/lib/__init__.py similarity index 100% rename from src/fastapi/lib/__init__.py rename to src/fastapi_app/lib/__init__.py diff --git a/src/fastapi/lib/api/__init__.py b/src/fastapi_app/lib/api/__init__.py similarity index 100% rename from src/fastapi/lib/api/__init__.py rename to src/fastapi_app/lib/api/__init__.py diff --git a/src/fastapi/lib/api/handlers/__init__.py b/src/fastapi_app/lib/api/handlers/__init__.py similarity index 100% rename from src/fastapi/lib/api/handlers/__init__.py rename to src/fastapi_app/lib/api/handlers/__init__.py diff --git a/src/fastapi/lib/api/models/__init__.py b/src/fastapi_app/lib/api/models/__init__.py similarity index 100% rename from src/fastapi/lib/api/models/__init__.py rename to src/fastapi_app/lib/api/models/__init__.py diff --git a/src/fastapi/lib/api/models/mixins.py b/src/fastapi_app/lib/api/models/mixins.py similarity index 65% rename from src/fastapi/lib/api/models/mixins.py rename to src/fastapi_app/lib/api/models/mixins.py index 84ceb82..3380a9f 100644 --- a/src/fastapi/lib/api/models/mixins.py +++ b/src/fastapi_app/lib/api/models/mixins.py @@ -1,7 +1,6 @@ import uuid import sqlalchemy -from sqlalchemy import Column, DateTime from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.ext.declarative import declared_attr @@ -9,7 +8,7 @@ from sqlalchemy.ext.declarative import declared_attr class BaseMixin: @declared_attr def id(cls): - return Column( + return sqlalchemy.Column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, @@ -19,8 +18,8 @@ class BaseMixin: @declared_attr def created_at(cls): - return Column(DateTime, server_default=sqlalchemy.func.now()) + return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()) @declared_attr def updated_at(cls): - return Column(DateTime, server_default=sqlalchemy.func.now()) + return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()) diff --git a/src/fastapi/lib/api/schemas/__init__.py b/src/fastapi_app/lib/api/schemas/__init__.py similarity index 100% rename from src/fastapi/lib/api/schemas/__init__.py rename to src/fastapi_app/lib/api/schemas/__init__.py diff --git a/src/fastapi/lib/api/schemas/entity.py b/src/fastapi_app/lib/api/schemas/entity.py similarity index 100% rename from src/fastapi/lib/api/schemas/entity.py rename to src/fastapi_app/lib/api/schemas/entity.py diff --git a/src/fastapi/lib/api/services/__init__.py b/src/fastapi_app/lib/api/services/__init__.py similarity index 100% rename from src/fastapi/lib/api/services/__init__.py rename to src/fastapi_app/lib/api/services/__init__.py diff --git a/src/fastapi_app/lib/api/services/token.py b/src/fastapi_app/lib/api/services/token.py new file mode 100644 index 0000000..5d0dedb --- /dev/null +++ b/src/fastapi_app/lib/api/services/token.py @@ -0,0 +1,27 @@ +import fastapi + +from jose import JWTError, jwt +from pydantic import ValidationError + +from lib.api import schemas as app_schemas +from lib.app import settings as app_settings + +app = fastapi.FastAPI() +settings = app_settings.get_settings() + +security = fastapi.security.HTTPBearer() + + +def get_token_data( + authorization: fastapi.security.HTTPAuthorizationCredentials = fastapi.Security(security), +) -> app_schemas.entity.Token: + token = authorization.credentials + try: + secret_key = settings.jwt_secret_key + payload = jwt.decode(token, secret_key, algorithms=["HS256"]) + return app_schemas.entity.Token(**payload) + except (JWTError, ValidationError): + raise fastapi.HTTPException( + status_code=fastapi.status.HTTP_401_UNAUTHORIZED, + detail="Could not validate credentials", + ) diff --git a/src/fastapi/lib/app/__init__.py b/src/fastapi_app/lib/app/__init__.py similarity index 100% rename from src/fastapi/lib/app/__init__.py rename to src/fastapi_app/lib/app/__init__.py diff --git a/src/fastapi/lib/app/app.py b/src/fastapi_app/lib/app/app.py similarity index 99% rename from src/fastapi/lib/app/app.py rename to src/fastapi_app/lib/app/app.py index 309b0e1..eab3d5b 100644 --- a/src/fastapi/lib/app/app.py +++ b/src/fastapi_app/lib/app/app.py @@ -1,9 +1,10 @@ import logging import logging.config as logging_config -import fastapi import lib.api.handlers as admin_api_handlers +import fastapi + from .logger import LOGGING from .settings import get_settings diff --git a/src/fastapi/lib/app/logger.py b/src/fastapi_app/lib/app/logger.py similarity index 100% rename from src/fastapi/lib/app/logger.py rename to src/fastapi_app/lib/app/logger.py diff --git a/src/fastapi/lib/app/settings.py b/src/fastapi_app/lib/app/settings.py similarity index 100% rename from src/fastapi/lib/app/settings.py rename to src/fastapi_app/lib/app/settings.py diff --git a/src/fastapi/lib/db/__init__.py b/src/fastapi_app/lib/db/__init__.py similarity index 100% rename from src/fastapi/lib/db/__init__.py rename to src/fastapi_app/lib/db/__init__.py diff --git a/src/fastapi/lib/db/base.py b/src/fastapi_app/lib/db/base.py similarity index 100% rename from src/fastapi/lib/db/base.py rename to src/fastapi_app/lib/db/base.py diff --git a/src/fastapi/lib/db/postgres.py b/src/fastapi_app/lib/db/postgres.py similarity index 91% rename from src/fastapi/lib/db/postgres.py rename to src/fastapi_app/lib/db/postgres.py index de48a67..1ad8e1b 100644 --- a/src/fastapi/lib/db/postgres.py +++ b/src/fastapi_app/lib/db/postgres.py @@ -1,11 +1,10 @@ import typing +from lib.app import settings as app_settings from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase -from lib.app import settings as lib_app_settings - -settings = lib_app_settings.get_settings() +settings = app_settings.get_settings() # Создаём базовый класс для будущих моделей diff --git a/src/fastapi/nginx/conf.d/site.conf b/src/fastapi_app/nginx/conf.d/site.conf similarity index 100% rename from src/fastapi/nginx/conf.d/site.conf rename to src/fastapi_app/nginx/conf.d/site.conf diff --git a/src/fastapi/nginx/mime.types b/src/fastapi_app/nginx/mime.types similarity index 100% rename from src/fastapi/nginx/mime.types rename to src/fastapi_app/nginx/mime.types diff --git a/src/fastapi/nginx/nginx.conf b/src/fastapi_app/nginx/nginx.conf similarity index 100% rename from src/fastapi/nginx/nginx.conf rename to src/fastapi_app/nginx/nginx.conf diff --git a/src/fastapi/poetry.lock b/src/fastapi_app/poetry.lock similarity index 100% rename from src/fastapi/poetry.lock rename to src/fastapi_app/poetry.lock diff --git a/src/fastapi/poetry.toml b/src/fastapi_app/poetry.toml similarity index 100% rename from src/fastapi/poetry.toml rename to src/fastapi_app/poetry.toml diff --git a/src/fastapi/pyproject.toml b/src/fastapi_app/pyproject.toml similarity index 100% rename from src/fastapi/pyproject.toml rename to src/fastapi_app/pyproject.toml diff --git a/src/fastapi/tests/__init__.py b/src/fastapi_app/tests/__init__.py similarity index 100% rename from src/fastapi/tests/__init__.py rename to src/fastapi_app/tests/__init__.py diff --git a/src/fastapi_example/backend/main.py b/src/fastapi_example/backend/main.py index 001934a..b4c126a 100644 --- a/src/fastapi_example/backend/main.py +++ b/src/fastapi_example/backend/main.py @@ -1,10 +1,9 @@ import logging -import faker - import backend.user.handlers as user_handlers import backend.user.repositories as user_repositories import backend.user.services as user_services +import faker logger = logging.getLogger(__name__) @@ -12,7 +11,9 @@ logger = logging.getLogger(__name__) class App: def __init__(self): self._faker_client = faker.Faker() - self._user_faker_client2 = user_repositories.UserFakerClient2(self._faker_client) + self._user_faker_client2 = user_repositories.UserFakerClient2( + self._faker_client + ) self._user_service = user_services.UserService(self._user_faker_client2) self._handler1 = user_handlers.UserHandler1(self._user_service) @@ -28,7 +29,7 @@ class App: del self._faker_client -if __name__ == "__main__.py": +if __name__ == "__main__": app = App() try: app.run() diff --git a/src/python-service/bin/main/__main__.py b/src/python-service/bin/main/__main__.py index 77f0dd2..82dab4d 100644 --- a/src/python-service/bin/main/__main__.py +++ b/src/python-service/bin/main/__main__.py @@ -33,5 +33,5 @@ def main() -> None: exit(os.EX_SOFTWARE) -if __name__ == "__main__.py": +if __name__ == "__main__": main() diff --git a/src/python-service/lib/api/rest/v1/health/liveness_probe.py b/src/python-service/lib/api/rest/v1/health/liveness_probe.py index de6f89a..3c7cb4f 100644 --- a/src/python-service/lib/api/rest/v1/health/liveness_probe.py +++ b/src/python-service/lib/api/rest/v1/health/liveness_probe.py @@ -1,7 +1,6 @@ import json import aiohttp.web as aiohttp_web - import lib.utils.aiohttp as aiohttp_utils diff --git a/src/python-service/lib/app/app.py b/src/python-service/lib/app/app.py index e92f80f..c92b262 100644 --- a/src/python-service/lib/app/app.py +++ b/src/python-service/lib/app/app.py @@ -4,11 +4,10 @@ import logging import typing import aiohttp.web as aiohttp_web -import typing_extensions - import lib.api.rest.v1.health as health_handlers import lib.app.errors as app_errors import lib.app.settings as app_settings +import typing_extensions logger = logging.getLogger(__name__) @@ -103,7 +102,9 @@ class Application: logger.info("HTTP server has been interrupted") except BaseException as unexpected_error: logger.exception("HTTP server failed to start") - raise app_errors.StartServerError("HTTP server failed to start") from unexpected_error + raise app_errors.StartServerError( + "HTTP server failed to start" + ) from unexpected_error async def dispose(self) -> None: logger.info("Application is shutting down...") @@ -121,7 +122,9 @@ class Application: if len(dispose_errors) != 0: logger.error("Application has shut down with errors") - raise app_errors.DisposeError("Application has shut down with errors, see logs above") + raise app_errors.DisposeError( + "Application has shut down with errors, see logs above" + ) logger.info("Application has successfully shut down")