orionis 0.473.0__tar.gz → 0.474.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 (517) hide show
  1. {orionis-0.473.0/orionis.egg-info → orionis-0.474.0}/PKG-INFO +1 -1
  2. orionis-0.474.0/orionis/console/tasks/schedule.py +492 -0
  3. {orionis-0.473.0 → orionis-0.474.0}/orionis/metadata/framework.py +1 -1
  4. {orionis-0.473.0 → orionis-0.474.0/orionis.egg-info}/PKG-INFO +1 -1
  5. orionis-0.473.0/orionis/console/tasks/schedule.py +0 -703
  6. {orionis-0.473.0 → orionis-0.474.0}/LICENCE +0 -0
  7. {orionis-0.473.0 → orionis-0.474.0}/MANIFEST.in +0 -0
  8. {orionis-0.473.0 → orionis-0.474.0}/README.md +0 -0
  9. {orionis-0.473.0 → orionis-0.474.0}/orionis/__init__.py +0 -0
  10. {orionis-0.473.0 → orionis-0.474.0}/orionis/app.py +0 -0
  11. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/__init__.py +0 -0
  12. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/__init__.py +0 -0
  13. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/argument.py +0 -0
  14. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/enums/__init__.py +0 -0
  15. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/enums/actions.py +0 -0
  16. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/__init__.py +0 -0
  17. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/command.py +0 -0
  18. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/contracts/__init__.py +0 -0
  19. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/contracts/command.py +0 -0
  20. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/__init__.py +0 -0
  21. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/cache.py +0 -0
  22. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/help.py +0 -0
  23. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/publisher.py +0 -0
  24. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/test.py +0 -0
  25. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/version.py +0 -0
  26. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/workflow.py +0 -0
  27. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/__init__.py +0 -0
  28. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/kernel.py +0 -0
  29. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/reactor.py +0 -0
  30. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/schedule.py +0 -0
  31. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/core/__init__.py +0 -0
  32. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/core/reactor.py +0 -0
  33. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/__init__.py +0 -0
  34. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/contracts/__init__.py +0 -0
  35. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/contracts/dump.py +0 -0
  36. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/dump.py +0 -0
  37. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/__init__.py +0 -0
  38. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/contracts/__init__.py +0 -0
  39. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/contracts/progress_bar.py +0 -0
  40. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/progress_bar.py +0 -0
  41. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/__init__.py +0 -0
  42. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_exception.py +0 -0
  43. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_orionis_value_error.py +0 -0
  44. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_runtime_error.py +0 -0
  45. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_schedule_exception.py +0 -0
  46. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/kernel.py +0 -0
  47. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/__init__.py +0 -0
  48. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/console.py +0 -0
  49. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/contracts/__init__.py +0 -0
  50. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/contracts/console.py +0 -0
  51. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/contracts/executor.py +0 -0
  52. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/enums/__init__.py +0 -0
  53. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/enums/styles.py +0 -0
  54. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/executor.py +0 -0
  55. {orionis-0.473.0 → orionis-0.474.0}/orionis/console/tasks/__init__.py +0 -0
  56. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/__init__.py +0 -0
  57. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/container.py +0 -0
  58. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/context/__init__.py +0 -0
  59. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/context/manager.py +0 -0
  60. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/context/scope.py +0 -0
  61. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/contracts/__init__.py +0 -0
  62. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/contracts/container.py +0 -0
  63. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/contracts/service_provider.py +0 -0
  64. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/entities/__init__.py +0 -0
  65. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/entities/binding.py +0 -0
  66. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/enums/__init__.py +0 -0
  67. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/enums/lifetimes.py +0 -0
  68. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/__init__.py +0 -0
  69. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/attribute.py +0 -0
  70. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/exception.py +0 -0
  71. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/type.py +0 -0
  72. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/value.py +0 -0
  73. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/facades/__init__.py +0 -0
  74. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/facades/facade.py +0 -0
  75. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/providers/__init__.py +0 -0
  76. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/providers/service_provider.py +0 -0
  77. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/__init__.py +0 -0
  78. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/implements.py +0 -0
  79. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_abstract_class.py +0 -0
  80. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_callable.py +0 -0
  81. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_concrete_class.py +0 -0
  82. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_instance.py +0 -0
  83. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_not_subclass.py +0 -0
  84. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_subclass.py +0 -0
  85. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_valid_alias.py +0 -0
  86. {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/lifetime.py +0 -0
  87. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/__init__.py +0 -0
  88. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/application.py +0 -0
  89. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/__init__.py +0 -0
  90. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/__init__.py +0 -0
  91. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/entities/__init__.py +0 -0
  92. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/entities/app.py +0 -0
  93. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/enums/__init__.py +0 -0
  94. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
  95. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/enums/environments.py +0 -0
  96. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/auth/__init__.py +0 -0
  97. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/auth/entities/__init__.py +0 -0
  98. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
  99. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/__init__.py +0 -0
  100. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/__init__.py +0 -0
  101. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
  102. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/file.py +0 -0
  103. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
  104. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/enums/__init__.py +0 -0
  105. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
  106. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cors/__init__.py +0 -0
  107. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cors/entities/__init__.py +0 -0
  108. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
  109. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/__init__.py +0 -0
  110. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/__init__.py +0 -0
  111. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/connections.py +0 -0
  112. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/database.py +0 -0
  113. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
  114. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
  115. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
  116. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
  117. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/__init__.py +0 -0
  118. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
  119. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
  120. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
  121. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
  122. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
  123. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
  124. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
  125. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
  126. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
  127. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
  128. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
  129. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/__init__.py +0 -0
  130. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/__init__.py +0 -0
  131. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
  132. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
  133. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
  134. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
  135. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
  136. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/__init__.py +0 -0
  137. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/__init__.py +0 -0
  138. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
  139. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
  140. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
  141. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
  142. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
  143. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
  144. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
  145. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
  146. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/enums/__init__.py +0 -0
  147. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
  148. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/validators/__init__.py +0 -0
  149. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/validators/level.py +0 -0
  150. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/validators/path.py +0 -0
  151. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/__init__.py +0 -0
  152. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/__init__.py +0 -0
  153. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/file.py +0 -0
  154. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
  155. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
  156. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
  157. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/__init__.py +0 -0
  158. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/__init__.py +0 -0
  159. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
  160. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/database.py +0 -0
  161. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
  162. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/enums/__init__.py +0 -0
  163. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
  164. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/roots/__init__.py +0 -0
  165. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/roots/paths.py +0 -0
  166. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/__init__.py +0 -0
  167. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/entities/__init__.py +0 -0
  168. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/entities/session.py +0 -0
  169. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/enums/__init__.py +0 -0
  170. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
  171. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/helpers/__init__.py +0 -0
  172. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
  173. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/startup.py +0 -0
  174. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/__init__.py +0 -0
  175. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/entities/__init__.py +0 -0
  176. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
  177. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/__init__.py +0 -0
  178. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/drivers.py +0 -0
  179. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/mode.py +0 -0
  180. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/verbosity.py +0 -0
  181. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/contracts/__init__.py +0 -0
  182. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/contracts/application.py +0 -0
  183. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/contracts/config.py +0 -0
  184. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/__init__.py +0 -0
  185. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/integrity.py +0 -0
  186. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/runtime.py +0 -0
  187. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/type.py +0 -0
  188. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/value.py +0 -0
  189. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/__init__.py +0 -0
  190. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/console_provider.py +0 -0
  191. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/dumper_provider.py +0 -0
  192. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/executor_provider.py +0 -0
  193. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/inspirational_provider.py +0 -0
  194. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/logger_provider.py +0 -0
  195. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/progress_bar_provider.py +0 -0
  196. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/reactor_provider.py +0 -0
  197. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/testing_provider.py +0 -0
  198. {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/workers_provider.py +0 -0
  199. {orionis-0.473.0 → orionis-0.474.0}/orionis/metadata/__init__.py +0 -0
  200. {orionis-0.473.0 → orionis-0.474.0}/orionis/metadata/package.py +0 -0
  201. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/__init__.py +0 -0
  202. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/__init__.py +0 -0
  203. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/contracts/__init__.py +0 -0
  204. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
  205. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/coroutines.py +0 -0
  206. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/exceptions/__init__.py +0 -0
  207. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/exceptions/exception.py +0 -0
  208. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/__init__.py +0 -0
  209. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/contracts/__init__.py +0 -0
  210. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/contracts/caster.py +0 -0
  211. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/contracts/env.py +0 -0
  212. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/core/__init__.py +0 -0
  213. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/core/dot_env.py +0 -0
  214. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/dynamic/__init__.py +0 -0
  215. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/dynamic/caster.py +0 -0
  216. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/enums/__init__.py +0 -0
  217. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/enums/value_type.py +0 -0
  218. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/env.py +0 -0
  219. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/exceptions/__init__.py +0 -0
  220. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/exceptions/exception.py +0 -0
  221. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/exceptions/value.py +0 -0
  222. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/helpers/__init__.py +0 -0
  223. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/helpers/functions.py +0 -0
  224. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/key/__init__.py +0 -0
  225. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/key/key_generator.py +0 -0
  226. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/validators/__init__.py +0 -0
  227. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/validators/key_name.py +0 -0
  228. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/validators/types.py +0 -0
  229. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/__init__.py +0 -0
  230. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/contracts/__init__.py +0 -0
  231. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/contracts/inspire.py +0 -0
  232. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/inspire.py +0 -0
  233. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/quotes.py +0 -0
  234. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/__init__.py +0 -0
  235. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/__init__.py +0 -0
  236. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/contracts/__init__.py +0 -0
  237. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/contracts/reflection.py +0 -0
  238. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/reflection.py +0 -0
  239. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/__init__.py +0 -0
  240. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/contracts/__init__.py +0 -0
  241. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/contracts/reflection.py +0 -0
  242. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/reflection.py +0 -0
  243. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/__init__.py +0 -0
  244. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/contracts/__init__.py +0 -0
  245. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/contracts/reflection.py +0 -0
  246. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/reflection.py +0 -0
  247. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/__init__.py +0 -0
  248. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/contracts/__init__.py +0 -0
  249. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/contracts/reflection.py +0 -0
  250. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/entities/__init__.py +0 -0
  251. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/entities/argument.py +0 -0
  252. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/entities/resolve_argument.py +0 -0
  253. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/reflection.py +0 -0
  254. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/__init__.py +0 -0
  255. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/attribute.py +0 -0
  256. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/type.py +0 -0
  257. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/value.py +0 -0
  258. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/__init__.py +0 -0
  259. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/contracts/__init__.py +0 -0
  260. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/contracts/reflection.py +0 -0
  261. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/reflection.py +0 -0
  262. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/__init__.py +0 -0
  263. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/contracts/__init__.py +0 -0
  264. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/contracts/reflection.py +0 -0
  265. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/reflection.py +0 -0
  266. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/objects/__init__.py +0 -0
  267. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/objects/types.py +0 -0
  268. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/reflection.py +0 -0
  269. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/__init__.py +0 -0
  270. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/contracts/__init__.py +0 -0
  271. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/contracts/log_service.py +0 -0
  272. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/exceptions/__init__.py +0 -0
  273. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/exceptions/runtime.py +0 -0
  274. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/__init__.py +0 -0
  275. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/filename.py +0 -0
  276. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/size_rotating.py +0 -0
  277. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/timed_rotating.py +0 -0
  278. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/log_service.py +0 -0
  279. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/__init__.py +0 -0
  280. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/contracts/__init__.py +0 -0
  281. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/contracts/imports.py +0 -0
  282. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/contracts/workers.py +0 -0
  283. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/imports.py +0 -0
  284. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/runtime/__init__.py +0 -0
  285. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/runtime/imports.py +0 -0
  286. {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/workers.py +0 -0
  287. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/__init__.py +0 -0
  288. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/entities/__init__.py +0 -0
  289. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/entities/base.py +0 -0
  290. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/__init__.py +0 -0
  291. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/console.py +0 -0
  292. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/dumper.py +0 -0
  293. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/executor.py +0 -0
  294. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/inspire.py +0 -0
  295. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/logger.py +0 -0
  296. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/progress_bar.py +0 -0
  297. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/reactor.py +0 -0
  298. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/testing.py +0 -0
  299. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/workers.py +0 -0
  300. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/__init__.py +0 -0
  301. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/__init__.py +0 -0
  302. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/contracts/__init__.py +0 -0
  303. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/contracts/parser.py +0 -0
  304. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/parser.py +0 -0
  305. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/serializer.py +0 -0
  306. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/patterns/__init__.py +0 -0
  307. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/patterns/singleton/__init__.py +0 -0
  308. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/patterns/singleton/meta.py +0 -0
  309. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/__init__.py +0 -0
  310. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/contracts/__init__.py +0 -0
  311. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/contracts/std.py +0 -0
  312. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/exceptions/__init__.py +0 -0
  313. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/exceptions/value.py +0 -0
  314. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/std.py +0 -0
  315. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/wrapper/__init__.py +0 -0
  316. {orionis-0.473.0 → orionis-0.474.0}/orionis/support/wrapper/dot_dict.py +0 -0
  317. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/__init__.py +0 -0
  318. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/cases/__init__.py +0 -0
  319. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/cases/asynchronous.py +0 -0
  320. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/cases/synchronous.py +0 -0
  321. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/__init__.py +0 -0
  322. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/dumper.py +0 -0
  323. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/kernel.py +0 -0
  324. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/logs.py +0 -0
  325. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/printer.py +0 -0
  326. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/render.py +0 -0
  327. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/test_result.py +0 -0
  328. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/unit_test.py +0 -0
  329. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/core/__init__.py +0 -0
  330. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/core/unit_test.py +0 -0
  331. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/entities/__init__.py +0 -0
  332. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/entities/result.py +0 -0
  333. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/enums/__init__.py +0 -0
  334. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/enums/status.py +0 -0
  335. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/__init__.py +0 -0
  336. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/config.py +0 -0
  337. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/failure.py +0 -0
  338. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/persistence.py +0 -0
  339. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/runtime.py +0 -0
  340. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/value.py +0 -0
  341. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/kernel.py +0 -0
  342. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/output/__init__.py +0 -0
  343. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/output/dumper.py +0 -0
  344. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/output/printer.py +0 -0
  345. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/records/__init__.py +0 -0
  346. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/records/logs.py +0 -0
  347. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/__init__.py +0 -0
  348. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/base_path.py +0 -0
  349. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/execution_mode.py +0 -0
  350. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/fail_fast.py +0 -0
  351. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/folder_path.py +0 -0
  352. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/module_name.py +0 -0
  353. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/name_pattern.py +0 -0
  354. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/pattern.py +0 -0
  355. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/persistent.py +0 -0
  356. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/persistent_driver.py +0 -0
  357. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/print_result.py +0 -0
  358. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/tags.py +0 -0
  359. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/throw_exception.py +0 -0
  360. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/verbosity.py +0 -0
  361. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/web_report.py +0 -0
  362. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/workers.py +0 -0
  363. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/view/__init__.py +0 -0
  364. {orionis-0.473.0 → orionis-0.474.0}/orionis/test/view/render.py +0 -0
  365. {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/SOURCES.txt +0 -0
  366. {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/dependency_links.txt +0 -0
  367. {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/requires.txt +0 -0
  368. {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/top_level.txt +0 -0
  369. {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/zip-safe +0 -0
  370. {orionis-0.473.0 → orionis-0.474.0}/setup.cfg +0 -0
  371. {orionis-0.473.0 → orionis-0.474.0}/setup.py +0 -0
  372. {orionis-0.473.0 → orionis-0.474.0}/tests/__init__.py +0 -0
  373. {orionis-0.473.0 → orionis-0.474.0}/tests/container/__init__.py +0 -0
  374. {orionis-0.473.0 → orionis-0.474.0}/tests/container/context/__init__.py +0 -0
  375. {orionis-0.473.0 → orionis-0.474.0}/tests/container/context/test_manager.py +0 -0
  376. {orionis-0.473.0 → orionis-0.474.0}/tests/container/context/test_scope.py +0 -0
  377. {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/__init__.py +0 -0
  378. {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_advanced_async.py +0 -0
  379. {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_async_optimizations.py +0 -0
  380. {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_container.py +0 -0
  381. {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_singleton.py +0 -0
  382. {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_thread_safety.py +0 -0
  383. {orionis-0.473.0 → orionis-0.474.0}/tests/container/entities/__init__.py +0 -0
  384. {orionis-0.473.0 → orionis-0.474.0}/tests/container/entities/test_binding.py +0 -0
  385. {orionis-0.473.0 → orionis-0.474.0}/tests/container/enums/__init__.py +0 -0
  386. {orionis-0.473.0 → orionis-0.474.0}/tests/container/enums/test_lifetimes.py +0 -0
  387. {orionis-0.473.0 → orionis-0.474.0}/tests/container/facades/__init__.py +0 -0
  388. {orionis-0.473.0 → orionis-0.474.0}/tests/container/facades/test_facade.py +0 -0
  389. {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/__init__.py +0 -0
  390. {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_advanced_async.py +0 -0
  391. {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_async_optimizations.py +0 -0
  392. {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_auto_resolution.py +0 -0
  393. {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_complex_classes.py +0 -0
  394. {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_simple_classes.py +0 -0
  395. {orionis-0.473.0 → orionis-0.474.0}/tests/container/providers/__init__.py +0 -0
  396. {orionis-0.473.0 → orionis-0.474.0}/tests/container/providers/test_providers.py +0 -0
  397. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/__init__.py +0 -0
  398. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_implements.py +0 -0
  399. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_abstract_class.py +0 -0
  400. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_callable.py +0 -0
  401. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_concrete_class.py +0 -0
  402. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_instance.py +0 -0
  403. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_not_subclass.py +0 -0
  404. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_subclass.py +0 -0
  405. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_valid_alias.py +0 -0
  406. {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_lifetime.py +0 -0
  407. {orionis-0.473.0 → orionis-0.474.0}/tests/example/__init__.py +0 -0
  408. {orionis-0.473.0 → orionis-0.474.0}/tests/example/test_example.py +0 -0
  409. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/__init__.py +0 -0
  410. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/__init__.py +0 -0
  411. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/app/__init__.py +0 -0
  412. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
  413. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/auth/__init__.py +0 -0
  414. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
  415. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/__init__.py +0 -0
  416. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
  417. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
  418. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
  419. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cors/__init__.py +0 -0
  420. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
  421. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/__init__.py +0 -0
  422. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
  423. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
  424. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
  425. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
  426. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
  427. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
  428. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/__init__.py +0 -0
  429. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
  430. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
  431. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
  432. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
  433. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
  434. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/__init__.py +0 -0
  435. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
  436. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
  437. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +0 -0
  438. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +0 -0
  439. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +0 -0
  440. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +0 -0
  441. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +0 -0
  442. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +0 -0
  443. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/__init__.py +0 -0
  444. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
  445. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
  446. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
  447. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
  448. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/__init__.py +0 -0
  449. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
  450. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
  451. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
  452. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/root/__init__.py +0 -0
  453. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
  454. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/session/__init__.py +0 -0
  455. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
  456. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/startup/__init__.py +0 -0
  457. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
  458. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/testing/__init__.py +0 -0
  459. {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
  460. {orionis-0.473.0 → orionis-0.474.0}/tests/metadata/__init__.py +0 -0
  461. {orionis-0.473.0 → orionis-0.474.0}/tests/metadata/test_metadata_framework.py +0 -0
  462. {orionis-0.473.0 → orionis-0.474.0}/tests/metadata/test_metadata_package.py +0 -0
  463. {orionis-0.473.0 → orionis-0.474.0}/tests/services/__init__.py +0 -0
  464. {orionis-0.473.0 → orionis-0.474.0}/tests/services/asynchrony/__init__.py +0 -0
  465. {orionis-0.473.0 → orionis-0.474.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +0 -0
  466. {orionis-0.473.0 → orionis-0.474.0}/tests/services/environment/__init__.py +0 -0
  467. {orionis-0.473.0 → orionis-0.474.0}/tests/services/environment/test_services_environment.py +0 -0
  468. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/__init__.py +0 -0
  469. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/__init__.py +0 -0
  470. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/__init__.py +0 -0
  471. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/mock_user.py +0 -0
  472. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/mock_user_controller.py +0 -0
  473. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/mock_users_permissions.py +0 -0
  474. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/test_reflect_dependencies.py +0 -0
  475. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/__init__.py +0 -0
  476. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/mock/__init__.py +0 -0
  477. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/mock/fake_reflect_instance.py +0 -0
  478. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_abstract.py +0 -0
  479. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_callable.py +0 -0
  480. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_concrete.py +0 -0
  481. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_instance.py +0 -0
  482. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_module.py +0 -0
  483. {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/test_reflection.py +0 -0
  484. {orionis-0.473.0 → orionis-0.474.0}/tests/services/log/__init__.py +0 -0
  485. {orionis-0.473.0 → orionis-0.474.0}/tests/services/log/test_log.py +0 -0
  486. {orionis-0.473.0 → orionis-0.474.0}/tests/services/system/__init__.py +0 -0
  487. {orionis-0.473.0 → orionis-0.474.0}/tests/services/system/test_services_system_imports.py +0 -0
  488. {orionis-0.473.0 → orionis-0.474.0}/tests/services/system/test_services_system_workers.py +0 -0
  489. {orionis-0.473.0 → orionis-0.474.0}/tests/support/__init__.py +0 -0
  490. {orionis-0.473.0 → orionis-0.474.0}/tests/support/entities/__init__.py +0 -0
  491. {orionis-0.473.0 → orionis-0.474.0}/tests/support/entities/mock_dataclass.py +0 -0
  492. {orionis-0.473.0 → orionis-0.474.0}/tests/support/entities/test_base.py +0 -0
  493. {orionis-0.473.0 → orionis-0.474.0}/tests/support/patterns/__init__.py +0 -0
  494. {orionis-0.473.0 → orionis-0.474.0}/tests/support/patterns/singleton/__init__.py +0 -0
  495. {orionis-0.473.0 → orionis-0.474.0}/tests/support/patterns/singleton/test_patterns_singleton.py +0 -0
  496. {orionis-0.473.0 → orionis-0.474.0}/tests/support/standard/__init__.py +0 -0
  497. {orionis-0.473.0 → orionis-0.474.0}/tests/support/standard/test_services_std.py +0 -0
  498. {orionis-0.473.0 → orionis-0.474.0}/tests/support/wrapper/__init__.py +0 -0
  499. {orionis-0.473.0 → orionis-0.474.0}/tests/support/wrapper/test_services_wrapper_docdict.py +0 -0
  500. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/__init__.py +0 -0
  501. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/cases/__init__.py +0 -0
  502. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/cases/test_testing_asynchronous.py +0 -0
  503. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/cases/test_testing_synchronous.py +0 -0
  504. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/entities/__init__.py +0 -0
  505. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/entities/test_testing_result.py +0 -0
  506. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/enums/__init__.py +0 -0
  507. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/enums/test_testing_status.py +0 -0
  508. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/output/__init__.py +0 -0
  509. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/output/test_testing_dumper.py +0 -0
  510. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/output/test_testing_printer.py +0 -0
  511. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/records/__init__.py +0 -0
  512. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/records/test_testing_records.py +0 -0
  513. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/test_testing_unit.py +0 -0
  514. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/validators/__init__.py +0 -0
  515. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/validators/test_testing_validators.py +0 -0
  516. {orionis-0.473.0 → orionis-0.474.0}/tests/testing/view/__init__.py +0 -0
  517. {orionis-0.473.0 → orionis-0.474.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.473.0
3
+ Version: 0.474.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,492 @@
1
+ from typing import Any, List, Optional
2
+ from apscheduler.schedulers.asyncio import AsyncIOScheduler as APSAsyncIOScheduler
3
+ from apscheduler.triggers.cron import CronTrigger
4
+ from apscheduler.triggers.date import DateTrigger
5
+ from apscheduler.triggers.interval import IntervalTrigger
6
+ from orionis.console.contracts.reactor import IReactor
7
+ from datetime import datetime
8
+ import pytz
9
+ import asyncio
10
+ from orionis.console.exceptions import CLIOrionisRuntimeError
11
+ from orionis.app import Orionis
12
+
13
+ class Scheduler():
14
+
15
+ def __init__(
16
+ self,
17
+ reactor: IReactor
18
+ ) -> None:
19
+ """
20
+ Initialize a new instance of the Scheduler class.
21
+
22
+ This constructor sets up the internal state required for scheduling commands,
23
+ including references to the application instance, AsyncIOScheduler, the
24
+ command reactor, and job tracking structures. It also initializes properties
25
+ for managing the current scheduling context.
26
+
27
+ Parameters
28
+ ----------
29
+ reactor : IReactor
30
+ An instance of a class implementing the IReactor interface, used to
31
+ retrieve available commands and execute scheduled jobs.
32
+
33
+ Returns
34
+ -------
35
+ None
36
+ This method does not return any value. It initializes the Scheduler instance.
37
+ """
38
+
39
+ # Store the application instance for configuration access.
40
+ self.__app = Orionis()
41
+
42
+ # Initialize AsyncIOScheduler instance with timezone configuration.
43
+ self.__scheduler: APSAsyncIOScheduler = APSAsyncIOScheduler(
44
+ timezone=pytz.timezone(self.__app.config('app.timezone', 'UTC'))
45
+ )
46
+
47
+ # Store the reactor instance for command management.
48
+ self.__reactor = reactor
49
+
50
+ # Retrieve and store all available commands from the reactor.
51
+ self.__available_commands = self.__getCommands()
52
+
53
+ # Dictionary to hold all scheduled jobs and their details.
54
+ self.__jobs: dict = {}
55
+
56
+ # Properties to track the current scheduling context.
57
+ self.__command: str = None # The command signature to be scheduled.
58
+ self.__args: List[str] = None # Arguments for the command.
59
+ self.__purpose: str = None # Purpose or description of the scheduled job.
60
+
61
+ def __getCommands(
62
+ self
63
+ ) -> dict:
64
+ """
65
+ Retrieve available commands from the reactor and return them as a dictionary.
66
+
67
+ This method queries the reactor for all available jobs/commands, extracting their
68
+ signatures and descriptions. The result is a dictionary where each key is the command
69
+ signature and the value is another dictionary containing the command's signature and
70
+ its description.
71
+
72
+ Returns
73
+ -------
74
+ dict
75
+ A dictionary mapping command signatures to their details. Each value is a dictionary
76
+ with 'signature' and 'description' keys.
77
+ """
78
+
79
+ # Initialize the commands dictionary
80
+ commands = {}
81
+
82
+ # Iterate over all jobs provided by the reactor's info method
83
+ for job in self.__reactor.info():
84
+
85
+ # Store each job's signature and description in the commands dictionary
86
+ commands[job['signature']] = {
87
+ 'signature': job['signature'],
88
+ 'description': job.get('description', '')
89
+ }
90
+
91
+ # Return the commands dictionary
92
+ return commands
93
+
94
+ def __isAvailable(
95
+ self,
96
+ signature: str
97
+ ) -> bool:
98
+ """
99
+ Check if a command with the given signature is available.
100
+
101
+ This method iterates through the available commands and determines
102
+ whether the provided signature matches any registered command.
103
+
104
+ Parameters
105
+ ----------
106
+ signature : str
107
+ The signature of the command to check for availability.
108
+
109
+ Returns
110
+ -------
111
+ bool
112
+ True if the command with the specified signature exists and is available,
113
+ False otherwise.
114
+ """
115
+
116
+ # Iterate through all available command signatures
117
+ for command in self.__available_commands.keys():
118
+
119
+ # Return True if the signature matches an available command
120
+ if command == signature:
121
+ return True
122
+
123
+ # Return False if the signature is not found among available commands
124
+ return False
125
+
126
+ def __getDescription(
127
+ self,
128
+ signature: str
129
+ ) -> Optional[str]:
130
+ """
131
+ Retrieve the description of a command given its signature.
132
+
133
+ This method looks up the available commands dictionary and returns the description
134
+ associated with the provided command signature. If the signature does not exist,
135
+ it returns None.
136
+
137
+ Parameters
138
+ ----------
139
+ signature : str
140
+ The unique signature identifying the command.
141
+
142
+ Returns
143
+ -------
144
+ Optional[str]
145
+ The description of the command if found; otherwise, None.
146
+ """
147
+
148
+ # Attempt to retrieve the command entry from the available commands dictionary
149
+ command_entry = self.__available_commands.get(signature)
150
+
151
+ # Return the description if the command exists, otherwise return None
152
+ return command_entry['description'] if command_entry else None
153
+
154
+ def __reset(
155
+ self
156
+ ) -> None:
157
+ """
158
+ Reset the internal state of the Scheduler instance.
159
+
160
+ This method clears the current command, arguments, and purpose attributes,
161
+ effectively resetting the scheduler's configuration to its initial state.
162
+ This can be useful for preparing the scheduler for a new command or job
163
+ scheduling without retaining any previous settings.
164
+
165
+ Returns
166
+ -------
167
+ None
168
+ This method does not return any value. It modifies the internal state of the Scheduler.
169
+ """
170
+
171
+ self.__command = None
172
+ self.__args = None
173
+ self.__purpose = None
174
+
175
+ def command(
176
+ self,
177
+ signature: str,
178
+ args: Optional[List[str]] = None
179
+ ) -> 'Scheduler':
180
+ """
181
+ Register a command to be scheduled with the specified signature and optional arguments.
182
+
183
+ This method validates the provided command signature and arguments, checks if the command
184
+ is available in the list of registered commands, and stores the command details internally
185
+ for scheduling. The command's description is also retrieved and stored for reference.
186
+
187
+ Parameters
188
+ ----------
189
+ signature : str
190
+ The unique signature identifying the command to be scheduled. Must be a non-empty string.
191
+ args : Optional[List[str]], optional
192
+ A list of string arguments to be passed to the command. If not provided, an empty list is used.
193
+
194
+ Returns
195
+ -------
196
+ Scheduler
197
+ Returns the current instance of the Scheduler to allow method chaining.
198
+
199
+ Raises
200
+ ------
201
+ ValueError
202
+ If the signature is not a non-empty string, if the arguments are not a list or None,
203
+ or if the command signature is not available among registered commands.
204
+ """
205
+
206
+ # Validate that the command signature is a non-empty string
207
+ if not isinstance(signature, str) or not signature.strip():
208
+ raise ValueError("Command signature must be a non-empty string.")
209
+
210
+ # Ensure that arguments are either a list of strings or None
211
+ if args is not None and not isinstance(args, list):
212
+ raise ValueError("Arguments must be a list of strings or None.")
213
+
214
+ # Check if the command is available in the registered commands
215
+ if not self.__isAvailable(signature):
216
+ raise ValueError(f"The command '{signature}' is not available or does not exist.")
217
+
218
+ # Store the command signature
219
+ self.__command = signature
220
+
221
+ # If purpose is not already set, retrieve and set the command's description
222
+ if self.__purpose is None:
223
+ self.__purpose = self.__getDescription(signature)
224
+
225
+ # Store the provided arguments or default to an empty list
226
+ self.__args = args if args is not None else []
227
+
228
+ # Return self to support method chaining
229
+ return self
230
+
231
+ def purpose(
232
+ self,
233
+ purpose: str
234
+ ) -> 'Scheduler':
235
+ """
236
+ Set the purpose or description for the scheduled command.
237
+
238
+ This method assigns a human-readable purpose or description to the command
239
+ that is being scheduled. The purpose must be a non-empty string. This can
240
+ be useful for documentation, logging, or displaying information about the
241
+ scheduled job.
242
+
243
+ Parameters
244
+ ----------
245
+ purpose : str
246
+ The purpose or description to associate with the scheduled command.
247
+ Must be a non-empty string.
248
+
249
+ Returns
250
+ -------
251
+ Scheduler
252
+ Returns the current instance of the Scheduler to allow method chaining.
253
+
254
+ Raises
255
+ ------
256
+ ValueError
257
+ If the provided purpose is not a non-empty string.
258
+ """
259
+
260
+ # Validate that the purpose is a non-empty string
261
+ if not isinstance(purpose, str) or not purpose.strip():
262
+ raise ValueError("The purpose must be a non-empty string.")
263
+
264
+ # Set the internal purpose attribute
265
+ self.__purpose = purpose
266
+
267
+ # Return self to support method chaining
268
+ return self
269
+
270
+ def onceAt(
271
+ self,
272
+ date: datetime
273
+ ) -> bool:
274
+ """
275
+ Schedule a command to run once at a specific date and time.
276
+
277
+ This method schedules the currently registered command to execute exactly once at the
278
+ specified datetime using the AsyncIOScheduler. The job is registered internally and
279
+ added to the scheduler instance.
280
+
281
+ Parameters
282
+ ----------
283
+ date : datetime.datetime
284
+ The date and time at which the command should be executed. Must be a valid `datetime` instance.
285
+
286
+ Returns
287
+ -------
288
+ bool
289
+ Returns True if the job was successfully scheduled.
290
+
291
+ Raises
292
+ ------
293
+ CLIOrionisRuntimeError
294
+ If the provided date is not a `datetime` instance or if there is an error while scheduling the job.
295
+ """
296
+
297
+ try:
298
+
299
+ # Ensure the provided date is a valid datetime instance.
300
+ if not isinstance(date, datetime):
301
+ raise CLIOrionisRuntimeError(
302
+ "The date must be an instance of datetime."
303
+ )
304
+
305
+ # Register the job details internally.
306
+ self.__jobs[self.__command] = {
307
+ 'signature': self.__command,
308
+ 'args': self.__args,
309
+ 'purpose': self.__purpose,
310
+ 'trigger': 'once_at',
311
+ 'start_at': date.strftime('%Y-%m-%d %H:%M:%S'),
312
+ 'end_at': date.strftime('%Y-%m-%d %H:%M:%S')
313
+ }
314
+
315
+ # Add the job to the scheduler.
316
+ self.__scheduler.add_job(
317
+ func= lambda command=self.__command, args=list(self.__args): self.__reactor.call(
318
+ command,
319
+ args
320
+ ),
321
+ trigger=DateTrigger(
322
+ run_date=date
323
+ ),
324
+ id=self.__command,
325
+ name=self.__command,
326
+ replace_existing=True
327
+ )
328
+
329
+ # Reset the internal state for future scheduling.
330
+ self.__reset()
331
+
332
+ # Return True to indicate successful scheduling.
333
+ return True
334
+
335
+ except Exception as e:
336
+
337
+ # Reraise known CLIOrionisRuntimeError exceptions.
338
+ if isinstance(e, CLIOrionisRuntimeError):
339
+ raise e
340
+
341
+ # Wrap and raise any other exceptions as CLIOrionisRuntimeError.
342
+ raise CLIOrionisRuntimeError(f"Error scheduling the job: {str(e)}")
343
+
344
+ async def start(self) -> None:
345
+ """
346
+ Start the AsyncIO scheduler instance and keep it running.
347
+
348
+ This method initiates the AsyncIOScheduler which integrates with asyncio event loops
349
+ for asynchronous job execution. It ensures the scheduler starts properly within
350
+ an asyncio context and maintains the event loop active to process scheduled jobs.
351
+
352
+ Returns
353
+ -------
354
+ None
355
+ This method does not return any value. It starts the AsyncIO scheduler and keeps it running.
356
+ """
357
+
358
+ # Start the AsyncIOScheduler to handle asynchronous jobs.
359
+ try:
360
+
361
+ # Ensure we're in an asyncio context
362
+ asyncio.get_running_loop()
363
+
364
+ # Start the scheduler
365
+ if not self.__scheduler.running:
366
+ self.__scheduler.start()
367
+
368
+ # Keep the event loop alive to process scheduled jobs
369
+ try:
370
+
371
+ # Wait for the scheduler to start and keep it running
372
+ while True:
373
+ await asyncio.sleep(1)
374
+
375
+ except KeyboardInterrupt:
376
+
377
+ # Handle graceful shutdown on keyboard interrupt
378
+ await self.shutdown()
379
+
380
+ except Exception as e:
381
+
382
+ # Handle exceptions that may occur during scheduler startup
383
+ raise CLIOrionisRuntimeError(f"Failed to start the scheduler: {str(e)}")
384
+
385
+ async def shutdown(self, wait=True) -> None:
386
+ """
387
+ Shut down the AsyncIO scheduler instance asynchronously.
388
+
389
+ This method gracefully stops the AsyncIOScheduler that handles asynchronous job execution.
390
+ Using async ensures proper cleanup in asyncio environments.
391
+
392
+ Parameters
393
+ ----------
394
+ wait : bool, optional
395
+ If True, the method will wait until all currently executing jobs are completed before shutting down the scheduler.
396
+ If False, the scheduler will be shut down immediately without waiting for running jobs to finish. Default is True.
397
+
398
+ Returns
399
+ -------
400
+ None
401
+ This method does not return any value. It shuts down the AsyncIO scheduler.
402
+ """
403
+
404
+ # Validate that the wait parameter is a boolean.
405
+ if not isinstance(wait, bool):
406
+ raise ValueError("The 'wait' parameter must be a boolean value.")
407
+
408
+ try:
409
+
410
+ # Shut down the AsyncIOScheduler, waiting for jobs if specified.
411
+ if self.__scheduler.running:
412
+
413
+ # For AsyncIOScheduler, shutdown can be called normally
414
+ # but we await any pending operations
415
+ self.__scheduler.shutdown(wait=wait)
416
+
417
+ # Give a small delay to ensure proper cleanup
418
+ if wait:
419
+ await asyncio.sleep(0.1)
420
+
421
+ except Exception:
422
+
423
+ # AsyncIOScheduler may not be running or may have issues in shutdown
424
+ pass
425
+
426
+ async def remove(self, signature: str) -> bool:
427
+ """
428
+ Remove a scheduled job from the AsyncIO scheduler asynchronously.
429
+
430
+ This method removes a job with the specified signature from both the internal
431
+ jobs dictionary and the AsyncIOScheduler instance. Using async ensures proper
432
+ cleanup in asyncio environments.
433
+
434
+ Parameters
435
+ ----------
436
+ signature : str
437
+ The signature of the command/job to remove from the scheduler.
438
+
439
+ Returns
440
+ -------
441
+ bool
442
+ Returns True if the job was successfully removed, False if the job was not found.
443
+
444
+ Raises
445
+ ------
446
+ ValueError
447
+ If the signature is not a non-empty string.
448
+ """
449
+
450
+ # Validate that the signature is a non-empty string
451
+ if not isinstance(signature, str) or not signature.strip():
452
+ raise ValueError("Signature must be a non-empty string.")
453
+
454
+ try:
455
+
456
+ # Remove from the scheduler
457
+ self.__scheduler.remove_job(signature)
458
+
459
+ # Remove from internal jobs dictionary
460
+ if signature in self.__jobs:
461
+ del self.__jobs[signature]
462
+
463
+ # Give a small delay to ensure proper cleanup
464
+ await asyncio.sleep(0.01)
465
+
466
+ # Return True to indicate successful removal
467
+ return True
468
+
469
+ except Exception:
470
+
471
+ # Job not found or other error
472
+ return False
473
+
474
+ def jobs(self) -> dict:
475
+ """
476
+ Retrieve all scheduled jobs currently managed by the Scheduler.
477
+
478
+ This method returns a dictionary containing information about all jobs that have been
479
+ registered and scheduled through this Scheduler instance. Each entry in the dictionary
480
+ represents a scheduled job, where the key is the command signature and the value is a
481
+ dictionary with details such as the signature, arguments, purpose, type, trigger, start time,
482
+ and end time.
483
+
484
+ Returns
485
+ -------
486
+ dict
487
+ A dictionary mapping command signatures to their corresponding job details. Each value
488
+ is a dictionary containing information about the scheduled job.
489
+ """
490
+
491
+ # Return the internal dictionary holding all scheduled jobs and their details.
492
+ return self.__jobs
@@ -5,7 +5,7 @@
5
5
  NAME = "orionis"
6
6
 
7
7
  # Current version of the framework
8
- VERSION = "0.473.0"
8
+ VERSION = "0.474.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.473.0
3
+ Version: 0.474.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