fastapi-factory-utilities 0.4.1__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fastapi-factory-utilities might be problematic. Click here for more details.
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/PKG-INFO +3 -2
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/pyproject.toml +2 -1
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/__init__.py +1 -1
- fastapi_factory_utilities-0.5.0/src/fastapi_factory_utilities/core/exceptions.py +79 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/__init__.py +4 -2
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/builder.py +2 -2
- fastapi_factory_utilities-0.5.0/src/fastapi_factory_utilities/core/plugins/odm_plugin/helpers.py +16 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/yaml_reader.py +1 -1
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/app.py +2 -1
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/__init__.py +1 -1
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/books/__init__.py +1 -1
- fastapi_factory_utilities-0.4.1/src/fastapi_factory_utilities/core/exceptions.py +0 -52
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/LICENSE +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/README.md +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/__main__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/tags.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/v1/sys/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/v1/sys/health.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/v1/sys/readiness.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/__init__.py +4 -4
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/application.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/builder.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/config.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/enums.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/fastapi_builder.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/plugin_manager/__init__.py +1 -1
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/plugin_manager/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/plugin_manager/plugin_manager.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/example/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/httpx_plugin/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/configs.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/depends.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/documents.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/repositories.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/__init__.py +1 -1
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/builder.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/configs.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/helpers.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/protocols.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/security/jwt.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/security/kratos.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/objects.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/services.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/enums.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/objects.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/services.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/__init__.py +2 -2
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/enums.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/health_calculator_strategies.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/readiness_calculator_strategies.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/services.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/types.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/configs.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/importlib.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/log.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/status.py +1 -1
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/uvicorn.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/__main__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/books/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/books/responses.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/books/routes.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/application.yaml +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/entities.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/enums.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/types.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/books/document.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/books/repository.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/services/books/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/services/books/services.py +0 -0
- {fastapi_factory_utilities-0.4.1 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/py.typed +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi_factory_utilities
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Consolidate libraries and utilities to create microservices in Python with FastAPI, Beanie, Httpx, AioPika and OpenTelemetry.
|
|
5
5
|
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Keywords: python,fastapi,beanie,httpx,opentelemetry,microservices
|
|
7
8
|
Author: miragecentury
|
|
8
9
|
Author-email: victorien.vanroye@gmail.com
|
|
@@ -3,7 +3,7 @@ name = "fastapi_factory_utilities"
|
|
|
3
3
|
homepage = "https://github.com/miragecentury/fastapi_factory_utilities"
|
|
4
4
|
repository = "https://github.com/miragecentury/fastapi_factory_utilities"
|
|
5
5
|
keywords = ["python", "fastapi", "beanie", "httpx", "opentelemetry", "microservices"]
|
|
6
|
-
version = "0.
|
|
6
|
+
version = "0.5.0"
|
|
7
7
|
description = "Consolidate libraries and utilities to create microservices in Python with FastAPI, Beanie, Httpx, AioPika and OpenTelemetry."
|
|
8
8
|
authors = ["miragecentury <victorien.vanroye@gmail.com>"]
|
|
9
9
|
maintainers = ["miragecentury <victorien.vanroye@gmail.com>"]
|
|
@@ -88,6 +88,7 @@ addopts = "--import-mode=importlib -n auto --color=yes"
|
|
|
88
88
|
filterwarnings = [
|
|
89
89
|
"ignore:.*datetime.datetime.utcfromtimestamp().*:DeprecationWarning", # reactivex
|
|
90
90
|
"ignore:.*datetime.datetime.utcnow().*:DeprecationWarning", # reactivex
|
|
91
|
+
"ignore::pydantic.warnings.PydanticDeprecatedSince211",
|
|
91
92
|
]
|
|
92
93
|
asyncio_mode = "auto"
|
|
93
94
|
asyncio_default_fixture_loop_scope = "function"
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""FastAPI Factory Utilities exceptions."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from collections.abc import Sequence
|
|
5
|
+
from typing import NotRequired, TypedDict, Unpack
|
|
6
|
+
|
|
7
|
+
from opentelemetry.trace import Span, get_current_span
|
|
8
|
+
from opentelemetry.util.types import AttributeValue
|
|
9
|
+
from structlog.stdlib import BoundLogger, get_logger
|
|
10
|
+
|
|
11
|
+
_logger: BoundLogger = get_logger()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ExceptionParameters(TypedDict):
|
|
15
|
+
"""Parameters for the exception."""
|
|
16
|
+
|
|
17
|
+
message: NotRequired[str]
|
|
18
|
+
level: NotRequired[int]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class FastAPIFactoryUtilitiesError(Exception):
|
|
22
|
+
"""Base exception for the FastAPI Factory Utilities."""
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
*args: object,
|
|
27
|
+
**kwargs: Unpack[ExceptionParameters],
|
|
28
|
+
) -> None:
|
|
29
|
+
"""Instantiate the exception.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
*args: The arguments.
|
|
33
|
+
message: The message.
|
|
34
|
+
level: The logging level.
|
|
35
|
+
**kwargs: The keyword arguments.
|
|
36
|
+
|
|
37
|
+
"""
|
|
38
|
+
# Extract the message and the level from the kwargs if they are present
|
|
39
|
+
self.message: str | None = kwargs.pop("message", None)
|
|
40
|
+
self.level: int = kwargs.pop("level", logging.ERROR)
|
|
41
|
+
|
|
42
|
+
# If the message is not present, try to extract it from the args
|
|
43
|
+
if self.message is None and len(args) > 0 and isinstance(args[0], str):
|
|
44
|
+
self.message = args[0]
|
|
45
|
+
|
|
46
|
+
# Log the Exception
|
|
47
|
+
if self.message:
|
|
48
|
+
_logger.log(level=self.level, event=self.message)
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
# Propagate the exception
|
|
52
|
+
span: Span = get_current_span()
|
|
53
|
+
# If not otel is setup, INVALID_SPAN is retrieved from get_current_span
|
|
54
|
+
# and it will respond False to the is_recording method
|
|
55
|
+
if span.is_recording():
|
|
56
|
+
span.record_exception(self)
|
|
57
|
+
for key, value in kwargs.items():
|
|
58
|
+
attribute_value: AttributeValue
|
|
59
|
+
if not isinstance(value, (str, bool, int, float, Sequence)):
|
|
60
|
+
attribute_value = str(value)
|
|
61
|
+
else:
|
|
62
|
+
attribute_value = value
|
|
63
|
+
span.set_attribute(key, attribute_value)
|
|
64
|
+
except Exception: # pylint: disable=broad-exception-caught
|
|
65
|
+
# Suppress any errors that occur while propagating the exception
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
# Call the parent class
|
|
69
|
+
super().__init__(*args)
|
|
70
|
+
|
|
71
|
+
def __str__(self) -> str:
|
|
72
|
+
"""Return the string representation of the exception.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
str: The message if available, otherwise the default exception string.
|
|
76
|
+
"""
|
|
77
|
+
if self.message is not None:
|
|
78
|
+
return self.message
|
|
79
|
+
return super().__str__()
|
|
@@ -25,6 +25,7 @@ from .builder import ODMBuilder
|
|
|
25
25
|
from .depends import depends_odm_client, depends_odm_database
|
|
26
26
|
from .documents import BaseDocument
|
|
27
27
|
from .exceptions import OperationError, UnableToCreateEntityDueToDuplicateKeyError
|
|
28
|
+
from .helpers import PersistedEntity
|
|
28
29
|
from .repositories import AbstractRepository
|
|
29
30
|
|
|
30
31
|
_logger: BoundLogger = get_logger()
|
|
@@ -94,7 +95,7 @@ async def on_startup(
|
|
|
94
95
|
|
|
95
96
|
if odm_factory.odm_database is None or odm_factory.odm_client is None:
|
|
96
97
|
_logger.error(
|
|
97
|
-
f"ODM plugin failed to start. Database: {odm_factory.odm_database} -
|
|
98
|
+
f"ODM plugin failed to start. Database: {odm_factory.odm_database} - Client: {odm_factory.odm_client}"
|
|
98
99
|
)
|
|
99
100
|
# TODO: Report the error to the status_service
|
|
100
101
|
# this will report the application as unhealthy
|
|
@@ -160,9 +161,10 @@ async def on_shutdown(application: ApplicationAbstractProtocol) -> None:
|
|
|
160
161
|
|
|
161
162
|
|
|
162
163
|
__all__: list[str] = [
|
|
163
|
-
"BaseDocument",
|
|
164
164
|
"AbstractRepository",
|
|
165
|
+
"BaseDocument",
|
|
165
166
|
"OperationError",
|
|
167
|
+
"PersistedEntity",
|
|
166
168
|
"UnableToCreateEntityDueToDuplicateKeyError",
|
|
167
169
|
"depends_odm_client",
|
|
168
170
|
"depends_odm_database",
|
|
@@ -215,7 +215,7 @@ class ODMBuilder:
|
|
|
215
215
|
|
|
216
216
|
if self._odm_client is None:
|
|
217
217
|
raise ODMPluginConfigError(
|
|
218
|
-
"ODM client is not set. Provide the ODM client using
|
|
218
|
+
"ODM client is not set. Provide the ODM client using build_client method or through parameter."
|
|
219
219
|
)
|
|
220
220
|
|
|
221
221
|
self._odm_database = self._odm_client.get_database(
|
|
@@ -250,7 +250,7 @@ class ODMBuilder:
|
|
|
250
250
|
"""
|
|
251
251
|
if self._odm_client is None:
|
|
252
252
|
raise ODMPluginConfigError(
|
|
253
|
-
"ODM client is not set. Provide the ODM client using
|
|
253
|
+
"ODM client is not set. Provide the ODM client using build_client method or through parameter."
|
|
254
254
|
)
|
|
255
255
|
|
|
256
256
|
try:
|
fastapi_factory_utilities-0.5.0/src/fastapi_factory_utilities/core/plugins/odm_plugin/helpers.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""Helper functions for ODM plugins."""
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
4
|
+
import uuid
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PersistedEntity(BaseModel):
|
|
10
|
+
"""Base class for persisted entities."""
|
|
11
|
+
|
|
12
|
+
id: uuid.UUID = Field(default_factory=uuid.uuid4)
|
|
13
|
+
|
|
14
|
+
revision_id: uuid.UUID | None = Field(default=None)
|
|
15
|
+
created_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
|
|
16
|
+
updated_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
|
|
@@ -72,7 +72,7 @@ class YamlFileReader:
|
|
|
72
72
|
try:
|
|
73
73
|
yaml_data = yaml_data[key]
|
|
74
74
|
except KeyError:
|
|
75
|
-
logger.warning(f"Base key {key}
|
|
75
|
+
logger.warning(f"Base key {key} not found in YAML file" + " from {self._yaml_base_key}")
|
|
76
76
|
return dict()
|
|
77
77
|
return yaml_data
|
|
78
78
|
|
|
@@ -31,7 +31,8 @@ class App(ApplicationAbstract):
|
|
|
31
31
|
def configure(self) -> None:
|
|
32
32
|
"""Configure the application."""
|
|
33
33
|
# Prevent circular import
|
|
34
|
-
|
|
34
|
+
# pylint: disable=import-outside-toplevel
|
|
35
|
+
from .api import api_router # noqa: PLC0415
|
|
35
36
|
|
|
36
37
|
self.get_asgi_app().include_router(router=api_router)
|
|
37
38
|
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"""FastAPI Factory Utilities exceptions."""
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
from collections.abc import Sequence
|
|
5
|
-
from typing import Any
|
|
6
|
-
|
|
7
|
-
from opentelemetry.trace import Span, get_current_span
|
|
8
|
-
from opentelemetry.util.types import AttributeValue
|
|
9
|
-
from structlog.stdlib import BoundLogger, get_logger
|
|
10
|
-
|
|
11
|
-
_logger: BoundLogger = get_logger()
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class FastAPIFactoryUtilitiesError(Exception):
|
|
15
|
-
"""Base exception for the FastAPI Factory Utilities."""
|
|
16
|
-
|
|
17
|
-
def __init__(
|
|
18
|
-
self,
|
|
19
|
-
*args: tuple[Any],
|
|
20
|
-
message: str | None = None,
|
|
21
|
-
level: int = logging.ERROR,
|
|
22
|
-
**kwargs: dict[str, Any],
|
|
23
|
-
) -> None:
|
|
24
|
-
"""Instanciate the exception.
|
|
25
|
-
|
|
26
|
-
Args:
|
|
27
|
-
*args (Tuple[Any]): The arguments.
|
|
28
|
-
message (str | None): The message.
|
|
29
|
-
level (int): The logging level.
|
|
30
|
-
**kwargs (dict[str, Any]): The keyword arguments
|
|
31
|
-
"""
|
|
32
|
-
# Log the Exception
|
|
33
|
-
if message:
|
|
34
|
-
_logger.log(level=level, event=message)
|
|
35
|
-
self.message = message
|
|
36
|
-
self.level = level
|
|
37
|
-
args = (message, *args) # type: ignore
|
|
38
|
-
# Propagate the exception
|
|
39
|
-
span: Span = get_current_span()
|
|
40
|
-
# If not otel is setup, INVALID_SPAN is retrive from get_current_span
|
|
41
|
-
# and it will respond False to the is_recording method
|
|
42
|
-
if span.is_recording():
|
|
43
|
-
span.record_exception(self)
|
|
44
|
-
for key, value in kwargs.items():
|
|
45
|
-
attribute_value: AttributeValue
|
|
46
|
-
if not isinstance(value, (str, bool, int, float, Sequence)):
|
|
47
|
-
attribute_value = str(value)
|
|
48
|
-
else:
|
|
49
|
-
attribute_value = value
|
|
50
|
-
span.set_attribute(key, attribute_value)
|
|
51
|
-
# Call the parent class
|
|
52
|
-
super().__init__(*args)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -12,12 +12,12 @@ from .config import (
|
|
|
12
12
|
from .enums import EnvironmentEnum
|
|
13
13
|
|
|
14
14
|
__all__: list[str] = [
|
|
15
|
-
"BaseApplicationConfig",
|
|
16
|
-
"EnvironmentEnum",
|
|
17
15
|
"ApplicationAbstract",
|
|
18
16
|
"ApplicationGenericBuilder",
|
|
19
|
-
"
|
|
20
|
-
"HttpServiceDependencyConfig",
|
|
17
|
+
"BaseApplicationConfig",
|
|
21
18
|
"DependencyConfig",
|
|
19
|
+
"EnvironmentEnum",
|
|
20
|
+
"HttpServiceDependencyConfig",
|
|
21
|
+
"RootConfig",
|
|
22
22
|
"depends_dependency_config",
|
|
23
23
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -20,8 +20,8 @@ from .exceptions import OpenTelemetryPluginBaseException, OpenTelemetryPluginCon
|
|
|
20
20
|
__all__: list[str] = [
|
|
21
21
|
"OpenTelemetryConfig",
|
|
22
22
|
"OpenTelemetryPluginBaseException",
|
|
23
|
-
"OpenTelemetryPluginConfigError",
|
|
24
23
|
"OpenTelemetryPluginBuilder",
|
|
24
|
+
"OpenTelemetryPluginConfigError",
|
|
25
25
|
]
|
|
26
26
|
|
|
27
27
|
_logger: BoundLogger = get_logger()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -5,10 +5,10 @@ from .services import StatusService
|
|
|
5
5
|
from .types import ComponentInstanceType, Status
|
|
6
6
|
|
|
7
7
|
__all__: list[str] = [
|
|
8
|
-
"ComponentTypeEnum",
|
|
9
8
|
"ComponentInstanceType",
|
|
9
|
+
"ComponentTypeEnum",
|
|
10
10
|
"HealthStatusEnum",
|
|
11
11
|
"ReadinessStatusEnum",
|
|
12
|
-
"StatusService",
|
|
13
12
|
"Status",
|
|
13
|
+
"StatusService",
|
|
14
14
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|