From e1a720fdb5c3aea6e2048ef19e65036ec73a80f1 Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Wed, 27 Sep 2023 17:43:48 +0200 Subject: [PATCH 1/8] add basic schemas & add health handler in user-app --- sapphire/common/api/schemas/__init__.py | 10 ++++++++++ sapphire/common/api/schemas/base.py | 11 +++++++++++ sapphire/common/api/schemas/enums.py | 15 +++++++++++++++ sapphire/users/api/v1beta/health.py | 15 +++++++++++++-- 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 sapphire/common/api/schemas/__init__.py create mode 100644 sapphire/common/api/schemas/base.py create mode 100644 sapphire/common/api/schemas/enums.py diff --git a/sapphire/common/api/schemas/__init__.py b/sapphire/common/api/schemas/__init__.py new file mode 100644 index 00000000..5c56ad14 --- /dev/null +++ b/sapphire/common/api/schemas/__init__.py @@ -0,0 +1,10 @@ +from .enums import ResponseStatus, ServiceName +from .base import OKResponse, HealthResponse + + +__all__ = [ + "ResponseStatus", + "ServiceName", + "OKResponse", + "HealthResponse", +] diff --git a/sapphire/common/api/schemas/base.py b/sapphire/common/api/schemas/base.py new file mode 100644 index 00000000..b86c8bec --- /dev/null +++ b/sapphire/common/api/schemas/base.py @@ -0,0 +1,11 @@ +from pydantic import BaseModel +from .enums import ResponseStatus, ServiceName + + +class OKResponse(BaseModel): + status: ResponseStatus = ResponseStatus.OK + + +class HealthResponse(OKResponse): + version: str + name: ServiceName diff --git a/sapphire/common/api/schemas/enums.py b/sapphire/common/api/schemas/enums.py new file mode 100644 index 00000000..eef3d7aa --- /dev/null +++ b/sapphire/common/api/schemas/enums.py @@ -0,0 +1,15 @@ +from enum import Enum + + +class ResponseStatus(Enum): + OK = "ok" + ERROR = "error" + + +class ServiceName(Enum): + EMAIL = "email" + MESSENGER = "messenger" + NOTIFICATIONS = "notifications" + PROJECTS = "projects" + STORAGE = "storage" + USERS = "users" diff --git a/sapphire/users/api/v1beta/health.py b/sapphire/users/api/v1beta/health.py index 18e2fed6..397d1e54 100644 --- a/sapphire/users/api/v1beta/health.py +++ b/sapphire/users/api/v1beta/health.py @@ -1,2 +1,13 @@ -async def health(): - pass +import tomllib +import pathlib +import os + +from sapphire.common.api.schemas import HealthResponse, ServiceName + + +async def health() -> HealthResponse: + path_to_toml_file = pathlib.Path(os.curdir).absolute() / "pyproject.toml" + with open(path_to_toml_file, "rb") as toml_file: + pyproject_data = tomllib.load(toml_file) + + return HealthResponse(version=pyproject_data.get("tool").get("poetry").get("version"), name=ServiceName.USERS) From 351c8dc364fa1ca445d38d8dfa34680872b2a38c Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Wed, 27 Sep 2023 18:00:20 +0200 Subject: [PATCH 2/8] refactor code --- sapphire/common/api/schemas/__init__.py | 3 +-- sapphire/common/api/schemas/base.py | 1 + sapphire/users/api/v1beta/health.py | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/sapphire/common/api/schemas/__init__.py b/sapphire/common/api/schemas/__init__.py index 5c56ad14..c535576d 100644 --- a/sapphire/common/api/schemas/__init__.py +++ b/sapphire/common/api/schemas/__init__.py @@ -1,6 +1,5 @@ +from .base import HealthResponse, OKResponse from .enums import ResponseStatus, ServiceName -from .base import OKResponse, HealthResponse - __all__ = [ "ResponseStatus", diff --git a/sapphire/common/api/schemas/base.py b/sapphire/common/api/schemas/base.py index b86c8bec..33d85a4f 100644 --- a/sapphire/common/api/schemas/base.py +++ b/sapphire/common/api/schemas/base.py @@ -1,4 +1,5 @@ from pydantic import BaseModel + from .enums import ResponseStatus, ServiceName diff --git a/sapphire/users/api/v1beta/health.py b/sapphire/users/api/v1beta/health.py index 397d1e54..8ac35722 100644 --- a/sapphire/users/api/v1beta/health.py +++ b/sapphire/users/api/v1beta/health.py @@ -1,6 +1,6 @@ -import tomllib -import pathlib import os +import pathlib +import tomllib from sapphire.common.api.schemas import HealthResponse, ServiceName @@ -10,4 +10,7 @@ async def health() -> HealthResponse: with open(path_to_toml_file, "rb") as toml_file: pyproject_data = tomllib.load(toml_file) - return HealthResponse(version=pyproject_data.get("tool").get("poetry").get("version"), name=ServiceName.USERS) + return HealthResponse( + version=pyproject_data.get("tool").get("poetry").get("version"), + name=ServiceName.USERS, + ) From 6cfbc4cd36a19749a019f467fd6a0b5512ffcdd1 Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Wed, 27 Sep 2023 18:11:37 +0200 Subject: [PATCH 3/8] refactor schemas --- sapphire/common/api/schemas/__init__.py | 3 ++- sapphire/common/api/schemas/base.py | 6 +++++- sapphire/users/api/v1beta/health.py | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sapphire/common/api/schemas/__init__.py b/sapphire/common/api/schemas/__init__.py index c535576d..8bfb4839 100644 --- a/sapphire/common/api/schemas/__init__.py +++ b/sapphire/common/api/schemas/__init__.py @@ -1,9 +1,10 @@ -from .base import HealthResponse, OKResponse +from .base import BaseResponse, HealthResponse, OKResponse from .enums import ResponseStatus, ServiceName __all__ = [ "ResponseStatus", "ServiceName", "OKResponse", + "BaseResponse", "HealthResponse", ] diff --git a/sapphire/common/api/schemas/base.py b/sapphire/common/api/schemas/base.py index 33d85a4f..f5744365 100644 --- a/sapphire/common/api/schemas/base.py +++ b/sapphire/common/api/schemas/base.py @@ -3,10 +3,14 @@ from .enums import ResponseStatus, ServiceName +class BaseResponse(BaseModel): + status: ResponseStatus + + class OKResponse(BaseModel): status: ResponseStatus = ResponseStatus.OK -class HealthResponse(OKResponse): +class HealthResponse(BaseResponse): version: str name: ServiceName diff --git a/sapphire/users/api/v1beta/health.py b/sapphire/users/api/v1beta/health.py index 8ac35722..d3aa961d 100644 --- a/sapphire/users/api/v1beta/health.py +++ b/sapphire/users/api/v1beta/health.py @@ -2,7 +2,7 @@ import pathlib import tomllib -from sapphire.common.api.schemas import HealthResponse, ServiceName +from sapphire.common.api.schemas import HealthResponse, ResponseStatus, ServiceName async def health() -> HealthResponse: @@ -11,6 +11,7 @@ async def health() -> HealthResponse: pyproject_data = tomllib.load(toml_file) return HealthResponse( + status=ResponseStatus.OK, version=pyproject_data.get("tool").get("poetry").get("version"), name=ServiceName.USERS, ) From 2021b8ffdb8ba45f89b46a91ccdd3df3ad8d20cf Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Thu, 28 Sep 2023 19:24:39 +0200 Subject: [PATCH 4/8] task/29 remove ServiceName enumerate --- sapphire/common/api/schemas/__init__.py | 3 +-- sapphire/common/api/schemas/base.py | 4 ++-- sapphire/common/api/schemas/enums.py | 9 --------- sapphire/users/api/v1beta/health.py | 6 +++--- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/sapphire/common/api/schemas/__init__.py b/sapphire/common/api/schemas/__init__.py index 8bfb4839..46baf16e 100644 --- a/sapphire/common/api/schemas/__init__.py +++ b/sapphire/common/api/schemas/__init__.py @@ -1,9 +1,8 @@ from .base import BaseResponse, HealthResponse, OKResponse -from .enums import ResponseStatus, ServiceName +from .enums import ResponseStatus __all__ = [ "ResponseStatus", - "ServiceName", "OKResponse", "BaseResponse", "HealthResponse", diff --git a/sapphire/common/api/schemas/base.py b/sapphire/common/api/schemas/base.py index f5744365..0e296edf 100644 --- a/sapphire/common/api/schemas/base.py +++ b/sapphire/common/api/schemas/base.py @@ -1,6 +1,6 @@ from pydantic import BaseModel -from .enums import ResponseStatus, ServiceName +from .enums import ResponseStatus class BaseResponse(BaseModel): @@ -13,4 +13,4 @@ class OKResponse(BaseModel): class HealthResponse(BaseResponse): version: str - name: ServiceName + name: str diff --git a/sapphire/common/api/schemas/enums.py b/sapphire/common/api/schemas/enums.py index eef3d7aa..9eb2f33f 100644 --- a/sapphire/common/api/schemas/enums.py +++ b/sapphire/common/api/schemas/enums.py @@ -4,12 +4,3 @@ class ResponseStatus(Enum): OK = "ok" ERROR = "error" - - -class ServiceName(Enum): - EMAIL = "email" - MESSENGER = "messenger" - NOTIFICATIONS = "notifications" - PROJECTS = "projects" - STORAGE = "storage" - USERS = "users" diff --git a/sapphire/users/api/v1beta/health.py b/sapphire/users/api/v1beta/health.py index d3aa961d..15c7ef6b 100644 --- a/sapphire/users/api/v1beta/health.py +++ b/sapphire/users/api/v1beta/health.py @@ -2,7 +2,7 @@ import pathlib import tomllib -from sapphire.common.api.schemas import HealthResponse, ResponseStatus, ServiceName +from sapphire.common.api.schemas import HealthResponse, ResponseStatus async def health() -> HealthResponse: @@ -12,6 +12,6 @@ async def health() -> HealthResponse: return HealthResponse( status=ResponseStatus.OK, - version=pyproject_data.get("tool").get("poetry").get("version"), - name=ServiceName.USERS, + version=pyproject_data["tool"]["poetry"]["version"], + name="users", ) From 59e58827dca67b0ea51afa654b1a1f547e89ccc7 Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Fri, 29 Sep 2023 11:10:34 +0200 Subject: [PATCH 5/8] task/29 create fucn for parsing toml file --- sapphire/users/api/v1beta/health.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sapphire/users/api/v1beta/health.py b/sapphire/users/api/v1beta/health.py index 15c7ef6b..b2c457b5 100644 --- a/sapphire/users/api/v1beta/health.py +++ b/sapphire/users/api/v1beta/health.py @@ -1,10 +1,19 @@ import os import pathlib import tomllib +from functools import reduce from sapphire.common.api.schemas import HealthResponse, ResponseStatus +def get_nested(storage: dict, *keys): + return reduce( + lambda value, key: value.get(key, {}) if isinstance(value, dict) else None, + keys, + storage, + ) + + async def health() -> HealthResponse: path_to_toml_file = pathlib.Path(os.curdir).absolute() / "pyproject.toml" with open(path_to_toml_file, "rb") as toml_file: @@ -12,6 +21,6 @@ async def health() -> HealthResponse: return HealthResponse( status=ResponseStatus.OK, - version=pyproject_data["tool"]["poetry"]["version"], + version=get_nested(pyproject_data, "tool", "poetry", "version"), name="users", ) From e623698d0785b8df85aab1309809870331019714 Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Fri, 29 Sep 2023 17:38:30 +0200 Subject: [PATCH 6/8] task/29 make common functions file --- sapphire/common/__init__.py | 0 sapphire/common/functions.py | 9 +++++++++ sapphire/users/api/v1beta/health.py | 10 +--------- 3 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 sapphire/common/__init__.py create mode 100644 sapphire/common/functions.py diff --git a/sapphire/common/__init__.py b/sapphire/common/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sapphire/common/functions.py b/sapphire/common/functions.py new file mode 100644 index 00000000..f72723da --- /dev/null +++ b/sapphire/common/functions.py @@ -0,0 +1,9 @@ +from functools import reduce + + +def get_nested(storage: dict, *keys): + return reduce( + lambda value, key: value.get(key, {}) if isinstance(value, dict) else None, + keys, + storage, + ) diff --git a/sapphire/users/api/v1beta/health.py b/sapphire/users/api/v1beta/health.py index b2c457b5..6e6311ff 100644 --- a/sapphire/users/api/v1beta/health.py +++ b/sapphire/users/api/v1beta/health.py @@ -1,17 +1,9 @@ import os import pathlib import tomllib -from functools import reduce from sapphire.common.api.schemas import HealthResponse, ResponseStatus - - -def get_nested(storage: dict, *keys): - return reduce( - lambda value, key: value.get(key, {}) if isinstance(value, dict) else None, - keys, - storage, - ) +from sapphire.common.functions import get_nested async def health() -> HealthResponse: From 8741324221a2c0e0b8340fd637a70b6a0902ef16 Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Fri, 29 Sep 2023 18:25:30 +0200 Subject: [PATCH 7/8] task/29 fix lint --- sapphire/common/broker/service.py | 8 ++++---- sapphire/common/database/service.py | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/sapphire/common/broker/service.py b/sapphire/common/broker/service.py index 0a31f51d..036f6ef9 100644 --- a/sapphire/common/broker/service.py +++ b/sapphire/common/broker/service.py @@ -8,10 +8,10 @@ class BaseBrokerService(ServiceMixin): def __init__( - self, - servers: Iterable[str], - topics: Iterable[str], - handlers: Iterable[BaseBrokerHandler], + self, + servers: Iterable[str], + topics: Iterable[str], + handlers: Iterable[BaseBrokerHandler], ): self._handlers = handlers diff --git a/sapphire/common/database/service.py b/sapphire/common/database/service.py index ccb025d9..70c88c48 100644 --- a/sapphire/common/database/service.py +++ b/sapphire/common/database/service.py @@ -17,7 +17,7 @@ def get_alembic_config_path(self) -> pathlib.Path: def get_alembic_config(self) -> AlembicConfig: migrations_path = self.get_alembic_config_path() - + config = AlembicConfig() config.set_main_option("script_location", str(migrations_path)) config.set_main_option("sqlalchemy.url", self._dsn) @@ -28,4 +28,6 @@ def migrate(self): alembic_command.upgrade(self.get_alembic_config(), "head") def create_migration(self, message: str | None = None): - alembic_command.revision(self.get_alembic_config(), message=message, autogenerate=True) + alembic_command.revision( + self.get_alembic_config(), message=message, autogenerate=True + ) From 8080b6a382616cd8d812df191ae6ee44bfd4d4f8 Mon Sep 17 00:00:00 2001 From: vanvanich9 Date: Fri, 29 Sep 2023 19:36:29 +0200 Subject: [PATCH 8/8] task/29 move to another file health response --- sapphire/common/api/schemas/__init__.py | 3 ++- sapphire/common/api/schemas/base.py | 5 ----- sapphire/common/api/schemas/health.py | 6 ++++++ 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 sapphire/common/api/schemas/health.py diff --git a/sapphire/common/api/schemas/__init__.py b/sapphire/common/api/schemas/__init__.py index 46baf16e..27d9dada 100644 --- a/sapphire/common/api/schemas/__init__.py +++ b/sapphire/common/api/schemas/__init__.py @@ -1,5 +1,6 @@ -from .base import BaseResponse, HealthResponse, OKResponse +from .base import BaseResponse, OKResponse from .enums import ResponseStatus +from .health import HealthResponse __all__ = [ "ResponseStatus", diff --git a/sapphire/common/api/schemas/base.py b/sapphire/common/api/schemas/base.py index 0e296edf..3a18a330 100644 --- a/sapphire/common/api/schemas/base.py +++ b/sapphire/common/api/schemas/base.py @@ -9,8 +9,3 @@ class BaseResponse(BaseModel): class OKResponse(BaseModel): status: ResponseStatus = ResponseStatus.OK - - -class HealthResponse(BaseResponse): - version: str - name: str diff --git a/sapphire/common/api/schemas/health.py b/sapphire/common/api/schemas/health.py new file mode 100644 index 00000000..6ee3e1ec --- /dev/null +++ b/sapphire/common/api/schemas/health.py @@ -0,0 +1,6 @@ +from .base import BaseResponse + + +class HealthResponse(BaseResponse): + version: str + name: str