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