engin 0.0.12__tar.gz → 0.0.13__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.
- {engin-0.0.12 → engin-0.0.13}/CHANGELOG.md +7 -0
- {engin-0.0.12 → engin-0.0.13}/PKG-INFO +1 -1
- {engin-0.0.12 → engin-0.0.13}/mkdocs.yaml +1 -1
- {engin-0.0.12 → engin-0.0.13}/pyproject.toml +1 -1
- {engin-0.0.12 → engin-0.0.13}/src/engin/_type_utils.py +3 -2
- {engin-0.0.12 → engin-0.0.13}/tests/test_utils.py +7 -0
- {engin-0.0.12 → engin-0.0.13}/uv.lock +1 -1
- {engin-0.0.12 → engin-0.0.13}/.github/workflows/check.yaml +0 -0
- {engin-0.0.12 → engin-0.0.13}/.github/workflows/publish.yaml +0 -0
- {engin-0.0.12 → engin-0.0.13}/.gitignore +0 -0
- {engin-0.0.12 → engin-0.0.13}/.readthedocs.yaml +0 -0
- {engin-0.0.12 → engin-0.0.13}/LICENSE +0 -0
- {engin-0.0.12 → engin-0.0.13}/README.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/concepts/engin.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/concepts/invocations.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/concepts/lifecycle.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/concepts/providers.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/getting-started.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/guides/dependency_injection.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/guides/fastapi-graph.png +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/guides/fastapi.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/index.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/js/readthedocs.js +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/overrides/main.html +0 -0
- {engin-0.0.12 → engin-0.0.13}/docs/reference.md +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/app.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/adapaters/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/adapaters/memory.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/block.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/ports.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/starlette/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/starlette/endpoint.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/api/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/api/get.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/api/post.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/block.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/domain.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/asgi/main.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/app.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/main.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/adapters/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/adapters/repository.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/api.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/block.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/domain.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/ports.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/simple/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/examples/simple/main.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/_assembler.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/_block.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/_dependency.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/_engin.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/_exceptions.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/_graph.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/_lifecycle.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/ext/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/ext/asgi.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/ext/fastapi.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/py.typed +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/scripts/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/src/engin/scripts/graph.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/acceptance/__init__.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/acceptance/test_error_in_shutdown.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/acceptance/test_error_in_start_up.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/acceptance/test_fastapi.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/conftest.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/deps.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/test_assembler.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/test_dependencies.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/test_engin.py +0 -0
- {engin-0.0.12 → engin-0.0.13}/tests/test_modules.py +0 -0
@@ -6,6 +6,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
8
|
|
9
|
+
## [0.0.13] - 2025-03-12
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
|
13
|
+
- `Provide` now supports union types.
|
14
|
+
|
15
|
+
|
9
16
|
## [0.0.12] - 2025-03-03
|
10
17
|
|
11
18
|
### Added
|
@@ -1,8 +1,9 @@
|
|
1
1
|
import typing
|
2
2
|
from dataclasses import dataclass
|
3
|
+
from types import UnionType
|
3
4
|
from typing import Any
|
4
5
|
|
5
|
-
_implict_modules = ["builtins", "typing", "collections.abc"]
|
6
|
+
_implict_modules = ["builtins", "typing", "collections.abc", "types"]
|
6
7
|
|
7
8
|
|
8
9
|
@dataclass(frozen=True, eq=True, slots=True)
|
@@ -43,7 +44,7 @@ class TypeId:
|
|
43
44
|
def _args_to_str(type_: Any) -> str:
|
44
45
|
args = typing.get_args(type_)
|
45
46
|
if args:
|
46
|
-
arg_str = f"{type_.__name__}["
|
47
|
+
arg_str = "Union[" if isinstance(type_, UnionType) else f"{type_.__name__}["
|
47
48
|
for idx, arg in enumerate(args):
|
48
49
|
if isinstance(arg, list):
|
49
50
|
arg_str += "["
|
@@ -60,3 +60,10 @@ def test_type_id_of_complex_annotation():
|
|
60
60
|
type_id = type_id_of(annotated)
|
61
61
|
assert type_id == TypeId(type=Annotated[Callable[[int], str], "Activity"], multi=False)
|
62
62
|
assert str(type_id) == "Annotated[Callable[[int], str], Activity]"
|
63
|
+
|
64
|
+
|
65
|
+
def test_type_id_of_union():
|
66
|
+
union = int | str
|
67
|
+
type_id = type_id_of(union)
|
68
|
+
assert type_id == TypeId(type=int | str, multi=False)
|
69
|
+
assert str(type_id) == "Union[int, str]"
|
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
|