fastapi-factory-utilities 0.4.2__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.2 → fastapi_factory_utilities-0.5.0}/PKG-INFO +3 -2
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/pyproject.toml +2 -1
- fastapi_factory_utilities-0.5.0/src/fastapi_factory_utilities/core/exceptions.py +79 -0
- fastapi_factory_utilities-0.4.2/src/fastapi_factory_utilities/core/exceptions.py +0 -52
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/LICENSE +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/README.md +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/__main__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/tags.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/v1/sys/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/v1/sys/health.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/api/v1/sys/readiness.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/application.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/builder.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/config.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/enums.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/fastapi_builder.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/plugin_manager/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/plugin_manager/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/app/plugin_manager/plugin_manager.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/example/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/httpx_plugin/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/builder.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/configs.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/depends.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/documents.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/helpers.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/odm_plugin/repositories.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/builder.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/configs.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/plugins/opentelemetry_plugin/helpers.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/protocols.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/security/jwt.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/security/kratos.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/objects.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/hydra/services.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/enums.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/objects.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/kratos/services.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/enums.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/exceptions.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/health_calculator_strategies.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/readiness_calculator_strategies.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/services.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/services/status/types.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/configs.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/importlib.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/log.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/status.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/uvicorn.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/core/utils/yaml_reader.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/__main__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/books/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/books/responses.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/api/books/routes.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/app.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/application.yaml +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/entities.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/enums.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/entities/books/types.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/books/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/books/document.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/models/books/repository.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/services/books/__init__.py +0 -0
- {fastapi_factory_utilities-0.4.2 → fastapi_factory_utilities-0.5.0}/src/fastapi_factory_utilities/example/services/books/services.py +0 -0
- {fastapi_factory_utilities-0.4.2 → 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__()
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|