orionis 0.479.0__tar.gz → 0.481.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.
Files changed (530) hide show
  1. {orionis-0.479.0/orionis.egg-info → orionis-0.481.0}/PKG-INFO +1 -1
  2. orionis-0.481.0/orionis/console/commands/scheduler_work.py +88 -0
  3. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/commands/test.py +16 -9
  4. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/core/reactor.py +5 -3
  5. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/kernel.py +1 -1
  6. orionis-0.481.0/orionis/console/tasks/exception_report.py +94 -0
  7. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/tasks/schedule.py +66 -12
  8. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/container.py +33 -22
  9. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/facades/facade.py +3 -2
  10. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/application.py +10 -5
  11. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/roots/paths.py +0 -1
  12. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/contracts/application.py +2 -2
  13. orionis-0.481.0/orionis/foundation/providers/scheduler_provider.py +51 -0
  14. {orionis-0.479.0 → orionis-0.481.0}/orionis/metadata/framework.py +1 -1
  15. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/core/unit_test.py +2 -3
  16. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/kernel.py +1 -1
  17. {orionis-0.479.0 → orionis-0.481.0/orionis.egg-info}/PKG-INFO +1 -1
  18. {orionis-0.479.0 → orionis-0.481.0}/orionis.egg-info/SOURCES.txt +3 -0
  19. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/test_testing_unit.py +8 -7
  20. {orionis-0.479.0 → orionis-0.481.0}/LICENCE +0 -0
  21. {orionis-0.479.0 → orionis-0.481.0}/MANIFEST.in +0 -0
  22. {orionis-0.479.0 → orionis-0.481.0}/README.md +0 -0
  23. {orionis-0.479.0 → orionis-0.481.0}/orionis/__init__.py +0 -0
  24. {orionis-0.479.0 → orionis-0.481.0}/orionis/app.py +0 -0
  25. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/__init__.py +0 -0
  26. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/args/__init__.py +0 -0
  27. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/args/argument.py +0 -0
  28. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/args/enums/__init__.py +0 -0
  29. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/args/enums/actions.py +0 -0
  30. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/base/__init__.py +0 -0
  31. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/base/command.py +0 -0
  32. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/base/contracts/__init__.py +0 -0
  33. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/base/contracts/command.py +0 -0
  34. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/commands/__init__.py +0 -0
  35. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/commands/cache.py +0 -0
  36. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/commands/help.py +0 -0
  37. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/commands/publisher.py +0 -0
  38. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/commands/version.py +0 -0
  39. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/commands/workflow.py +0 -0
  40. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/contracts/__init__.py +0 -0
  41. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/contracts/event.py +0 -0
  42. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/contracts/kernel.py +0 -0
  43. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/contracts/reactor.py +0 -0
  44. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/contracts/schedule.py +0 -0
  45. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/core/__init__.py +0 -0
  46. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dumper/__init__.py +0 -0
  47. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dumper/contracts/__init__.py +0 -0
  48. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dumper/contracts/dump.py +0 -0
  49. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dumper/dump.py +0 -0
  50. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dynamic/__init__.py +0 -0
  51. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dynamic/contracts/__init__.py +0 -0
  52. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dynamic/contracts/progress_bar.py +0 -0
  53. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/dynamic/progress_bar.py +0 -0
  54. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/enums/__init__.py +0 -0
  55. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/enums/command.py +0 -0
  56. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/enums/event.py +0 -0
  57. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/exceptions/__init__.py +0 -0
  58. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/exceptions/cli_exception.py +0 -0
  59. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/exceptions/cli_orionis_value_error.py +0 -0
  60. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/exceptions/cli_runtime_error.py +0 -0
  61. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/exceptions/cli_schedule_exception.py +0 -0
  62. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/__init__.py +0 -0
  63. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/console.py +0 -0
  64. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/contracts/__init__.py +0 -0
  65. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/contracts/console.py +0 -0
  66. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/contracts/executor.py +0 -0
  67. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/enums/__init__.py +0 -0
  68. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/enums/styles.py +0 -0
  69. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/output/executor.py +0 -0
  70. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/tasks/__init__.py +0 -0
  71. {orionis-0.479.0 → orionis-0.481.0}/orionis/console/tasks/event.py +0 -0
  72. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/__init__.py +0 -0
  73. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/context/__init__.py +0 -0
  74. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/context/manager.py +0 -0
  75. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/context/scope.py +0 -0
  76. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/contracts/__init__.py +0 -0
  77. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/contracts/container.py +0 -0
  78. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/contracts/service_provider.py +0 -0
  79. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/entities/__init__.py +0 -0
  80. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/entities/binding.py +0 -0
  81. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/enums/__init__.py +0 -0
  82. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/enums/lifetimes.py +0 -0
  83. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/exceptions/__init__.py +0 -0
  84. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/exceptions/attribute.py +0 -0
  85. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/exceptions/exception.py +0 -0
  86. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/exceptions/type.py +0 -0
  87. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/exceptions/value.py +0 -0
  88. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/facades/__init__.py +0 -0
  89. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/providers/__init__.py +0 -0
  90. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/providers/service_provider.py +0 -0
  91. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/__init__.py +0 -0
  92. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/implements.py +0 -0
  93. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/is_abstract_class.py +0 -0
  94. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/is_callable.py +0 -0
  95. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/is_concrete_class.py +0 -0
  96. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/is_instance.py +0 -0
  97. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/is_not_subclass.py +0 -0
  98. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/is_subclass.py +0 -0
  99. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/is_valid_alias.py +0 -0
  100. {orionis-0.479.0 → orionis-0.481.0}/orionis/container/validators/lifetime.py +0 -0
  101. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/__init__.py +0 -0
  102. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/__init__.py +0 -0
  103. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/app/__init__.py +0 -0
  104. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/app/entities/__init__.py +0 -0
  105. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/app/entities/app.py +0 -0
  106. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/app/enums/__init__.py +0 -0
  107. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
  108. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/app/enums/environments.py +0 -0
  109. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/auth/__init__.py +0 -0
  110. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/auth/entities/__init__.py +0 -0
  111. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
  112. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cache/__init__.py +0 -0
  113. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cache/entities/__init__.py +0 -0
  114. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
  115. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cache/entities/file.py +0 -0
  116. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
  117. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cache/enums/__init__.py +0 -0
  118. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
  119. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cors/__init__.py +0 -0
  120. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cors/entities/__init__.py +0 -0
  121. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
  122. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/__init__.py +0 -0
  123. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/entities/__init__.py +0 -0
  124. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/entities/connections.py +0 -0
  125. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/entities/database.py +0 -0
  126. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
  127. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
  128. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
  129. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
  130. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/__init__.py +0 -0
  131. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
  132. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
  133. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
  134. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
  135. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
  136. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
  137. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
  138. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
  139. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
  140. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
  141. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
  142. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/filesystems/__init__.py +0 -0
  143. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/filesystems/entitites/__init__.py +0 -0
  144. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
  145. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
  146. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
  147. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
  148. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
  149. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/__init__.py +0 -0
  150. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/__init__.py +0 -0
  151. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
  152. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
  153. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
  154. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
  155. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
  156. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
  157. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
  158. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
  159. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/enums/__init__.py +0 -0
  160. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
  161. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/validators/__init__.py +0 -0
  162. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/validators/level.py +0 -0
  163. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/logging/validators/path.py +0 -0
  164. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/mail/__init__.py +0 -0
  165. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/mail/entities/__init__.py +0 -0
  166. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/mail/entities/file.py +0 -0
  167. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
  168. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
  169. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
  170. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/queue/__init__.py +0 -0
  171. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/queue/entities/__init__.py +0 -0
  172. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
  173. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/queue/entities/database.py +0 -0
  174. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
  175. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/queue/enums/__init__.py +0 -0
  176. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
  177. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/roots/__init__.py +0 -0
  178. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/session/__init__.py +0 -0
  179. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/session/entities/__init__.py +0 -0
  180. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/session/entities/session.py +0 -0
  181. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/session/enums/__init__.py +0 -0
  182. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
  183. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/session/helpers/__init__.py +0 -0
  184. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
  185. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/startup.py +0 -0
  186. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/testing/__init__.py +0 -0
  187. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/testing/entities/__init__.py +0 -0
  188. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
  189. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/testing/enums/__init__.py +0 -0
  190. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/testing/enums/drivers.py +0 -0
  191. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/testing/enums/mode.py +0 -0
  192. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/config/testing/enums/verbosity.py +0 -0
  193. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/contracts/__init__.py +0 -0
  194. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/contracts/config.py +0 -0
  195. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/exceptions/__init__.py +0 -0
  196. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/exceptions/integrity.py +0 -0
  197. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/exceptions/runtime.py +0 -0
  198. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/exceptions/type.py +0 -0
  199. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/exceptions/value.py +0 -0
  200. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/__init__.py +0 -0
  201. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/console_provider.py +0 -0
  202. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/dumper_provider.py +0 -0
  203. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/executor_provider.py +0 -0
  204. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/inspirational_provider.py +0 -0
  205. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/logger_provider.py +0 -0
  206. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/performance_counter_provider.py +0 -0
  207. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/progress_bar_provider.py +0 -0
  208. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/reactor_provider.py +0 -0
  209. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/testing_provider.py +0 -0
  210. {orionis-0.479.0 → orionis-0.481.0}/orionis/foundation/providers/workers_provider.py +0 -0
  211. {orionis-0.479.0 → orionis-0.481.0}/orionis/metadata/__init__.py +0 -0
  212. {orionis-0.479.0 → orionis-0.481.0}/orionis/metadata/package.py +0 -0
  213. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/__init__.py +0 -0
  214. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/asynchrony/__init__.py +0 -0
  215. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/asynchrony/contracts/__init__.py +0 -0
  216. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
  217. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/asynchrony/coroutines.py +0 -0
  218. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/asynchrony/exceptions/__init__.py +0 -0
  219. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/asynchrony/exceptions/exception.py +0 -0
  220. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/__init__.py +0 -0
  221. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/contracts/__init__.py +0 -0
  222. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/contracts/caster.py +0 -0
  223. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/contracts/env.py +0 -0
  224. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/core/__init__.py +0 -0
  225. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/core/dot_env.py +0 -0
  226. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/dynamic/__init__.py +0 -0
  227. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/dynamic/caster.py +0 -0
  228. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/enums/__init__.py +0 -0
  229. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/enums/value_type.py +0 -0
  230. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/env.py +0 -0
  231. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/exceptions/__init__.py +0 -0
  232. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/exceptions/exception.py +0 -0
  233. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/exceptions/value.py +0 -0
  234. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/helpers/__init__.py +0 -0
  235. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/helpers/functions.py +0 -0
  236. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/key/__init__.py +0 -0
  237. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/key/key_generator.py +0 -0
  238. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/validators/__init__.py +0 -0
  239. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/validators/key_name.py +0 -0
  240. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/environment/validators/types.py +0 -0
  241. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/inspirational/__init__.py +0 -0
  242. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/inspirational/contracts/__init__.py +0 -0
  243. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/inspirational/contracts/inspire.py +0 -0
  244. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/inspirational/inspire.py +0 -0
  245. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/inspirational/quotes.py +0 -0
  246. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/__init__.py +0 -0
  247. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/abstract/__init__.py +0 -0
  248. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/abstract/contracts/__init__.py +0 -0
  249. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/abstract/contracts/reflection.py +0 -0
  250. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/abstract/reflection.py +0 -0
  251. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/callables/__init__.py +0 -0
  252. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/callables/contracts/__init__.py +0 -0
  253. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/callables/contracts/reflection.py +0 -0
  254. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/callables/reflection.py +0 -0
  255. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/concretes/__init__.py +0 -0
  256. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/concretes/contracts/__init__.py +0 -0
  257. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/concretes/contracts/reflection.py +0 -0
  258. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/concretes/reflection.py +0 -0
  259. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/dependencies/__init__.py +0 -0
  260. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/dependencies/contracts/__init__.py +0 -0
  261. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/dependencies/contracts/reflection.py +0 -0
  262. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/dependencies/entities/__init__.py +0 -0
  263. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/dependencies/entities/argument.py +0 -0
  264. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/dependencies/entities/resolve_argument.py +0 -0
  265. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/dependencies/reflection.py +0 -0
  266. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/exceptions/__init__.py +0 -0
  267. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/exceptions/attribute.py +0 -0
  268. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/exceptions/type.py +0 -0
  269. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/exceptions/value.py +0 -0
  270. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/instances/__init__.py +0 -0
  271. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/instances/contracts/__init__.py +0 -0
  272. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/instances/contracts/reflection.py +0 -0
  273. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/instances/reflection.py +0 -0
  274. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/modules/__init__.py +0 -0
  275. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/modules/contracts/__init__.py +0 -0
  276. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/modules/contracts/reflection.py +0 -0
  277. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/modules/reflection.py +0 -0
  278. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/objects/__init__.py +0 -0
  279. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/objects/types.py +0 -0
  280. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/introspection/reflection.py +0 -0
  281. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/__init__.py +0 -0
  282. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/contracts/__init__.py +0 -0
  283. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/contracts/log_service.py +0 -0
  284. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/exceptions/__init__.py +0 -0
  285. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/exceptions/runtime.py +0 -0
  286. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/handlers/__init__.py +0 -0
  287. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/handlers/filename.py +0 -0
  288. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/handlers/size_rotating.py +0 -0
  289. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/handlers/timed_rotating.py +0 -0
  290. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/log/log_service.py +0 -0
  291. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/__init__.py +0 -0
  292. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/contracts/__init__.py +0 -0
  293. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/contracts/imports.py +0 -0
  294. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/contracts/workers.py +0 -0
  295. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/imports.py +0 -0
  296. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/runtime/__init__.py +0 -0
  297. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/runtime/imports.py +0 -0
  298. {orionis-0.479.0 → orionis-0.481.0}/orionis/services/system/workers.py +0 -0
  299. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/__init__.py +0 -0
  300. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/entities/__init__.py +0 -0
  301. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/entities/base.py +0 -0
  302. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/__init__.py +0 -0
  303. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/console.py +0 -0
  304. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/dumper.py +0 -0
  305. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/executor.py +0 -0
  306. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/inspire.py +0 -0
  307. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/logger.py +0 -0
  308. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/performance_counter.py +0 -0
  309. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/progress_bar.py +0 -0
  310. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/reactor.py +0 -0
  311. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/testing.py +0 -0
  312. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/facades/workers.py +0 -0
  313. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/formatter/__init__.py +0 -0
  314. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/formatter/exceptions/__init__.py +0 -0
  315. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/formatter/exceptions/contracts/__init__.py +0 -0
  316. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/formatter/exceptions/contracts/parser.py +0 -0
  317. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/formatter/exceptions/parser.py +0 -0
  318. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/formatter/serializer.py +0 -0
  319. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/patterns/__init__.py +0 -0
  320. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/patterns/singleton/__init__.py +0 -0
  321. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/patterns/singleton/meta.py +0 -0
  322. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/performance/__init__.py +0 -0
  323. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/performance/contracts/__init__.py +0 -0
  324. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/performance/contracts/counter.py +0 -0
  325. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/performance/counter.py +0 -0
  326. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/standard/__init__.py +0 -0
  327. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/standard/contracts/__init__.py +0 -0
  328. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/standard/contracts/std.py +0 -0
  329. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/standard/exceptions/__init__.py +0 -0
  330. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/standard/exceptions/value.py +0 -0
  331. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/standard/std.py +0 -0
  332. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/wrapper/__init__.py +0 -0
  333. {orionis-0.479.0 → orionis-0.481.0}/orionis/support/wrapper/dot_dict.py +0 -0
  334. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/__init__.py +0 -0
  335. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/cases/__init__.py +0 -0
  336. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/cases/asynchronous.py +0 -0
  337. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/cases/synchronous.py +0 -0
  338. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/__init__.py +0 -0
  339. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/dumper.py +0 -0
  340. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/kernel.py +0 -0
  341. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/logs.py +0 -0
  342. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/printer.py +0 -0
  343. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/render.py +0 -0
  344. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/test_result.py +0 -0
  345. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/contracts/unit_test.py +0 -0
  346. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/core/__init__.py +0 -0
  347. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/entities/__init__.py +0 -0
  348. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/entities/result.py +0 -0
  349. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/enums/__init__.py +0 -0
  350. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/enums/status.py +0 -0
  351. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/exceptions/__init__.py +0 -0
  352. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/exceptions/config.py +0 -0
  353. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/exceptions/failure.py +0 -0
  354. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/exceptions/persistence.py +0 -0
  355. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/exceptions/runtime.py +0 -0
  356. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/exceptions/value.py +0 -0
  357. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/output/__init__.py +0 -0
  358. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/output/dumper.py +0 -0
  359. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/output/printer.py +0 -0
  360. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/records/__init__.py +0 -0
  361. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/records/logs.py +0 -0
  362. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/__init__.py +0 -0
  363. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/base_path.py +0 -0
  364. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/execution_mode.py +0 -0
  365. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/fail_fast.py +0 -0
  366. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/folder_path.py +0 -0
  367. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/module_name.py +0 -0
  368. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/name_pattern.py +0 -0
  369. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/pattern.py +0 -0
  370. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/persistent.py +0 -0
  371. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/persistent_driver.py +0 -0
  372. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/print_result.py +0 -0
  373. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/tags.py +0 -0
  374. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/throw_exception.py +0 -0
  375. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/verbosity.py +0 -0
  376. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/web_report.py +0 -0
  377. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/validators/workers.py +0 -0
  378. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/view/__init__.py +0 -0
  379. {orionis-0.479.0 → orionis-0.481.0}/orionis/test/view/render.py +0 -0
  380. {orionis-0.479.0 → orionis-0.481.0}/orionis.egg-info/dependency_links.txt +0 -0
  381. {orionis-0.479.0 → orionis-0.481.0}/orionis.egg-info/requires.txt +0 -0
  382. {orionis-0.479.0 → orionis-0.481.0}/orionis.egg-info/top_level.txt +0 -0
  383. {orionis-0.479.0 → orionis-0.481.0}/orionis.egg-info/zip-safe +0 -0
  384. {orionis-0.479.0 → orionis-0.481.0}/setup.cfg +0 -0
  385. {orionis-0.479.0 → orionis-0.481.0}/setup.py +0 -0
  386. {orionis-0.479.0 → orionis-0.481.0}/tests/__init__.py +0 -0
  387. {orionis-0.479.0 → orionis-0.481.0}/tests/container/__init__.py +0 -0
  388. {orionis-0.479.0 → orionis-0.481.0}/tests/container/context/__init__.py +0 -0
  389. {orionis-0.479.0 → orionis-0.481.0}/tests/container/context/test_manager.py +0 -0
  390. {orionis-0.479.0 → orionis-0.481.0}/tests/container/context/test_scope.py +0 -0
  391. {orionis-0.479.0 → orionis-0.481.0}/tests/container/core/__init__.py +0 -0
  392. {orionis-0.479.0 → orionis-0.481.0}/tests/container/core/test_advanced_async.py +0 -0
  393. {orionis-0.479.0 → orionis-0.481.0}/tests/container/core/test_async_optimizations.py +0 -0
  394. {orionis-0.479.0 → orionis-0.481.0}/tests/container/core/test_container.py +0 -0
  395. {orionis-0.479.0 → orionis-0.481.0}/tests/container/core/test_singleton.py +0 -0
  396. {orionis-0.479.0 → orionis-0.481.0}/tests/container/core/test_thread_safety.py +0 -0
  397. {orionis-0.479.0 → orionis-0.481.0}/tests/container/entities/__init__.py +0 -0
  398. {orionis-0.479.0 → orionis-0.481.0}/tests/container/entities/test_binding.py +0 -0
  399. {orionis-0.479.0 → orionis-0.481.0}/tests/container/enums/__init__.py +0 -0
  400. {orionis-0.479.0 → orionis-0.481.0}/tests/container/enums/test_lifetimes.py +0 -0
  401. {orionis-0.479.0 → orionis-0.481.0}/tests/container/facades/__init__.py +0 -0
  402. {orionis-0.479.0 → orionis-0.481.0}/tests/container/facades/test_facade.py +0 -0
  403. {orionis-0.479.0 → orionis-0.481.0}/tests/container/mocks/__init__.py +0 -0
  404. {orionis-0.479.0 → orionis-0.481.0}/tests/container/mocks/mock_advanced_async.py +0 -0
  405. {orionis-0.479.0 → orionis-0.481.0}/tests/container/mocks/mock_async_optimizations.py +0 -0
  406. {orionis-0.479.0 → orionis-0.481.0}/tests/container/mocks/mock_auto_resolution.py +0 -0
  407. {orionis-0.479.0 → orionis-0.481.0}/tests/container/mocks/mock_complex_classes.py +0 -0
  408. {orionis-0.479.0 → orionis-0.481.0}/tests/container/mocks/mock_simple_classes.py +0 -0
  409. {orionis-0.479.0 → orionis-0.481.0}/tests/container/providers/__init__.py +0 -0
  410. {orionis-0.479.0 → orionis-0.481.0}/tests/container/providers/test_providers.py +0 -0
  411. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/__init__.py +0 -0
  412. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_implements.py +0 -0
  413. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_is_abstract_class.py +0 -0
  414. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_is_callable.py +0 -0
  415. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_is_concrete_class.py +0 -0
  416. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_is_instance.py +0 -0
  417. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_is_not_subclass.py +0 -0
  418. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_is_subclass.py +0 -0
  419. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_is_valid_alias.py +0 -0
  420. {orionis-0.479.0 → orionis-0.481.0}/tests/container/validators/test_lifetime.py +0 -0
  421. {orionis-0.479.0 → orionis-0.481.0}/tests/example/__init__.py +0 -0
  422. {orionis-0.479.0 → orionis-0.481.0}/tests/example/test_example.py +0 -0
  423. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/__init__.py +0 -0
  424. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/__init__.py +0 -0
  425. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/app/__init__.py +0 -0
  426. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
  427. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/auth/__init__.py +0 -0
  428. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
  429. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/cache/__init__.py +0 -0
  430. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
  431. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
  432. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
  433. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/cors/__init__.py +0 -0
  434. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
  435. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/database/__init__.py +0 -0
  436. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
  437. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
  438. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
  439. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
  440. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
  441. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
  442. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/filesystems/__init__.py +0 -0
  443. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
  444. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
  445. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
  446. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
  447. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
  448. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/__init__.py +0 -0
  449. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
  450. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
  451. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +0 -0
  452. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +0 -0
  453. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +0 -0
  454. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +0 -0
  455. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +0 -0
  456. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +0 -0
  457. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/mail/__init__.py +0 -0
  458. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
  459. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
  460. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
  461. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
  462. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/queue/__init__.py +0 -0
  463. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
  464. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
  465. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
  466. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/root/__init__.py +0 -0
  467. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
  468. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/session/__init__.py +0 -0
  469. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
  470. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/startup/__init__.py +0 -0
  471. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
  472. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/testing/__init__.py +0 -0
  473. {orionis-0.479.0 → orionis-0.481.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
  474. {orionis-0.479.0 → orionis-0.481.0}/tests/metadata/__init__.py +0 -0
  475. {orionis-0.479.0 → orionis-0.481.0}/tests/metadata/test_metadata_framework.py +0 -0
  476. {orionis-0.479.0 → orionis-0.481.0}/tests/metadata/test_metadata_package.py +0 -0
  477. {orionis-0.479.0 → orionis-0.481.0}/tests/services/__init__.py +0 -0
  478. {orionis-0.479.0 → orionis-0.481.0}/tests/services/asynchrony/__init__.py +0 -0
  479. {orionis-0.479.0 → orionis-0.481.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +0 -0
  480. {orionis-0.479.0 → orionis-0.481.0}/tests/services/environment/__init__.py +0 -0
  481. {orionis-0.479.0 → orionis-0.481.0}/tests/services/environment/test_services_environment.py +0 -0
  482. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/__init__.py +0 -0
  483. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/dependencies/__init__.py +0 -0
  484. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/dependencies/mocks/__init__.py +0 -0
  485. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/dependencies/mocks/mock_user.py +0 -0
  486. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/dependencies/mocks/mock_user_controller.py +0 -0
  487. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/dependencies/mocks/mock_users_permissions.py +0 -0
  488. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/dependencies/test_reflect_dependencies.py +0 -0
  489. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/__init__.py +0 -0
  490. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/mock/__init__.py +0 -0
  491. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/mock/fake_reflect_instance.py +0 -0
  492. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/test_reflection_abstract.py +0 -0
  493. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/test_reflection_callable.py +0 -0
  494. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/test_reflection_concrete.py +0 -0
  495. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/test_reflection_instance.py +0 -0
  496. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/reflection/test_reflection_module.py +0 -0
  497. {orionis-0.479.0 → orionis-0.481.0}/tests/services/introspection/test_reflection.py +0 -0
  498. {orionis-0.479.0 → orionis-0.481.0}/tests/services/log/__init__.py +0 -0
  499. {orionis-0.479.0 → orionis-0.481.0}/tests/services/log/test_log.py +0 -0
  500. {orionis-0.479.0 → orionis-0.481.0}/tests/services/system/__init__.py +0 -0
  501. {orionis-0.479.0 → orionis-0.481.0}/tests/services/system/test_services_system_imports.py +0 -0
  502. {orionis-0.479.0 → orionis-0.481.0}/tests/services/system/test_services_system_workers.py +0 -0
  503. {orionis-0.479.0 → orionis-0.481.0}/tests/support/__init__.py +0 -0
  504. {orionis-0.479.0 → orionis-0.481.0}/tests/support/entities/__init__.py +0 -0
  505. {orionis-0.479.0 → orionis-0.481.0}/tests/support/entities/mock_dataclass.py +0 -0
  506. {orionis-0.479.0 → orionis-0.481.0}/tests/support/entities/test_base.py +0 -0
  507. {orionis-0.479.0 → orionis-0.481.0}/tests/support/patterns/__init__.py +0 -0
  508. {orionis-0.479.0 → orionis-0.481.0}/tests/support/patterns/singleton/__init__.py +0 -0
  509. {orionis-0.479.0 → orionis-0.481.0}/tests/support/patterns/singleton/test_patterns_singleton.py +0 -0
  510. {orionis-0.479.0 → orionis-0.481.0}/tests/support/standard/__init__.py +0 -0
  511. {orionis-0.479.0 → orionis-0.481.0}/tests/support/standard/test_services_std.py +0 -0
  512. {orionis-0.479.0 → orionis-0.481.0}/tests/support/wrapper/__init__.py +0 -0
  513. {orionis-0.479.0 → orionis-0.481.0}/tests/support/wrapper/test_services_wrapper_docdict.py +0 -0
  514. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/__init__.py +0 -0
  515. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/cases/__init__.py +0 -0
  516. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/cases/test_testing_asynchronous.py +0 -0
  517. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/cases/test_testing_synchronous.py +0 -0
  518. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/entities/__init__.py +0 -0
  519. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/entities/test_testing_result.py +0 -0
  520. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/enums/__init__.py +0 -0
  521. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/enums/test_testing_status.py +0 -0
  522. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/output/__init__.py +0 -0
  523. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/output/test_testing_dumper.py +0 -0
  524. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/output/test_testing_printer.py +0 -0
  525. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/records/__init__.py +0 -0
  526. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/records/test_testing_records.py +0 -0
  527. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/validators/__init__.py +0 -0
  528. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/validators/test_testing_validators.py +0 -0
  529. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/view/__init__.py +0 -0
  530. {orionis-0.479.0 → orionis-0.481.0}/tests/testing/view/test_render.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.479.0
3
+ Version: 0.481.0
4
4
  Summary: Orionis Framework – Elegant, Fast, and Powerful.
5
5
  Home-page: https://github.com/orionis-framework/framework
6
6
  Author: Raul Mauricio Uñate Castro
@@ -0,0 +1,88 @@
1
+ import importlib
2
+ import os
3
+ from pathlib import Path
4
+ from orionis.console.base.command import BaseCommand
5
+ from orionis.console.contracts.schedule import ISchedule
6
+ from orionis.console.exceptions import CLIOrionisRuntimeError
7
+ from orionis.foundation.contracts.application import IApplication
8
+ from rich.console import Console
9
+ from rich.panel import Panel
10
+ from rich.text import Text
11
+ from datetime import datetime
12
+
13
+ class ScheduleWorkCommand(BaseCommand):
14
+ """
15
+ Command class to display usage information for the Orionis CLI.
16
+ """
17
+
18
+ # Indicates whether timestamps will be shown in the command output
19
+ timestamps: bool = False
20
+
21
+ # Command signature and description
22
+ signature: str = "schedule:work"
23
+
24
+ # Command description
25
+ description: str = "Executes the scheduled tasks defined in the application."
26
+
27
+ async def handle(self, orionis: IApplication, console: Console) -> bool:
28
+
29
+ try:
30
+
31
+ # Obtener la ruta absoluta del scheduler desde la configuración de la aplicación
32
+ scheduler_path = orionis.path('console_scheduler')
33
+
34
+ # Obtener la base path desde la variable de entorno o desde la configuración local
35
+ base_path = Path(os.getcwd()).resolve()
36
+ scheduler_path = Path(scheduler_path).resolve()
37
+ rel_path = scheduler_path.relative_to(base_path)
38
+
39
+ # Reemplazar los separadores por puntos y quitar la extensión .py
40
+ module_name = ".".join(rel_path.with_suffix('').parts)
41
+
42
+ # Importar el módulo del scheduler
43
+ scheduler_module = importlib.import_module(module_name)
44
+
45
+ # Obtener la clase Scheduler del módulo importado
46
+ Scheduler = getattr(scheduler_module, "Scheduler", None)
47
+
48
+ # Check if the Scheduler class was found
49
+ if Scheduler is None:
50
+ raise CLIOrionisRuntimeError(f"Scheduler class not found in module {module_name}")
51
+
52
+ # Obtener el método tasks de la clase Scheduler
53
+ task_method = getattr(Scheduler, "tasks", None)
54
+
55
+ # Check if the method exists
56
+ if task_method is None:
57
+ raise CLIOrionisRuntimeError(f"Method 'tasks' not found in Scheduler class in module {module_name}")
58
+
59
+ # Crear una instancia de ISchedule
60
+ schedule_serice: ISchedule = orionis.make(ISchedule)
61
+
62
+ # Inicializar el metodo
63
+ task_method(schedule_serice)
64
+
65
+ # Display a professional start message for the scheduler worker
66
+ console.line()
67
+ start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
68
+ panel_content = Text.assemble(
69
+ (" Orionis Scheduler Worker ", "bold white on green"),
70
+ ("\n\n", ""),
71
+ ("The scheduled tasks worker has started successfully.\n", "white"),
72
+ (f"Started at: {start_time}\n", "dim"),
73
+ ("To stop the worker, press ", "white"),
74
+ ("Ctrl+C", "bold yellow"),
75
+ (".", "white")
76
+ )
77
+ console.print(
78
+ Panel(panel_content, border_style="green", padding=(1, 2))
79
+ )
80
+ console.line()
81
+
82
+ # Iniciar el scheduler
83
+ await schedule_serice.start()
84
+
85
+ except Exception as exc:
86
+
87
+ # Catch any unexpected exceptions and raise as a CLIOrionisRuntimeError
88
+ raise CLIOrionisRuntimeError(f"An unexpected error occurred while clearing the cache: {exc}")
@@ -1,6 +1,7 @@
1
1
  from orionis.app import Orionis
2
2
  from orionis.console.base.command import BaseCommand
3
3
  from orionis.console.exceptions import CLIOrionisRuntimeError
4
+ from orionis.foundation.contracts.application import IApplication
4
5
  from orionis.test.contracts.kernel import ITestKernel
5
6
 
6
7
  class TestCommand(BaseCommand):
@@ -26,28 +27,34 @@ class TestCommand(BaseCommand):
26
27
  # Command description
27
28
  description: str = "Executes all automated tests using the configured test kernel for the Orionis application."
28
29
 
29
- def handle(self) -> dict:
30
+ def handle(self, app: IApplication) -> dict:
30
31
  """
31
- Executes the test command for the Orionis CLI.
32
+ Executes all automated tests using the configured test kernel.
32
33
 
33
- This method initializes the Orionis application, retrieves the test kernel instance,
34
- and runs the test suite using the kernel's handle method. If any exception occurs during
35
- execution, it raises a CLIOrionisRuntimeError with the error details.
34
+ This method retrieves the test kernel instance from the application container
35
+ and executes the test suite by invoking the kernel's handle method. If any
36
+ exception occurs during execution, it raises a CLIOrionisRuntimeError with
37
+ the error details.
38
+
39
+ Parameters
40
+ ----------
41
+ app : IApplication
42
+ The Orionis application instance providing access to the service container.
36
43
 
37
44
  Returns
38
45
  -------
39
46
  dict
40
- The result of the test execution, typically containing test results or status.
47
+ A dictionary containing the results of the test execution, such as test
48
+ statuses, counts, or other relevant information.
41
49
 
42
50
  Raises
43
51
  ------
44
52
  CLIOrionisRuntimeError
45
53
  If an unexpected error occurs during the execution of the test command.
46
54
  """
47
- try:
48
55
 
49
- # Initialize the Orionis application instance
50
- app = Orionis()
56
+ # Attempt to execute the test suite using the test kernel
57
+ try:
51
58
 
52
59
  # Retrieve the test kernel instance from the application container
53
60
  kernel: ITestKernel = app.make(ITestKernel)
@@ -21,7 +21,7 @@ class Reactor(IReactor):
21
21
 
22
22
  def __init__(
23
23
  self,
24
- app: Optional[IApplication] = None
24
+ app: IApplication
25
25
  ):
26
26
  """
27
27
  Initializes a new Reactor instance for command discovery and management.
@@ -56,7 +56,7 @@ class Reactor(IReactor):
56
56
  """
57
57
 
58
58
  # Initialize the application instance, using provided app or creating new Orionis instance
59
- self.__app = app or Orionis()
59
+ self.__app = app
60
60
 
61
61
  # Set the project root directory to current working directory for module path resolution
62
62
  self.__root: str = str(Path.cwd())
@@ -111,6 +111,7 @@ class Reactor(IReactor):
111
111
  from orionis.console.commands.publisher import PublisherCommand
112
112
  from orionis.console.commands.workflow import WorkFlowGithubCommand
113
113
  from orionis.console.commands.cache import CacheClearCommand
114
+ from orionis.console.commands.scheduler_work import ScheduleWorkCommand
114
115
 
115
116
  # List of core command classes to load (extend this list as more core commands are added)
116
117
  core_commands = [
@@ -119,7 +120,8 @@ class Reactor(IReactor):
119
120
  TestCommand,
120
121
  PublisherCommand,
121
122
  WorkFlowGithubCommand,
122
- CacheClearCommand
123
+ CacheClearCommand,
124
+ ScheduleWorkCommand
123
125
  ]
124
126
 
125
127
  # Iterate through the core command classes and register them
@@ -38,7 +38,7 @@ class KernelCLI(IKernelCLI):
38
38
 
39
39
  # Retrieve and initialize the reactor instance from the application container.
40
40
  # The reactor is responsible for dispatching CLI commands.
41
- self.__reactor: IReactor = app.make('x-orionis.console.core.reactor', app)
41
+ self.__reactor: IReactor = app.make('x-orionis.console.core.reactor')
42
42
 
43
43
  # Retrieve and initialize the console instance for command output and error handling.
44
44
  self.__console: IConsole = app.make('x-orionis.console.output.console')
@@ -0,0 +1,94 @@
1
+ from rich.console import Console
2
+ from rich.panel import Panel
3
+ from rich.text import Text
4
+ from rich.traceback import Traceback
5
+
6
+ class ScheduleErrorReporter:
7
+ """Handles and displays errors and warnings with rich formatting using the Rich library.
8
+
9
+ This class provides methods to output formatted error and warning messages to the console,
10
+ enhancing readability and debugging using the Rich library's features.
11
+
12
+ Attributes
13
+ ----------
14
+ console : Console
15
+ Rich Console object used for rendering formatted output to the terminal.
16
+ """
17
+
18
+ def __init__(self):
19
+ """
20
+ Initialize the ErrorReporter instance.
21
+
22
+ This constructor creates a new Console object from the Rich library and assigns it to the 'console' attribute,
23
+ which is used for rendering formatted output to the terminal.
24
+
25
+ Returns
26
+ -------
27
+ None
28
+ This constructor does not return any value.
29
+ """
30
+ self.console = Console()
31
+
32
+ def reportException(self, job_id: str, exception: Exception, traceback: str = None):
33
+ """
34
+ Display a formatted error message for an exception that occurred during a job execution.
35
+
36
+ This method prints a visually enhanced error panel to the console, including the job identifier and the exception message.
37
+ If a traceback string is provided, it is rendered below the error panel for detailed debugging information.
38
+
39
+ Parameters
40
+ ----------
41
+ job_id : str
42
+ The identifier of the job where the exception occurred.
43
+ exception : Exception
44
+ The exception instance that was raised.
45
+ traceback : str, optional
46
+ The string representation of the traceback. If provided, it will be displayed after the error message.
47
+
48
+ Returns
49
+ -------
50
+ None
51
+ This method does not return any value. It outputs formatted error information to the console.
52
+ """
53
+ title = f"[bold red]Job Execution Error[/bold red]"
54
+ message = Text.assemble(
55
+ ("An exception occurred during the execution of job ", "white"),
56
+ (f"'{job_id}'", "bold cyan"),
57
+ (":\n", "white"),
58
+ (f"{type(exception).__name__}: {exception}", "red")
59
+ )
60
+
61
+ self.console.print(Panel(message, title=title, border_style="red", padding=(1, 2)))
62
+ if traceback:
63
+ tb = Traceback.from_string(traceback)
64
+ self.console.print(tb)
65
+ self.console.line()
66
+
67
+
68
+ def reportMissed(self, job_id: str, scheduled_time):
69
+ """
70
+ Display a formatted warning message for a missed job execution.
71
+
72
+ This method prints a warning panel to the console, indicating that a scheduled job was missed and showing its scheduled time.
73
+
74
+ Parameters
75
+ ----------
76
+ job_id : str
77
+ The identifier of the missed job.
78
+ scheduled_time : Any
79
+ The time the job was scheduled to run.
80
+
81
+ Returns
82
+ -------
83
+ None
84
+ This method does not return any value. It outputs a warning message to the console.
85
+ """
86
+ title = f"[bold yellow]Missed Scheduled Job[/bold yellow]"
87
+ msg = Text.assemble(
88
+ ("The scheduled job ", "white"),
89
+ (f"'{job_id}'", "bold cyan"),
90
+ (" was not executed as planned.\nScheduled time: ", "white"),
91
+ (f"{scheduled_time}", "bold green")
92
+ )
93
+ self.console.print(Panel(msg, title=title, border_style="yellow", padding=(1, 2)))
94
+ self.console.line()
@@ -2,19 +2,25 @@ import asyncio
2
2
  import logging
3
3
  from typing import Dict, List, Optional
4
4
  import pytz
5
+ from apscheduler.events import EVENT_JOB_MISSED, EVENT_JOB_ERROR
5
6
  from apscheduler.schedulers.asyncio import AsyncIOScheduler as APSAsyncIOScheduler
6
- from orionis.app import Orionis
7
7
  from orionis.console.contracts.reactor import IReactor
8
8
  from orionis.console.contracts.schedule import ISchedule
9
9
  from orionis.console.exceptions import CLIOrionisRuntimeError
10
+ from orionis.console.output.contracts.console import IConsole
10
11
  from orionis.console.tasks.event import Event
12
+ from orionis.console.tasks.exception_report import ScheduleErrorReporter
13
+ from orionis.foundation.contracts.application import IApplication
11
14
  from orionis.services.log.contracts.log_service import ILogger
12
15
 
13
16
  class Scheduler(ISchedule):
14
17
 
15
18
  def __init__(
16
19
  self,
17
- reactor: IReactor
20
+ reactor: IReactor,
21
+ app: IApplication,
22
+ console: IConsole,
23
+ error_reporter: ScheduleErrorReporter
18
24
  ) -> None:
19
25
  """
20
26
  Initialize a new instance of the Scheduler class.
@@ -37,7 +43,13 @@ class Scheduler(ISchedule):
37
43
  """
38
44
 
39
45
  # Store the application instance for configuration access.
40
- self.__app = Orionis()
46
+ self.__app = app
47
+
48
+ # Store the console instance for output operations.
49
+ self.__console = console
50
+
51
+ # Store the error reporter instance for handling exceptions.
52
+ self.__error_reporter = error_reporter
41
53
 
42
54
  # Initialize AsyncIOScheduler instance with timezone configuration.
43
55
  self.__scheduler: APSAsyncIOScheduler = APSAsyncIOScheduler(
@@ -46,8 +58,11 @@ class Scheduler(ISchedule):
46
58
 
47
59
  # Clear the APScheduler logger to prevent conflicts with other loggers.
48
60
  # This is necessary to avoid duplicate log messages or conflicts with other logging configurations.
49
- logging.getLogger("apscheduler").handlers.clear()
50
- logging.getLogger("apscheduler").propagate = False
61
+ for name in ["apscheduler", "apscheduler.scheduler", "apscheduler.executors.default"]:
62
+ logger = logging.getLogger(name)
63
+ logger.handlers.clear()
64
+ logger.propagate = False
65
+ logger.disabled = True
51
66
 
52
67
  # Initialize the logger from the application instance.
53
68
  self.__logger: ILogger = self.__app.make('x-orionis.services.log.log_service')
@@ -64,9 +79,52 @@ class Scheduler(ISchedule):
64
79
  # Initialize the jobs list to keep track of all scheduled jobs.
65
80
  self.__jobs: List[dict] = []
66
81
 
82
+ # Add a listener to the scheduler to capture job events such as missed jobs or errors.
83
+ self.__scheduler.add_listener(self.__listener, EVENT_JOB_MISSED | EVENT_JOB_ERROR)
84
+
67
85
  # Log the initialization of the Scheduler.
68
86
  self.__logger.info("Orionis scheduler initialized.")
69
87
 
88
+ def __listener(self, event):
89
+ """
90
+ Handle job events by logging errors and missed jobs.
91
+
92
+ This method acts as a listener for job events emitted by the scheduler. It processes
93
+ two main types of events: job execution errors and missed job executions. When a job
94
+ raises an exception during execution, the method logs the error and delegates reporting
95
+ to the error reporter. If a job is missed (i.e., not executed at its scheduled time),
96
+ the method logs a warning and notifies the error reporter accordingly.
97
+
98
+ Parameters
99
+ ----------
100
+ event : apscheduler.events.JobEvent
101
+ The job event object containing information about the job execution, such as
102
+ job_id, exception, traceback, code, and scheduled_run_time.
103
+
104
+ Returns
105
+ -------
106
+ None
107
+ This method does not return any value. It performs logging and error reporting
108
+ based on the event type.
109
+ """
110
+
111
+ # If the event contains an exception, log the error and report it
112
+ if event.exception:
113
+ self.__logger.error(f"Job {event.job_id} raised an exception: {event.exception}")
114
+ self.__error_reporter.reportException(
115
+ job_id=event.job_id,
116
+ exception=event.exception,
117
+ traceback=event.traceback
118
+ )
119
+
120
+ # If the event indicates a missed job, log a warning and report it
121
+ elif event.code == EVENT_JOB_MISSED:
122
+ self.__logger.warning(f"Job {event.job_id} was missed, scheduled for {event.scheduled_run_time}")
123
+ self.__error_reporter.reportMissed(
124
+ job_id=event.job_id,
125
+ scheduled_time=event.scheduled_run_time
126
+ )
127
+
70
128
  def __getCommands(
71
129
  self
72
130
  ) -> dict:
@@ -285,14 +343,10 @@ class Scheduler(ISchedule):
285
343
 
286
344
  # Keep the event loop alive to process scheduled jobs
287
345
  try:
288
-
289
- # Wait for the scheduler to start and keep it running
290
- while True:
346
+ while self.__scheduler.running and self.__scheduler.get_jobs():
291
347
  await asyncio.sleep(1)
292
-
293
- except KeyboardInterrupt:
294
-
295
- # Handle graceful shutdown on keyboard interrupt
348
+ except (KeyboardInterrupt, asyncio.CancelledError):
349
+ # Handle graceful shutdown on keyboard interrupt or cancellation
296
350
  await self.shutdown()
297
351
 
298
352
  except Exception as e:
@@ -511,35 +511,46 @@ class Container(IContainer):
511
511
  registered in the container under both the abstract and the alias.
512
512
  """
513
513
 
514
- # Ensure that the abstract is an abstract class
515
- IsAbstractClass(abstract, f"Instance {Lifetime.SINGLETON}")
514
+ # Validate the enforce_decoupling parameter
515
+ if isinstance(enforce_decoupling, bool):
516
516
 
517
- # Ensure that the instance is a valid instance
518
- IsInstance(instance)
517
+ # Ensure that the abstract is an abstract class
518
+ IsAbstractClass(abstract, f"Instance {Lifetime.SINGLETON}")
519
519
 
520
- # Ensure that instance is NOT a subclass of abstract
521
- if enforce_decoupling:
522
- IsNotSubclass(abstract, instance.__class__)
520
+ # Ensure that the instance is a valid instance
521
+ IsInstance(instance)
523
522
 
524
- # Validate that instance is a subclass of abstract
525
- else:
526
- IsSubclass(abstract, instance.__class__)
523
+ # Ensure that instance is NOT a subclass of abstract
524
+ if enforce_decoupling:
525
+ IsNotSubclass(abstract, instance.__class__)
527
526
 
528
- # Ensure implementation
529
- ImplementsAbstractMethods(
530
- abstract=abstract,
531
- instance=instance
532
- )
527
+ # Validate that instance is a subclass of abstract
528
+ else:
529
+ IsSubclass(abstract, instance.__class__)
530
+
531
+ # Ensure implementation
532
+ ImplementsAbstractMethods(
533
+ abstract=abstract,
534
+ instance=instance
535
+ )
536
+
537
+ # Ensure that the alias is a valid string if provided
538
+ if alias:
539
+ IsValidAlias(alias)
540
+ else:
541
+ rf_asbtract = ReflectionAbstract(abstract)
542
+ alias = rf_asbtract.getModuleWithClassName()
543
+
544
+ # If the service is already registered, drop it
545
+ self.drop(abstract, alias)
533
546
 
534
- # Ensure that the alias is a valid string if provided
535
- if alias:
536
- IsValidAlias(alias)
537
547
  else:
538
- rf_asbtract = ReflectionAbstract(abstract)
539
- alias = rf_asbtract.getModuleWithClassName()
540
548
 
541
- # If the service is already registered, drop it
542
- self.drop(abstract, alias)
549
+ # Drop the existing alias if it exists
550
+ self.drop(alias=alias)
551
+
552
+ # If enforce_decoupling is not a boolean, set it to False
553
+ enforce_decoupling = False
543
554
 
544
555
  # Register the instance with the abstract type
545
556
  self.__bindings[abstract] = Binding(
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
+ from orionis.app import Orionis
2
3
  from orionis.container.exceptions import OrionisContainerAttributeError, OrionisContainerException
3
- from orionis.foundation.application import Application, IApplication
4
+ from orionis.foundation.application import IApplication
4
5
  from typing import TypeVar, Any
5
6
 
6
7
  T = TypeVar('T')
@@ -34,7 +35,7 @@ class FacadeMeta(type):
34
35
  class Facade(metaclass=FacadeMeta):
35
36
 
36
37
  # Application instance to resolve services
37
- _app: IApplication = Application()
38
+ _app: IApplication = Orionis()
38
39
 
39
40
  @classmethod
40
41
  def getFacadeAccessor(cls) -> str:
@@ -150,8 +150,8 @@ class Application(Container, IApplication):
150
150
  }
151
151
 
152
152
  # Register each kernel instance
153
- for kernel_name, kernel_cls in core_kernels.items():
154
- self.instance(kernel_name, kernel_cls(self))
153
+ for abstract, concrete in core_kernels.items():
154
+ self.instance(abstract, concrete(self))
155
155
 
156
156
  def __loadFrameworkProviders(
157
157
  self
@@ -181,6 +181,7 @@ class Application(Container, IApplication):
181
181
  from orionis.foundation.providers.executor_provider import ConsoleExecuteProvider
182
182
  from orionis.foundation.providers.reactor_provider import ReactorProvider
183
183
  from orionis.foundation.providers.performance_counter_provider import PerformanceCounterProvider
184
+ from orionis.foundation.providers.scheduler_provider import ScheduleProvider
184
185
 
185
186
  # Core framework providers
186
187
  core_providers = [
@@ -193,7 +194,8 @@ class Application(Container, IApplication):
193
194
  InspirationalProvider,
194
195
  ConsoleExecuteProvider,
195
196
  ReactorProvider,
196
- PerformanceCounterProvider
197
+ PerformanceCounterProvider,
198
+ ScheduleProvider
197
199
  ]
198
200
 
199
201
  # Register each core provider
@@ -1812,7 +1814,7 @@ class Application(Container, IApplication):
1812
1814
  self,
1813
1815
  key: str = None,
1814
1816
  default: Any = None
1815
- ) -> Any:
1817
+ ) -> str:
1816
1818
  """
1817
1819
  Retrieve application path configuration values using dot notation.
1818
1820
 
@@ -1832,7 +1834,7 @@ class Application(Container, IApplication):
1832
1834
 
1833
1835
  Returns
1834
1836
  -------
1835
- Any
1837
+ str
1836
1838
  The path configuration value corresponding to the given key, the entire
1837
1839
  paths dictionary if key is None, or the default value if the key is
1838
1840
  not found.
@@ -1923,6 +1925,9 @@ class Application(Container, IApplication):
1923
1925
  # Check if already booted
1924
1926
  if not self.__booted:
1925
1927
 
1928
+ # Register the application instance in the container
1929
+ self.instance(IApplication, self, alias="x-orionis.foundation.application", enforce_decoupling='X-ORIONIS')
1930
+
1926
1931
  # Load configuration if not already set
1927
1932
  self.__loadConfig()
1928
1933
 
@@ -254,7 +254,6 @@ class Paths(BaseEntity):
254
254
  }
255
255
  )
256
256
 
257
-
258
257
  def __post_init__(self) -> None:
259
258
  super().__post_init__()
260
259
  """
@@ -705,7 +705,7 @@ class IApplication(IContainer):
705
705
  pass
706
706
 
707
707
  @abstractmethod
708
- def path(self, key: str = None, default: Any = None) -> Any:
708
+ def path(self, key: str = None, default: Any = None) -> str:
709
709
  """
710
710
  Retrieve path configuration values using dot notation access.
711
711
 
@@ -723,7 +723,7 @@ class IApplication(IContainer):
723
723
 
724
724
  Returns
725
725
  -------
726
- Any
726
+ str
727
727
  The path value associated with the key, the entire paths configuration
728
728
  object if no key is provided, or the default value if the key is not found.
729
729
  """
@@ -0,0 +1,51 @@
1
+ from orionis.console.contracts.schedule import ISchedule
2
+ from orionis.console.tasks.schedule import Scheduler
3
+ from orionis.container.providers.service_provider import ServiceProvider
4
+
5
+ class ScheduleProvider(ServiceProvider):
6
+ """
7
+ Service provider responsible for registering and bootstrapping the application's scheduling system.
8
+
9
+ The ScheduleProvider binds the ISchedule interface to the Scheduler implementation as a singleton
10
+ within the application's service container. It also provides an alias for convenient access.
11
+ Override the `boot` method to configure and register scheduled tasks or jobs required by the application.
12
+
13
+ Methods
14
+ -------
15
+ register() :
16
+ Registers the Scheduler as a singleton service and binds it to the ISchedule interface.
17
+ boot() :
18
+ Initializes and configures scheduled tasks; intended to be overridden for custom jobs.
19
+ """
20
+
21
+ def register(self) -> None:
22
+ """
23
+ Register the Scheduler as a singleton service in the application container.
24
+
25
+ This method binds the ISchedule interface to the Scheduler implementation,
26
+ making it available as a singleton throughout the application's lifecycle.
27
+ An alias "x-orionis.console.contracts.schedule" is also provided for
28
+ convenient access.
29
+
30
+ Returns
31
+ -------
32
+ None
33
+ This method does not return any value.
34
+ """
35
+ # Bind Scheduler as a singleton to the ISchedule interface with an alias
36
+ self.app.singleton(ISchedule, Scheduler, alias="x-orionis.console.contracts.schedule")
37
+
38
+ def boot(self) -> None:
39
+ """
40
+ Initialize and configure any scheduled tasks or jobs required by the application.
41
+
42
+ This method is called automatically during the application's bootstrapping process.
43
+ Override this method to register custom scheduled tasks.
44
+
45
+ Returns
46
+ -------
47
+ None
48
+ This method does not return any value.
49
+ """
50
+ # No scheduled tasks are registered by default; override to add custom jobs
51
+ pass
@@ -5,7 +5,7 @@
5
5
  NAME = "orionis"
6
6
 
7
7
  # Current version of the framework
8
- VERSION = "0.479.0"
8
+ VERSION = "0.481.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"