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.
Files changed (82) hide show
  1. {engin-0.0.12 → engin-0.0.13}/CHANGELOG.md +7 -0
  2. {engin-0.0.12 → engin-0.0.13}/PKG-INFO +1 -1
  3. {engin-0.0.12 → engin-0.0.13}/mkdocs.yaml +1 -1
  4. {engin-0.0.12 → engin-0.0.13}/pyproject.toml +1 -1
  5. {engin-0.0.12 → engin-0.0.13}/src/engin/_type_utils.py +3 -2
  6. {engin-0.0.12 → engin-0.0.13}/tests/test_utils.py +7 -0
  7. {engin-0.0.12 → engin-0.0.13}/uv.lock +1 -1
  8. {engin-0.0.12 → engin-0.0.13}/.github/workflows/check.yaml +0 -0
  9. {engin-0.0.12 → engin-0.0.13}/.github/workflows/publish.yaml +0 -0
  10. {engin-0.0.12 → engin-0.0.13}/.gitignore +0 -0
  11. {engin-0.0.12 → engin-0.0.13}/.readthedocs.yaml +0 -0
  12. {engin-0.0.12 → engin-0.0.13}/LICENSE +0 -0
  13. {engin-0.0.12 → engin-0.0.13}/README.md +0 -0
  14. {engin-0.0.12 → engin-0.0.13}/docs/concepts/engin.md +0 -0
  15. {engin-0.0.12 → engin-0.0.13}/docs/concepts/invocations.md +0 -0
  16. {engin-0.0.12 → engin-0.0.13}/docs/concepts/lifecycle.md +0 -0
  17. {engin-0.0.12 → engin-0.0.13}/docs/concepts/providers.md +0 -0
  18. {engin-0.0.12 → engin-0.0.13}/docs/getting-started.md +0 -0
  19. {engin-0.0.12 → engin-0.0.13}/docs/guides/dependency_injection.md +0 -0
  20. {engin-0.0.12 → engin-0.0.13}/docs/guides/fastapi-graph.png +0 -0
  21. {engin-0.0.12 → engin-0.0.13}/docs/guides/fastapi.md +0 -0
  22. {engin-0.0.12 → engin-0.0.13}/docs/index.md +0 -0
  23. {engin-0.0.12 → engin-0.0.13}/docs/js/readthedocs.js +0 -0
  24. {engin-0.0.12 → engin-0.0.13}/docs/overrides/main.html +0 -0
  25. {engin-0.0.12 → engin-0.0.13}/docs/reference.md +0 -0
  26. {engin-0.0.12 → engin-0.0.13}/examples/__init__.py +0 -0
  27. {engin-0.0.12 → engin-0.0.13}/examples/asgi/__init__.py +0 -0
  28. {engin-0.0.12 → engin-0.0.13}/examples/asgi/app.py +0 -0
  29. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/__init__.py +0 -0
  30. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/__init__.py +0 -0
  31. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/adapaters/__init__.py +0 -0
  32. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/adapaters/memory.py +0 -0
  33. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/block.py +0 -0
  34. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/db/ports.py +0 -0
  35. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/starlette/__init__.py +0 -0
  36. {engin-0.0.12 → engin-0.0.13}/examples/asgi/common/starlette/endpoint.py +0 -0
  37. {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/__init__.py +0 -0
  38. {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/__init__.py +0 -0
  39. {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/api/__init__.py +0 -0
  40. {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/api/get.py +0 -0
  41. {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/api/post.py +0 -0
  42. {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/block.py +0 -0
  43. {engin-0.0.12 → engin-0.0.13}/examples/asgi/features/cats/domain.py +0 -0
  44. {engin-0.0.12 → engin-0.0.13}/examples/asgi/main.py +0 -0
  45. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/__init__.py +0 -0
  46. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/app.py +0 -0
  47. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/main.py +0 -0
  48. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/__init__.py +0 -0
  49. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/__init__.py +0 -0
  50. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/adapters/__init__.py +0 -0
  51. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/adapters/repository.py +0 -0
  52. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/api.py +0 -0
  53. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/block.py +0 -0
  54. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/domain.py +0 -0
  55. {engin-0.0.12 → engin-0.0.13}/examples/fastapi/routes/cats/ports.py +0 -0
  56. {engin-0.0.12 → engin-0.0.13}/examples/simple/__init__.py +0 -0
  57. {engin-0.0.12 → engin-0.0.13}/examples/simple/main.py +0 -0
  58. {engin-0.0.12 → engin-0.0.13}/src/engin/__init__.py +0 -0
  59. {engin-0.0.12 → engin-0.0.13}/src/engin/_assembler.py +0 -0
  60. {engin-0.0.12 → engin-0.0.13}/src/engin/_block.py +0 -0
  61. {engin-0.0.12 → engin-0.0.13}/src/engin/_dependency.py +0 -0
  62. {engin-0.0.12 → engin-0.0.13}/src/engin/_engin.py +0 -0
  63. {engin-0.0.12 → engin-0.0.13}/src/engin/_exceptions.py +0 -0
  64. {engin-0.0.12 → engin-0.0.13}/src/engin/_graph.py +0 -0
  65. {engin-0.0.12 → engin-0.0.13}/src/engin/_lifecycle.py +0 -0
  66. {engin-0.0.12 → engin-0.0.13}/src/engin/ext/__init__.py +0 -0
  67. {engin-0.0.12 → engin-0.0.13}/src/engin/ext/asgi.py +0 -0
  68. {engin-0.0.12 → engin-0.0.13}/src/engin/ext/fastapi.py +0 -0
  69. {engin-0.0.12 → engin-0.0.13}/src/engin/py.typed +0 -0
  70. {engin-0.0.12 → engin-0.0.13}/src/engin/scripts/__init__.py +0 -0
  71. {engin-0.0.12 → engin-0.0.13}/src/engin/scripts/graph.py +0 -0
  72. {engin-0.0.12 → engin-0.0.13}/tests/__init__.py +0 -0
  73. {engin-0.0.12 → engin-0.0.13}/tests/acceptance/__init__.py +0 -0
  74. {engin-0.0.12 → engin-0.0.13}/tests/acceptance/test_error_in_shutdown.py +0 -0
  75. {engin-0.0.12 → engin-0.0.13}/tests/acceptance/test_error_in_start_up.py +0 -0
  76. {engin-0.0.12 → engin-0.0.13}/tests/acceptance/test_fastapi.py +0 -0
  77. {engin-0.0.12 → engin-0.0.13}/tests/conftest.py +0 -0
  78. {engin-0.0.12 → engin-0.0.13}/tests/deps.py +0 -0
  79. {engin-0.0.12 → engin-0.0.13}/tests/test_assembler.py +0 -0
  80. {engin-0.0.12 → engin-0.0.13}/tests/test_dependencies.py +0 -0
  81. {engin-0.0.12 → engin-0.0.13}/tests/test_engin.py +0 -0
  82. {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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: engin
3
- Version: 0.0.12
3
+ Version: 0.0.13
4
4
  Summary: An async-first modular application framework
5
5
  Project-URL: Homepage, https://github.com/invokermain/engin
6
6
  Project-URL: Documentation, https://engin.readthedocs.io/en/latest/
@@ -57,7 +57,7 @@ plugins:
57
57
  show_signature_annotations: true
58
58
  show_source: false
59
59
  signature_crossrefs: true
60
- import:
60
+ inventories:
61
61
  - url: https://docs.python.org/3/objects.inv
62
62
  domains: [py, std]
63
63
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "engin"
3
- version = "0.0.12"
3
+ version = "0.0.13"
4
4
  description = "An async-first modular application framework"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -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]"
@@ -206,7 +206,7 @@ toml = [
206
206
 
207
207
  [[package]]
208
208
  name = "engin"
209
- version = "0.0.12"
209
+ version = "0.0.13"
210
210
  source = { editable = "." }
211
211
 
212
212
  [package.dev-dependencies]
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