engin 0.1.0b3__tar.gz → 0.1.0b4__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 (101) hide show
  1. {engin-0.1.0b3 → engin-0.1.0b4}/PKG-INFO +1 -1
  2. {engin-0.1.0b3 → engin-0.1.0b4}/pyproject.toml +1 -1
  3. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_engin.py +14 -2
  4. {engin-0.1.0b3 → engin-0.1.0b4}/uv.lock +1 -1
  5. {engin-0.1.0b3 → engin-0.1.0b4}/.github/workflows/benchmark.yaml +0 -0
  6. {engin-0.1.0b3 → engin-0.1.0b4}/.github/workflows/check.yaml +0 -0
  7. {engin-0.1.0b3 → engin-0.1.0b4}/.github/workflows/publish.yaml +0 -0
  8. {engin-0.1.0b3 → engin-0.1.0b4}/.gitignore +0 -0
  9. {engin-0.1.0b3 → engin-0.1.0b4}/.readthedocs.yaml +0 -0
  10. {engin-0.1.0b3 → engin-0.1.0b4}/CHANGELOG.md +0 -0
  11. {engin-0.1.0b3 → engin-0.1.0b4}/LICENSE +0 -0
  12. {engin-0.1.0b3 → engin-0.1.0b4}/README.md +0 -0
  13. {engin-0.1.0b3 → engin-0.1.0b4}/docs/concepts/blocks.md +0 -0
  14. {engin-0.1.0b3 → engin-0.1.0b4}/docs/concepts/engin.md +0 -0
  15. {engin-0.1.0b3 → engin-0.1.0b4}/docs/concepts/invocations.md +0 -0
  16. {engin-0.1.0b3 → engin-0.1.0b4}/docs/concepts/lifecycle.md +0 -0
  17. {engin-0.1.0b3 → engin-0.1.0b4}/docs/concepts/providers.md +0 -0
  18. {engin-0.1.0b3 → engin-0.1.0b4}/docs/concepts/supervisor.md +0 -0
  19. {engin-0.1.0b3 → engin-0.1.0b4}/docs/index.md +0 -0
  20. {engin-0.1.0b3 → engin-0.1.0b4}/docs/integrations/fastapi-graph.png +0 -0
  21. {engin-0.1.0b3 → engin-0.1.0b4}/docs/integrations/fastapi.md +0 -0
  22. {engin-0.1.0b3 → engin-0.1.0b4}/docs/js/readthedocs.js +0 -0
  23. {engin-0.1.0b3 → engin-0.1.0b4}/docs/overrides/main.html +0 -0
  24. {engin-0.1.0b3 → engin-0.1.0b4}/docs/reference.md +0 -0
  25. {engin-0.1.0b3 → engin-0.1.0b4}/docs/tutorial.md +0 -0
  26. {engin-0.1.0b3 → engin-0.1.0b4}/examples/__init__.py +0 -0
  27. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/__init__.py +0 -0
  28. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/app.py +0 -0
  29. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/__init__.py +0 -0
  30. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/db/__init__.py +0 -0
  31. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/db/adapaters/__init__.py +0 -0
  32. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/db/adapaters/memory.py +0 -0
  33. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/db/block.py +0 -0
  34. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/db/ports.py +0 -0
  35. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/starlette/__init__.py +0 -0
  36. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/common/starlette/endpoint.py +0 -0
  37. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/features/__init__.py +0 -0
  38. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/features/cats/__init__.py +0 -0
  39. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/features/cats/api/__init__.py +0 -0
  40. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/features/cats/api/get.py +0 -0
  41. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/features/cats/api/post.py +0 -0
  42. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/features/cats/block.py +0 -0
  43. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/features/cats/domain.py +0 -0
  44. {engin-0.1.0b3 → engin-0.1.0b4}/examples/asgi/main.py +0 -0
  45. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/__init__.py +0 -0
  46. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/app.py +0 -0
  47. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/main.py +0 -0
  48. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/__init__.py +0 -0
  49. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/cats/__init__.py +0 -0
  50. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/cats/adapters/__init__.py +0 -0
  51. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/cats/adapters/repository.py +0 -0
  52. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/cats/api.py +0 -0
  53. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/cats/block.py +0 -0
  54. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/cats/domain.py +0 -0
  55. {engin-0.1.0b3 → engin-0.1.0b4}/examples/fastapi/routes/cats/ports.py +0 -0
  56. {engin-0.1.0b3 → engin-0.1.0b4}/examples/simple/__init__.py +0 -0
  57. {engin-0.1.0b3 → engin-0.1.0b4}/examples/simple/main.py +0 -0
  58. {engin-0.1.0b3 → engin-0.1.0b4}/mkdocs.yaml +0 -0
  59. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/__init__.py +0 -0
  60. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_assembler.py +0 -0
  61. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_block.py +0 -0
  62. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_cli/__init__.py +0 -0
  63. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_cli/_common.py +0 -0
  64. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_cli/_graph.html +0 -0
  65. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_cli/_graph.py +0 -0
  66. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_cli/_inspect.py +0 -0
  67. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_dependency.py +0 -0
  68. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_graph.py +0 -0
  69. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_introspect.py +0 -0
  70. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_lifecycle.py +0 -0
  71. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_option.py +0 -0
  72. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_supervisor.py +0 -0
  73. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/_type_utils.py +0 -0
  74. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/exceptions.py +0 -0
  75. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/extensions/__init__.py +0 -0
  76. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/extensions/asgi.py +0 -0
  77. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/extensions/fastapi.py +0 -0
  78. {engin-0.1.0b3 → engin-0.1.0b4}/src/engin/py.typed +0 -0
  79. {engin-0.1.0b3 → engin-0.1.0b4}/tests/__init__.py +0 -0
  80. {engin-0.1.0b3 → engin-0.1.0b4}/tests/acceptance/__init__.py +0 -0
  81. {engin-0.1.0b3 → engin-0.1.0b4}/tests/acceptance/test_engin_signal_handling.py +0 -0
  82. {engin-0.1.0b3 → engin-0.1.0b4}/tests/acceptance/test_error_in_shutdown.py +0 -0
  83. {engin-0.1.0b3 → engin-0.1.0b4}/tests/acceptance/test_error_in_start_up.py +0 -0
  84. {engin-0.1.0b3 → engin-0.1.0b4}/tests/acceptance/test_error_in_supervised_task.py +0 -0
  85. {engin-0.1.0b3 → engin-0.1.0b4}/tests/acceptance/test_fastapi.py +0 -0
  86. {engin-0.1.0b3 → engin-0.1.0b4}/tests/benchmarks/__init__.py +0 -0
  87. {engin-0.1.0b3 → engin-0.1.0b4}/tests/benchmarks/conftest.py +0 -0
  88. {engin-0.1.0b3 → engin-0.1.0b4}/tests/benchmarks/test_bench_assembler.py +0 -0
  89. {engin-0.1.0b3 → engin-0.1.0b4}/tests/cli/__init__.py +0 -0
  90. {engin-0.1.0b3 → engin-0.1.0b4}/tests/cli/test_graph.py +0 -0
  91. {engin-0.1.0b3 → engin-0.1.0b4}/tests/cli/test_inspect.py +0 -0
  92. {engin-0.1.0b3 → engin-0.1.0b4}/tests/conftest.py +0 -0
  93. {engin-0.1.0b3 → engin-0.1.0b4}/tests/deps.py +0 -0
  94. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_assembler.py +0 -0
  95. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_block.py +0 -0
  96. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_dependencies.py +0 -0
  97. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_engin.py +0 -0
  98. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_graph.py +0 -0
  99. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_lifecycle.py +0 -0
  100. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_supervisor.py +0 -0
  101. {engin-0.1.0b3 → engin-0.1.0b4}/tests/test_type_id.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: engin
3
- Version: 0.1.0b3
3
+ Version: 0.1.0b4
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/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "engin"
3
- version = "0.1.0b3"
3
+ version = "0.1.0b4"
4
4
  description = "An async-first modular application framework"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -188,13 +188,25 @@ class Engin:
188
188
  started to return so it is safe to use immediately after.
189
189
  """
190
190
  self._async_context_run_task = asyncio.create_task(self.run())
191
+ wait_tasks = [
192
+ asyncio.create_task(self._start_complete_event.wait()),
193
+ asyncio.create_task(self._stop_complete_event.wait()),
194
+ ]
191
195
  await asyncio.wait(
192
196
  [
193
- asyncio.create_task(self._start_complete_event.wait()),
194
- asyncio.create_task(self._stop_complete_event.wait()),
197
+ self._async_context_run_task, # if a provider errors this will return first
198
+ *wait_tasks,
195
199
  ],
196
200
  return_when=asyncio.FIRST_COMPLETED,
197
201
  )
202
+ for task in wait_tasks:
203
+ task.cancel()
204
+
205
+ # raise the exception from the startup during run
206
+ if self._async_context_run_task.done():
207
+ startup_exception = self._async_context_run_task.exception()
208
+ if startup_exception is not None:
209
+ raise startup_exception
198
210
 
199
211
  async def stop(self) -> None:
200
212
  """
@@ -211,7 +211,7 @@ toml = [
211
211
 
212
212
  [[package]]
213
213
  name = "engin"
214
- version = "0.1.0b2"
214
+ version = "0.1.0b3"
215
215
  source = { editable = "." }
216
216
  dependencies = [
217
217
  { name = "anyio" },
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