DefStream-RabbitMQ 0.1.23__tar.gz → 0.1.24__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 (409) hide show
  1. defstream_rabbitmq-0.1.24/.github/scripts/run_core_tests.py +26 -0
  2. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/workflows/ci.yml +117 -29
  3. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/PKG-INFO +2 -2
  4. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/build/RabbitMQ/DefStream_RabbitMQ.egg-info/SOURCES.txt +61 -12
  5. defstream_rabbitmq-0.1.24/issues/task/39/CHANGELOG.md +3 -0
  6. defstream_rabbitmq-0.1.24/issues/task/39/IMPLEMENTS.md +33 -0
  7. defstream_rabbitmq-0.1.24/issues/task/39/PLAN.md +52 -0
  8. defstream_rabbitmq-0.1.24/issues/task/39/README.md +85 -0
  9. defstream_rabbitmq-0.1.24/issues/task/39/REQUIREMENTS.md +54 -0
  10. defstream_rabbitmq-0.1.24/issues/task/39/TASKS.md +70 -0
  11. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793623390266.md +9 -0
  12. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793625464717.md +7 -0
  13. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793626388737.md +7 -0
  14. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793626820522.md +7 -0
  15. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793627348502.md +7 -0
  16. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793628366252.md +7 -0
  17. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793629199999.md +7 -0
  18. defstream_rabbitmq-0.1.24/issues/task/39/implements/1793631035346.md +5 -0
  19. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793620359610.md +9 -0
  20. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793621161604.md +7 -0
  21. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793621502459.md +19 -0
  22. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793621903677.md +7 -0
  23. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793623390265.md +9 -0
  24. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793625269565.md +15 -0
  25. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793626388737.md +7 -0
  26. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793626820522.md +5 -0
  27. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793627348502.md +7 -0
  28. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793627590185.md +5 -0
  29. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793628366252.md +16 -0
  30. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793629199998.md +15 -0
  31. defstream_rabbitmq-0.1.24/issues/task/39/tasks/1793631035345.md +10 -0
  32. defstream_rabbitmq-0.1.24/res/docker/rabbitmq/README.md +58 -0
  33. defstream_rabbitmq-0.1.24/res/docker/rabbitmq/enabled_plugins +1 -0
  34. defstream_rabbitmq-0.1.24/res/docker/rabbitmq/rabbitmq-3.yml +22 -0
  35. defstream_rabbitmq-0.1.24/res/docker/rabbitmq/rabbitmq-4.yml +22 -0
  36. defstream_rabbitmq-0.1.24/res/docker/redis/README.md +46 -0
  37. defstream_rabbitmq-0.1.24/res/docker/redis/redis-6.yml +14 -0
  38. defstream_rabbitmq-0.1.24/res/docker/redis/redis-7.yml +14 -0
  39. defstream_rabbitmq-0.1.24/tests/__init__.py +0 -0
  40. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/_support.py +9 -0
  41. defstream_rabbitmq-0.1.24/tests/_support_inspector.py +228 -0
  42. defstream_rabbitmq-0.1.24/tests/_support_inspector_play.py +289 -0
  43. defstream_rabbitmq-0.1.24/tests/_support_task_messages.py +40 -0
  44. defstream_rabbitmq-0.1.24/tests/rabbitmq/__init__.py +0 -0
  45. defstream_rabbitmq-0.1.24/tests/rabbitmq/test_inspector.py +26 -0
  46. defstream_rabbitmq-0.1.24/tests/rabbitmq/test_inspector_play.py +29 -0
  47. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_integration.py +10 -2
  48. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_logging.py +2 -2
  49. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_priorities.py +4 -3
  50. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_rpc.py +1 -1
  51. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_rpc_integration.py +7 -3
  52. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_timeouts.py +1 -1
  53. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_worker.py +1 -1
  54. defstream_rabbitmq-0.1.24/tests/rabbitmq/test_specifications.py +106 -0
  55. defstream_rabbitmq-0.1.24/tests/rabbitmq/test_task_messages.py +162 -0
  56. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_task_priorities.py +0 -68
  57. defstream_rabbitmq-0.1.24/tests/redis/__init__.py +0 -0
  58. defstream_rabbitmq-0.1.24/tests/redis/test_inspector.py +23 -0
  59. defstream_rabbitmq-0.1.24/tests/redis/test_inspector_play.py +24 -0
  60. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/redis}/test_redis_integration.py +7 -4
  61. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/redis}/test_redis_logging.py +2 -2
  62. defstream_rabbitmq-0.1.24/tests/redis/test_task_messages.py +201 -0
  63. defstream_rabbitmq-0.1.24/tests/redis/test_task_priorities.py +98 -0
  64. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_broker_packaging.py +36 -13
  65. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_inspector.py +6 -233
  66. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_inspector_logging.py +1 -1
  67. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_inspector_play.py +9 -324
  68. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_lifecycle_hooks.py +1 -1
  69. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_protocol_contracts.py +1 -1
  70. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_runner_hooks.py +1 -1
  71. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_specifications.py +1 -95
  72. defstream_rabbitmq-0.1.24/tests/test_task_messages.py +251 -0
  73. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_worker.py +1 -1
  74. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_worker_recovery.py +1 -1
  75. defstream_rabbitmq-0.1.23/tests/test_task_messages.py +0 -712
  76. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.dev/scripts/editable_view.py +0 -0
  77. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.dev/scripts/tests/__init__.py +0 -0
  78. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.dev/scripts/tests/test_editable_view.py +0 -0
  79. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.distribution-target +0 -0
  80. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/ISSUE_TEMPLATE/01.feature.yml +0 -0
  81. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/ISSUE_TEMPLATE/02.bug.yml +0 -0
  82. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/ISSUE_TEMPLATE/03.fix.yml +0 -0
  83. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/ISSUE_TEMPLATE/04.task.yml +0 -0
  84. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  85. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  86. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/build_backend.py +0 -0
  87. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/build_distributions.py +0 -0
  88. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/check_distributions.py +0 -0
  89. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/create-issues-from-reviews.mjs +0 -0
  90. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/create-pr-from-issue.mjs +0 -0
  91. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/prepare_upload.py +0 -0
  92. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/tests/__init__.py +0 -0
  93. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/tests/create-issues-from-reviews.test.mjs +0 -0
  94. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/tests/create-pr-from-issue.test.mjs +0 -0
  95. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/tests/test_build_backend.py +0 -0
  96. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/tests/test_distributions.py +0 -0
  97. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/scripts/tests/test_release.py +0 -0
  98. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/workflows/create-issues-from-reviews.yml +0 -0
  99. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.github/workflows/create-pr-from-issue.yml +0 -0
  100. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/.gitignore +0 -0
  101. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/LICENSE +0 -0
  102. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/README.en.md +0 -0
  103. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/README.md +0 -0
  104. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/README.setup.md +0 -0
  105. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Contracts.en.md +0 -0
  106. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Contracts.md +0 -0
  107. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/GettingStarted.en.md +0 -0
  108. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/GettingStarted.md +0 -0
  109. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/LifecycleHooks.en.md +0 -0
  110. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/LifecycleHooks.md +0 -0
  111. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Operations.en.md +0 -0
  112. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Operations.md +0 -0
  113. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Packaging.en.md +0 -0
  114. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Packaging.md +0 -0
  115. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/README.en.md +0 -0
  116. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/README.md +0 -0
  117. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/RabbitMQ.en.md +0 -0
  118. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/RabbitMQ.md +0 -0
  119. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Redis.en.md +0 -0
  120. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Redis.md +0 -0
  121. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Tasks.en.md +0 -0
  122. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/docs/Tasks.md +0 -0
  123. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/instructions/CODE.instructions.md +0 -0
  124. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/instructions/DOCS.instructions.md +0 -0
  125. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/instructions/README.instructions.md +0 -0
  126. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/bug/16/IMPLEMENTS.md +0 -0
  127. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/bug/16/ISSUE.md +0 -0
  128. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/bug/16/README.md +0 -0
  129. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/bug/16/REQUIREMENTS.md +0 -0
  130. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/1/IMPLEMENTS.md +0 -0
  131. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/1/README.md +0 -0
  132. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/1/REQUIREMENTS.md +0 -0
  133. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/1/TASK.md +0 -0
  134. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/1/ci.refs.json +0 -0
  135. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/CHANGELOG.md +0 -0
  136. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/IMPLEMENTS.md +0 -0
  137. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/PLAN.md +0 -0
  138. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/README.md +0 -0
  139. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/REQUIREMENTS.md +0 -0
  140. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/TASKS.md +0 -0
  141. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793274693488.md +0 -0
  142. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793275218996.md +0 -0
  143. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793275899489.md +0 -0
  144. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793276075771.md +0 -0
  145. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793276518340.md +0 -0
  146. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793277364116.md +0 -0
  147. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793278267422.md +0 -0
  148. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793278764701.md +0 -0
  149. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/implements/1793279849390.md +0 -0
  150. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793272872217.md +0 -0
  151. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793274121654.md +0 -0
  152. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793274231988.md +0 -0
  153. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793275218995.md +0 -0
  154. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793275501812.md +0 -0
  155. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793275955973.md +0 -0
  156. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793276099601.md +0 -0
  157. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793276518341.md +0 -0
  158. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793277424063.md +0 -0
  159. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793278267423.md +0 -0
  160. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793278764702.md +0 -0
  161. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/46/tasks/1793279849391.md +0 -0
  162. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/CHANGELOG.md +0 -0
  163. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/IMPLEMENTS.md +0 -0
  164. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/PLAN.md +0 -0
  165. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/README.md +0 -0
  166. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/REQUIREMENTS.md +0 -0
  167. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/TASKS.md +0 -0
  168. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/implements/1793271568985.md +0 -0
  169. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/implements/1793272077065.md +0 -0
  170. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/tasks/1793271236067.md +0 -0
  171. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/tasks/1793271384432.md +0 -0
  172. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/tasks/1793271506089.md +0 -0
  173. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/tasks/1793271819682.md +0 -0
  174. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/47/tasks/1793272077066.md +0 -0
  175. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/8/IMPLEMENTS.md +0 -0
  176. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/8/README.md +0 -0
  177. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/8/REQUIREMENTS.md +0 -0
  178. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/feature/8/ci.refs.json +0 -0
  179. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/10/IMPLEMENTS.md +0 -0
  180. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/10/README.md +0 -0
  181. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/10/REQUIREMENTS.md +0 -0
  182. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/13/README.md +0 -0
  183. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/21/IMPLEMENTS.md +0 -0
  184. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/21/ISSUE.md +0 -0
  185. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/21/README.md +0 -0
  186. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/21/REQUIREMENTS.md +0 -0
  187. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/24/IMPLEMENTS.md +0 -0
  188. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/24/ISSUE.md +0 -0
  189. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/24/README.md +0 -0
  190. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/24/REQUIREMENTS.md +0 -0
  191. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/25/IMPLEMENTS.md +0 -0
  192. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/25/ISSUE.md +0 -0
  193. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/25/README.md +0 -0
  194. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/25/REQUIREMENTS.md +0 -0
  195. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/25/TASK.md +0 -0
  196. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/26/IMPLEMENTS.md +0 -0
  197. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/26/ISSUE.md +0 -0
  198. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/26/README.md +0 -0
  199. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/26/REQUIREMENTS.md +0 -0
  200. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/29/ISSUE.md +0 -0
  201. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/29/README.md +0 -0
  202. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/29/REQUIREMENTS.md +0 -0
  203. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/29/TASK.md +0 -0
  204. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/3/IMPLEMENTS.md +0 -0
  205. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/3/README.md +0 -0
  206. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/3/REQUIREMENTS.md +0 -0
  207. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/3/ci.refs.json +0 -0
  208. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/CHANGELOG.md +0 -0
  209. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/IMPLEMENTS.md +0 -0
  210. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/PLAN.md +0 -0
  211. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/README.md +0 -0
  212. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/REQUIREMENTS.md +0 -0
  213. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/TASKS.md +0 -0
  214. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/implements/1793257519898.md +0 -0
  215. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/implements/1793257826069.md +0 -0
  216. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/tasks/1793256929057.md +0 -0
  217. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/tasks/1793256990072.md +0 -0
  218. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/tasks/1793257216492.md +0 -0
  219. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/tasks/1793257519899.md +0 -0
  220. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/41/tasks/1793257826068.md +0 -0
  221. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/CHANGELOG.md +0 -0
  222. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/IMPLEMENTS.md +0 -0
  223. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/PLAN.md +0 -0
  224. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/README.md +0 -0
  225. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/REQUIREMENTS.md +0 -0
  226. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/TASKS.md +0 -0
  227. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/implements/1793260818660.md +0 -0
  228. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/implements/1793261447018.md +0 -0
  229. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/tasks/1793260818661.md +0 -0
  230. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/tasks/1793261447019.md +0 -0
  231. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/43/tasks/1793262314955.md +0 -0
  232. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/CHANGELOG.md +0 -0
  233. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/IMPLEMENTS.md +0 -0
  234. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/PLAN.md +0 -0
  235. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/README.md +0 -0
  236. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/REQUIREMENTS.md +0 -0
  237. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/TASKS.md +0 -0
  238. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/implements/1793282630353.md +0 -0
  239. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/50/tasks/1793282630354.md +0 -0
  240. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/CHANGELOG.md +0 -0
  241. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/IMPLEMENTS.md +0 -0
  242. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/PLAN.md +0 -0
  243. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/README.md +0 -0
  244. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/REQUIREMENTS.md +0 -0
  245. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/TASKS.md +0 -0
  246. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793294516720.md +0 -0
  247. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793295445979.md +0 -0
  248. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793295838896.md +0 -0
  249. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793296500296.md +0 -0
  250. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793299630936.md +0 -0
  251. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793301537859.md +0 -0
  252. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793301829543.md +0 -0
  253. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793302547669.md +0 -0
  254. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793327181557.md +0 -0
  255. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793329241422.md +0 -0
  256. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793516005517.md +0 -0
  257. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793516879583.md +0 -0
  258. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793517548589.md +0 -0
  259. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/implements/1793518878753.md +0 -0
  260. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793294230195.md +0 -0
  261. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793295445976.md +0 -0
  262. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793295838893.md +0 -0
  263. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793296500299.md +0 -0
  264. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793297795667.md +0 -0
  265. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793299630939.md +0 -0
  266. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793301829546.md +0 -0
  267. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793302844699.md +0 -0
  268. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793327181558.md +0 -0
  269. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793327685707.md +0 -0
  270. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793328011412.md +0 -0
  271. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793329241423.md +0 -0
  272. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793516005518.md +0 -0
  273. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793516879584.md +0 -0
  274. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793517548590.md +0 -0
  275. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/53/tasks/1793518878754.md +0 -0
  276. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/6/IMPLEMENTS.md +0 -0
  277. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/6/README.md +0 -0
  278. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/fix/6/REQUIREMENTS.md +0 -0
  279. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/18/IMPLEMENTS.md +0 -0
  280. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/18/README.md +0 -0
  281. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/18/REQUIREMENTS.md +0 -0
  282. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/32/IMPLEMENTS.md +0 -0
  283. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/32/ISSUE.md +0 -0
  284. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/32/PLAN.md +0 -0
  285. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/32/README.md +0 -0
  286. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/32/REQUIREMENTS.md +0 -0
  287. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/32/TASK.md +0 -0
  288. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/34/CHANGELOG.md +0 -0
  289. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/34/IMPLEMENTS.md +0 -0
  290. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/34/PLAN.md +0 -0
  291. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/34/README.md +0 -0
  292. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/34/REQUIREMENTS.md +0 -0
  293. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/36/CHANGELOG.md +0 -0
  294. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/36/IMPLEMENTS.md +0 -0
  295. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/36/PLAN.md +0 -0
  296. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/36/README.md +0 -0
  297. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/36/REQUIREMENTS.md +0 -0
  298. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/CHANGELOG.md +0 -0
  299. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/IMPLEMENTS.md +0 -0
  300. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/PLAN.md +0 -0
  301. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/README.md +0 -0
  302. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/REQUIREMENTS.md +0 -0
  303. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/TASKS.md +0 -0
  304. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/docs/CopilotReviewIssues.md +0 -0
  305. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/docs/CopilotReviewIssuesSetup.md +0 -0
  306. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/implements/1793291844133.md +0 -0
  307. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/tasks/1793291844134.md +0 -0
  308. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/38/tasks/1793292234123.md +0 -0
  309. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/CHANGELOG.md +0 -0
  310. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/IMPLEMENTS.md +0 -0
  311. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/PLAN.md +0 -0
  312. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/README.md +0 -0
  313. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/REQUIREMENTS.md +0 -0
  314. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/TASKS.md +0 -0
  315. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/implements/1793395003714.md +0 -0
  316. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/tasks/1793395003713.md +0 -0
  317. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/issues/task/57/tasks/1793395058100.md +0 -0
  318. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/pyproject.toml +0 -0
  319. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Broker/RabbitMQ/Sample.RPC.py +0 -0
  320. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Broker/RabbitMQ/Sample.Stream.py +0 -0
  321. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Broker/RabbitMQ/Sample.py +0 -0
  322. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Broker/Redis/Sample.Stream.py +0 -0
  323. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Broker/Redis/Sample.py +0 -0
  324. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Broker/Sample.py +0 -0
  325. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Worker/RabbitMQ/Client.py +0 -0
  326. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Worker/RabbitMQ/Tasks.py +0 -0
  327. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Worker/RabbitMQ/Worker.py +0 -0
  328. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Worker/Redis/Sample.py +0 -0
  329. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/samples/Worker/Sample.py +0 -0
  330. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/setup.cfg +0 -0
  331. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/setup.py +0 -0
  332. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Configuration.py +0 -0
  333. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Connection.py +0 -0
  334. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Consumer.py +0 -0
  335. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Errors.py +0 -0
  336. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Event.py +0 -0
  337. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Configuration.py +0 -0
  338. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Connection.py +0 -0
  339. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Consumer.py +0 -0
  340. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Event.py +0 -0
  341. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Exchange.py +0 -0
  342. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Queue.py +0 -0
  343. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Serializer.py +0 -0
  344. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Stream.py +0 -0
  345. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/Subscription.py +0 -0
  346. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/RabbitMQ/__init__.py +0 -0
  347. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/Configuration.py +0 -0
  348. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/Connection.py +0 -0
  349. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/Consumer.py +0 -0
  350. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/Event.py +0 -0
  351. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/Queue.py +0 -0
  352. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/Serializer.py +0 -0
  353. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/Subscription.py +0 -0
  354. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/Redis/__init__.py +0 -0
  355. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Implements/__init__.py +0 -0
  356. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Priority.py +0 -0
  357. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/Protocol.py +0 -0
  358. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Broker/__init__.py +0 -0
  359. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Descriptor/DataObject.py +0 -0
  360. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Descriptor/Types.py +0 -0
  361. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Descriptor/Value.py +0 -0
  362. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Descriptor/__init__.py +0 -0
  363. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extension.py +0 -0
  364. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/Metrics.py +0 -0
  365. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/Ping.py +0 -0
  366. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/Play.html +0 -0
  367. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/Play.py +0 -0
  368. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/Specifications.py +0 -0
  369. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/Status.html +0 -0
  370. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/Status.py +0 -0
  371. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Extensions/__init__.py +0 -0
  372. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Inspector.py +0 -0
  373. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/Response.py +0 -0
  374. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Inspector/__init__.py +0 -0
  375. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Pattern.py +0 -0
  376. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Array.py +0 -0
  377. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Common.py +0 -0
  378. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Compare.py +0 -0
  379. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Condition.py +0 -0
  380. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/DataObject.py +0 -0
  381. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/DateTime.py +0 -0
  382. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Number.py +0 -0
  383. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Object.py +0 -0
  384. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Size.py +0 -0
  385. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/String.py +0 -0
  386. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/Type.py +0 -0
  387. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Patterns/__init__.py +0 -0
  388. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Validate.py +0 -0
  389. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/Validator.py +0 -0
  390. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Validator/__init__.py +0 -0
  391. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/Executor.py +0 -0
  392. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/Message.py +0 -0
  393. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/Pool.py +0 -0
  394. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/Run.py +0 -0
  395. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/Specification.py +0 -0
  396. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/Startup.py +0 -0
  397. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/Worker.py +0 -0
  398. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/Worker/__init__.py +0 -0
  399. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/src/__init__.py +0 -0
  400. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/rabbitmq}/test_rabbitmq_broker_methods.py +0 -0
  401. {defstream_rabbitmq-0.1.23/tests → defstream_rabbitmq-0.1.24/tests/redis}/test_redis.py +0 -0
  402. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_descriptor.py +0 -0
  403. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_logging.py +0 -0
  404. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_pool_callbacks.py +0 -0
  405. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_process_signals.py +0 -0
  406. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_status.py +0 -0
  407. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_status_ui.cjs +0 -0
  408. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_validator_patterns.py +0 -0
  409. {defstream_rabbitmq-0.1.23 → defstream_rabbitmq-0.1.24}/tests/test_worker_startup.py +0 -0
@@ -0,0 +1,26 @@
1
+ from pathlib import Path
2
+ from sys import (
3
+ exit,
4
+ path as module_path,
5
+ )
6
+ from unittest import TestLoader, TextTestRunner
7
+
8
+ ROOT = Path(__file__).resolve().parents[2]
9
+
10
+
11
+ def main() -> int:
12
+ module_path.insert(
13
+ 0,
14
+ str(ROOT),
15
+ )
16
+ modules: list[str] = [
17
+ f'tests.{test_file.stem}'
18
+ for test_file in sorted((ROOT / 'tests').glob('test_*.py'))
19
+ ]
20
+ suite = TestLoader().loadTestsFromNames(modules)
21
+ result = TextTestRunner(verbosity=2).run(suite)
22
+ return 0 if result.wasSuccessful() else 1
23
+
24
+
25
+ if __name__ == '__main__':
26
+ exit(main())
@@ -182,31 +182,6 @@ jobs:
182
182
  os: ubuntu-24.04
183
183
  env:
184
184
  PROJECT: DefStream
185
- DEFSTREAM_RABBITMQ_TESTS: '1'
186
- DEFSTREAM_REDIS_TESTS: '1'
187
- services:
188
- rabbitmq:
189
- image: rabbitmq:4.1
190
- ports:
191
- - 5672:5672
192
- env:
193
- RABBITMQ_DEFAULT_USER: guest
194
- RABBITMQ_DEFAULT_PASS: guest
195
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS: '-rabbit loopback_users []'
196
- options: >-
197
- --health-cmd "rabbitmq-diagnostics -q ping"
198
- --health-interval 10s
199
- --health-timeout 10s
200
- --health-retries 12
201
- redis:
202
- image: redis:7.4
203
- ports:
204
- - 6379:6379
205
- options: >-
206
- --health-cmd "redis-cli ping"
207
- --health-interval 5s
208
- --health-timeout 5s
209
- --health-retries 12
210
185
  steps:
211
186
  - name: Check out core
212
187
  uses: actions/checkout@v7
@@ -310,11 +285,10 @@ jobs:
310
285
  "$RUNNER_TEMP/installed/bin/python" -m pip install dist/*.whl
311
286
  "$RUNNER_TEMP/installed/bin/python" -m pip check
312
287
 
313
- - name: Test installed package
288
+ - name: Test core installed package
314
289
  run: |
315
290
  cd "$RUNNER_TEMP"
316
- "$RUNNER_TEMP/installed/bin/python" -m unittest discover \
317
- -s "$GITHUB_WORKSPACE/tests" -p 'test_*.py' -v
291
+ "$RUNNER_TEMP/installed/bin/python" "$GITHUB_WORKSPACE/.github/scripts/run_core_tests.py"
318
292
 
319
293
  - name: Set up Node for core UI tests
320
294
  uses: actions/setup-node@v7
@@ -333,10 +307,124 @@ jobs:
333
307
  if-no-files-found: error
334
308
  retention-days: 14
335
309
 
310
+ test-rabbitmq:
311
+ name: Test RabbitMQ ${{ matrix.broker.version }} / Python ${{ matrix.python }}
312
+ needs: changes
313
+ runs-on: ${{ matrix.os || 'ubuntu-latest' }}
314
+ timeout-minutes: 25
315
+ strategy:
316
+ fail-fast: false
317
+ matrix:
318
+ python: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
319
+ broker:
320
+ - version: '3.13'
321
+ compose_file: res/docker/rabbitmq/rabbitmq-3.yml
322
+ port: '55630'
323
+ - version: '4.4'
324
+ compose_file: res/docker/rabbitmq/rabbitmq-4.yml
325
+ port: '55640'
326
+ include:
327
+ - python: '3.9'
328
+ os: ubuntu-24.04
329
+ env:
330
+ RABBITMQ_TESTS: '1'
331
+ RABBITMQ_PORT: ${{ matrix.broker.port }}
332
+ BROKER_COMPOSE_FILE: ${{ matrix.broker.compose_file }}
333
+ steps:
334
+ - name: Check out core
335
+ uses: actions/checkout@v7
336
+ with:
337
+ ref: ${{ github.sha }}
338
+ fetch-depth: 0
339
+ persist-credentials: false
340
+
341
+ - name: Set up Python
342
+ uses: actions/setup-python@v7
343
+ with:
344
+ python-version: ${{ matrix.python }}
345
+
346
+ - name: Install source and RabbitMQ client
347
+ run: |
348
+ python -m pip install --upgrade "pip>=23" "setuptools>=77" "setuptools-scm>=8,<10" wheel
349
+ python -m pip install --editable . --config-settings EXTRAS=RabbitMQ
350
+
351
+ - name: Start RabbitMQ ${{ matrix.broker.version }}
352
+ run: docker compose -f "$BROKER_COMPOSE_FILE" up -d --wait
353
+
354
+ - name: Verify RabbitMQ plugins
355
+ run: |
356
+ enabled_plugins="$(
357
+ docker compose -f "$BROKER_COMPOSE_FILE" exec -T rabbitmq rabbitmq-plugins list --enabled --minimal
358
+ )"
359
+ for plugin in rabbitmq_management rabbitmq_prometheus rabbitmq_shovel rabbitmq_shovel_management; do
360
+ if ! grep -Fxq "$plugin" <<< "$enabled_plugins"; then
361
+ echo "RabbitMQ plugin is not enabled: $plugin" >&2
362
+ exit 1
363
+ fi
364
+ done
365
+
366
+ - name: Test RabbitMQ broker and worker compatibility
367
+ run: python -m unittest discover -s tests/rabbitmq -t . -p 'test_*.py' -v
368
+
369
+ - name: Stop broker containers
370
+ if: always()
371
+ run: docker compose -f "$BROKER_COMPOSE_FILE" down --remove-orphans
372
+
373
+ test-redis:
374
+ name: Test Redis ${{ matrix.broker.version }} / Python ${{ matrix.python }}
375
+ needs: changes
376
+ runs-on: ${{ matrix.os || 'ubuntu-latest' }}
377
+ timeout-minutes: 25
378
+ strategy:
379
+ fail-fast: false
380
+ matrix:
381
+ python: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
382
+ broker:
383
+ - version: '6.2'
384
+ compose_file: res/docker/redis/redis-6.yml
385
+ port: '56376'
386
+ - version: '7.4'
387
+ compose_file: res/docker/redis/redis-7.yml
388
+ port: '56377'
389
+ include:
390
+ - python: '3.9'
391
+ os: ubuntu-24.04
392
+ env:
393
+ REDIS_TESTS: '1'
394
+ REDIS_PORT: ${{ matrix.broker.port }}
395
+ BROKER_COMPOSE_FILE: ${{ matrix.broker.compose_file }}
396
+ steps:
397
+ - name: Check out core
398
+ uses: actions/checkout@v7
399
+ with:
400
+ ref: ${{ github.sha }}
401
+ fetch-depth: 0
402
+ persist-credentials: false
403
+
404
+ - name: Set up Python
405
+ uses: actions/setup-python@v7
406
+ with:
407
+ python-version: ${{ matrix.python }}
408
+
409
+ - name: Install source and Redis client
410
+ run: |
411
+ python -m pip install --upgrade "pip>=23" "setuptools>=77" "setuptools-scm>=8,<10" wheel
412
+ python -m pip install --editable . --config-settings EXTRAS=Redis
413
+
414
+ - name: Start Redis ${{ matrix.broker.version }}
415
+ run: docker compose -f "$BROKER_COMPOSE_FILE" up -d --wait
416
+
417
+ - name: Test Redis broker and worker compatibility
418
+ run: python -m unittest discover -s tests/redis -t . -p 'test_*.py' -v
419
+
420
+ - name: Stop broker container
421
+ if: always()
422
+ run: docker compose -f "$BROKER_COMPOSE_FILE" down --remove-orphans
423
+
336
424
  publish:
337
425
  name: Publish PyPI
338
426
  if: github.event_name == 'push' && github.ref == 'refs/heads/master' && needs.changes.outputs.release == 'true'
339
- needs: [changes, test]
427
+ needs: [changes, test, test-rabbitmq, test-redis]
340
428
  runs-on: ubuntu-latest
341
429
  timeout-minutes: 10
342
430
  environment: pypi
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DefStream-RabbitMQ
3
- Version: 0.1.23
3
+ Version: 0.1.24
4
4
  Summary: Synchronous message processing with pluggable broker adapters
5
5
  Home-page: https://github.com/yong5eon/DefStream
6
6
  Author: Heo Yongseon
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.14
16
16
  Requires-Python: >=3.9
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
- Requires-Dist: DefStream==0.1.23
19
+ Requires-Dist: DefStream==0.1.24
20
20
  Requires-Dist: pika>=1.3.2
21
21
  Dynamic: author
22
22
  Dynamic: classifier
@@ -20,6 +20,7 @@ setup.py
20
20
  .github/scripts/create-issues-from-reviews.mjs
21
21
  .github/scripts/create-pr-from-issue.mjs
22
22
  .github/scripts/prepare_upload.py
23
+ .github/scripts/run_core_tests.py
23
24
  .github/scripts/tests/__init__.py
24
25
  .github/scripts/tests/create-issues-from-reviews.test.mjs
25
26
  .github/scripts/tests/create-pr-from-issue.test.mjs
@@ -233,6 +234,33 @@ issues/task/38/docs/CopilotReviewIssuesSetup.md
233
234
  issues/task/38/implements/1793291844133.md
234
235
  issues/task/38/tasks/1793291844134.md
235
236
  issues/task/38/tasks/1793292234123.md
237
+ issues/task/39/CHANGELOG.md
238
+ issues/task/39/IMPLEMENTS.md
239
+ issues/task/39/PLAN.md
240
+ issues/task/39/README.md
241
+ issues/task/39/REQUIREMENTS.md
242
+ issues/task/39/TASKS.md
243
+ issues/task/39/implements/1793623390266.md
244
+ issues/task/39/implements/1793625464717.md
245
+ issues/task/39/implements/1793626388737.md
246
+ issues/task/39/implements/1793626820522.md
247
+ issues/task/39/implements/1793627348502.md
248
+ issues/task/39/implements/1793628366252.md
249
+ issues/task/39/implements/1793629199999.md
250
+ issues/task/39/implements/1793631035346.md
251
+ issues/task/39/tasks/1793620359610.md
252
+ issues/task/39/tasks/1793621161604.md
253
+ issues/task/39/tasks/1793621502459.md
254
+ issues/task/39/tasks/1793621903677.md
255
+ issues/task/39/tasks/1793623390265.md
256
+ issues/task/39/tasks/1793625269565.md
257
+ issues/task/39/tasks/1793626388737.md
258
+ issues/task/39/tasks/1793626820522.md
259
+ issues/task/39/tasks/1793627348502.md
260
+ issues/task/39/tasks/1793627590185.md
261
+ issues/task/39/tasks/1793628366252.md
262
+ issues/task/39/tasks/1793629199998.md
263
+ issues/task/39/tasks/1793631035345.md
236
264
  issues/task/57/CHANGELOG.md
237
265
  issues/task/57/IMPLEMENTS.md
238
266
  issues/task/57/PLAN.md
@@ -242,6 +270,13 @@ issues/task/57/TASKS.md
242
270
  issues/task/57/implements/1793395003714.md
243
271
  issues/task/57/tasks/1793395003713.md
244
272
  issues/task/57/tasks/1793395058100.md
273
+ res/docker/rabbitmq/README.md
274
+ res/docker/rabbitmq/enabled_plugins
275
+ res/docker/rabbitmq/rabbitmq-3.yml
276
+ res/docker/rabbitmq/rabbitmq-4.yml
277
+ res/docker/redis/README.md
278
+ res/docker/redis/redis-6.yml
279
+ res/docker/redis/redis-7.yml
245
280
  samples/Broker/Sample.py
246
281
  samples/Broker/RabbitMQ/Sample.RPC.py
247
282
  samples/Broker/RabbitMQ/Sample.Stream.py
@@ -321,7 +356,11 @@ src/Worker/Specification.py
321
356
  src/Worker/Startup.py
322
357
  src/Worker/Worker.py
323
358
  src/Worker/__init__.py
359
+ tests/__init__.py
324
360
  tests/_support.py
361
+ tests/_support_inspector.py
362
+ tests/_support_inspector_play.py
363
+ tests/_support_task_messages.py
325
364
  tests/test_broker_packaging.py
326
365
  tests/test_descriptor.py
327
366
  tests/test_inspector.py
@@ -332,24 +371,34 @@ tests/test_logging.py
332
371
  tests/test_pool_callbacks.py
333
372
  tests/test_process_signals.py
334
373
  tests/test_protocol_contracts.py
335
- tests/test_rabbitmq_broker_methods.py
336
- tests/test_rabbitmq_integration.py
337
- tests/test_rabbitmq_logging.py
338
- tests/test_rabbitmq_priorities.py
339
- tests/test_rabbitmq_rpc.py
340
- tests/test_rabbitmq_rpc_integration.py
341
- tests/test_rabbitmq_timeouts.py
342
- tests/test_rabbitmq_worker.py
343
- tests/test_redis.py
344
- tests/test_redis_integration.py
345
- tests/test_redis_logging.py
346
374
  tests/test_runner_hooks.py
347
375
  tests/test_specifications.py
348
376
  tests/test_status.py
349
377
  tests/test_status_ui.cjs
350
378
  tests/test_task_messages.py
351
- tests/test_task_priorities.py
352
379
  tests/test_validator_patterns.py
353
380
  tests/test_worker.py
354
381
  tests/test_worker_recovery.py
355
382
  tests/test_worker_startup.py
383
+ tests/rabbitmq/__init__.py
384
+ tests/rabbitmq/test_inspector.py
385
+ tests/rabbitmq/test_inspector_play.py
386
+ tests/rabbitmq/test_rabbitmq_broker_methods.py
387
+ tests/rabbitmq/test_rabbitmq_integration.py
388
+ tests/rabbitmq/test_rabbitmq_logging.py
389
+ tests/rabbitmq/test_rabbitmq_priorities.py
390
+ tests/rabbitmq/test_rabbitmq_rpc.py
391
+ tests/rabbitmq/test_rabbitmq_rpc_integration.py
392
+ tests/rabbitmq/test_rabbitmq_timeouts.py
393
+ tests/rabbitmq/test_rabbitmq_worker.py
394
+ tests/rabbitmq/test_specifications.py
395
+ tests/rabbitmq/test_task_messages.py
396
+ tests/rabbitmq/test_task_priorities.py
397
+ tests/redis/__init__.py
398
+ tests/redis/test_inspector.py
399
+ tests/redis/test_inspector_play.py
400
+ tests/redis/test_redis.py
401
+ tests/redis/test_redis_integration.py
402
+ tests/redis/test_redis_logging.py
403
+ tests/redis/test_task_messages.py
404
+ tests/redis/test_task_priorities.py
@@ -0,0 +1,3 @@
1
+ # 고객 영향 없음
2
+
3
+ 이번 변경은 DefStream의 공개 API나 고객 실행 동작을 변경하지 않습니다. RabbitMQ·Redis용 Docker Compose 구성과 테스트 연결 설정만 추가하여 개발 환경과 GitHub Actions의 브로커 통합 테스트를 지원합니다.
@@ -0,0 +1,33 @@
1
+ # 구현 결과
2
+
3
+ RabbitMQ 3.13·4.4와 Redis 6.2·7.4의 버전별 테스트용 Compose 환경을 추가하고, 로컬 테스트와 GitHub Actions가 각 버전의 포트에 연결하도록 구성했다. RabbitMQ 네 플러그인, 브로커 health check, 별도 컨테이너 이름 및 loopback 한정 포트 공개를 포함한다.
4
+
5
+ 통합 테스트의 환경변수 포트 지정은 기존 기본 포트를 보존한다. CI는 `test`에서 코어 테스트만 실행하고, `test-rabbitmq`와 `test-redis`에서 해당 브로커 전용 테스트와 Worker 호환성 테스트를 각각 실행한다. 브로커 job은 브로커 버전과 Python 3.9~3.14의 전체 조합을 매트릭스로 사용하고 해당 Compose project만 정리한다. 로컬 실행 절차는 [RabbitMQ 안내](../../../res/docker/rabbitmq/README.md)와 [Redis 안내](../../../res/docker/redis/README.md)에 각각 정리했다.
6
+
7
+ 코어 테스트는 `tests/` 루트에, RabbitMQ와 Redis 전용 테스트는 각각 `tests/rabbitmq/`, `tests/redis/`에 분리했다. `tests`를 패키지로 탐색하고 지원 모듈을 `tests.*`로 가져와 `redis` 테스트 디렉터리가 외부 Redis 클라이언트 import를 가리지 않게 했다. 이동한 로그 테스트의 샘플 경로도 프로젝트 루트를 기준으로 조정했다.
8
+
9
+ `tests/test_broker_packaging.py`는 저장소 루트의 무시된 `DefStream.egg-info` 대신 실제 설치된 distribution 메타데이터를 선택하도록 수정했다. 전체 310개 테스트가 통과하고 15개가 건너뛰어졌으며, 브로커별 테스트도 각각 통과했다. 상세 내용은 [패키징 테스트 수정 구현 기록](./implements/1793626388737.md)과 [전체 테스트 검증 기록](./tasks/1793626388737.md)에 정리했다.
10
+
11
+ 브로커 통합 테스트 활성화·포트 변수에서 `DEFSTREAM_` 접두사를 제거하고 CI, 테스트 지원 코드와 로컬 실행 안내를 함께 갱신했다. 새 환경 변수 이름을 사용하는 전체 테스트 310개가 통과하고 15개가 건너뛰어졌다. 자세한 내용은 [환경 변수 이름 변경 구현 기록](./implements/1793626820522.md)과 [검증 기록](./tasks/1793626820522.md)을 참고한다.
12
+
13
+ CI 테스트를 코어·RabbitMQ·Redis job으로 나누고 RabbitMQ 3.13·4.4, Redis 6.2·7.4 각각을 Python 3.9~3.14 전체 조합으로 검증하도록 매트릭스를 확장했다. 코어 전용 테스트 러너로 저장소 루트 테스트 207개 통과를 확인했다. 상세 변경과 제한은 [CI job 분리 구현 기록](./implements/1793627348502.md) 및 [검증 기록](./tasks/1793627348502.md)에 정리했다.
14
+
15
+ 브로커 job ID는 `test-rabbitmq`, `test-redis`로 단순화했다. 별도 job의 기능과 매트릭스 구성은 그대로 유지했다.
16
+
17
+ 실제 RabbitMQ 4.4 테스트에서 transient non-exclusive queue 선언 실패를 확인했다. 통합 테스트가 제품 기본 설정(`durable=True`)과 동일한 큐를 만들도록 수정했고, RabbitMQ 4.4 suite 전체가 통과했다. 자세한 내용은 [RabbitMQ 4 테스트 큐 호환성 수정](./implements/1793628366252.md)을 참고한다.
18
+
19
+ 브로커별 CI job이 선택한 adapter만 설치하는 점에 맞춰 공통 메시지 fixture에서 RabbitMQ 전용 `Reject`와 Redis 연결 import를 제거했다. RabbitMQ와 Redis connection API 검증도 각 전용 suite로 옮겨 다른 adapter가 설치되지 않은 환경에서 테스트를 import할 수 있게 했다. 상세 변경은 [브로커별 메시지 테스트 의존성 분리](./implements/1793629199999.md)에 기록했다.
20
+
21
+ 로컬 Docker에서 네 브로커의 health check와 RabbitMQ 플러그인 상태를 확인하고 Python 3.9·3.10·3.12·3.14 조합 16개를 통과했다. Actions 실행 #41459408504에서는 브로커 24개 job이 교차 import로 실패했으나 이를 분리한 뒤 실행 #41461742854에서 코어와 브로커 24개 job이 모두 통과했다. 이후 PR 리뷰에서 발견한 플러그인 이름의 부분 문자열 검사와 미사용 import를 수정했으며, 수정 내용은 [PR 리뷰 지적 수정](./implements/1793631035346.md)에 기록했다. 후속 CI 실행은 대기 중이다.
22
+
23
+ Compose 설정과 이전 정적 검증은 [기존 작업 기록](./tasks/1793623390265.md)에, 테스트 분리와 검증은 [테스트 분리 작업 기록](./tasks/1793625269565.md)에 정리했다.
24
+
25
+ ## 단계별 구현 기록
26
+
27
+ - [버전별 RabbitMQ·Redis 테스트 환경 추가](./implements/1793623390266.md)
28
+ - [코어·브로커 테스트 분리](./implements/1793625464717.md)
29
+ - [패키징 테스트 메타데이터 선택 수정](./implements/1793626388737.md)
30
+ - [브로커 테스트 환경 변수 이름 변경](./implements/1793626820522.md)
31
+ - [CI 테스트 job 분리와 버전 매트릭스](./implements/1793627348502.md)
32
+ - [브로커별 메시지 테스트 의존성 분리](./implements/1793629199999.md)
33
+ - [PR 리뷰 지적 수정](./implements/1793631035346.md)
@@ -0,0 +1,52 @@
1
+ # 작업 계획
2
+
3
+ ## 대상 요구사항
4
+
5
+ - RabbitMQ `3.13.x`·`4.4.x` 및 지정된 네 플러그인
6
+ - Redis `6.2`·`7.4` 경계 버전 검증
7
+ - 브로커별·버전별 Compose 파일, 컨테이너 이름, loopback 포트와 health check
8
+ - `tests/`의 코어 테스트와 `tests/rabbitmq/`, `tests/redis/`의 브로커 전용 테스트 분리
9
+ - 로컬 및 GitHub Actions 통합 테스트 실행
10
+
11
+ ## 수행 순서
12
+
13
+ 1. `res/docker/rabbitmq/`와 `res/docker/redis/`에 버전별 Compose 파일을 작성하고 RabbitMQ의 활성 플러그인 설정을 추가한다.
14
+ 2. 구성 파일의 이미지, 고정 컨테이너 이름, 포트, health check와 플러그인 설정을 정적으로 검증한다.
15
+ 3. 테스트가 Compose가 게시하는 RabbitMQ 포트 `55630`·`55640`, Redis 포트 `56376`·`56377`에 연결할 수 있도록 기존 통합 테스트 설정을 확인하고 필요한 부분만 조정한다.
16
+ 4. 코어 테스트를 `tests/` 루트에 두고 RabbitMQ·Redis 전용 테스트를 각각 하위 디렉터리에 분리한다. 전체 discovery에서 외부 `redis` 클라이언트 패키지가 테스트 디렉터리에 가려지지 않도록 패키지 경로를 설정한다.
17
+ 5. GitHub Actions에서 `test` job은 코어 테스트만 실행하고, `test-rabbitmq`·`test-redis` job은 각 브로커의 전용 테스트와 Worker 호환성 테스트를 수행하도록 분리한다. 각 브로커 job은 해당 브로커의 지원 버전과 Python `3.9`~`3.14`의 전체 조합을 매트릭스로 실행한다.
18
+ 6. Docker 엔진이 사용 가능하면 각 Compose 리소스를 기동하여 health check, RabbitMQ 플러그인 활성화와 통합 테스트를 검증한다. 사용할 수 없으면 실행하지 못한 범위를 기록한다.
19
+ 7. 로컬 실행·종료 방법과 포트·플러그인 정보를 작업 기록 및 필요한 문서에 반영하고 상대 링크를 검증한다.
20
+
21
+ ## 진행 상태
22
+
23
+ - [x] 버전별 Compose 파일, 컨테이너 이름, 포트, health check와 RabbitMQ 플러그인 설정 추가
24
+ - [x] 네 Compose 파일의 구문·이미지·컨테이너 이름·포트 검증
25
+ - [x] 통합 테스트 포트 환경변수 연결
26
+ - [x] 코어·RabbitMQ·Redis 테스트 디렉터리 분리 및 전체 discovery 연결
27
+ - [x] 코어·RabbitMQ·Redis CI job 분리, 브로커 버전 × Python 버전 전체 매트릭스와 플러그인 검사·정리 절차 추가
28
+ - [x] 교차 import 수정 후 GitHub Actions 브로커 매트릭스 24개 job 재실행 및 통과 확인
29
+ - [ ] PR 리뷰의 플러그인 정확 일치 검사·미사용 import 수정 후 CI 재실행
30
+ - [x] 실제 컨테이너 기동·health check·플러그인 및 브로커 통합 테스트: 네 브로커와 16개 로컬 브로커 × Python 조합 검증
31
+ - [x] 로컬 실행 문서와 작업 기록 갱신
32
+
33
+ ## 검증 방법
34
+
35
+ - Docker Compose 설정 검증 명령으로 네 Compose 파일을 각각 확인한다.
36
+ - 통합 테스트를 RabbitMQ `3.13.x`와 `4.4.x`, Redis `6.2`와 `7.4`에 연결하여 실행한다.
37
+ - RabbitMQ `rabbitmq-plugins list --enabled` 결과에서 네 플러그인을 확인한다.
38
+ - 저장소의 기존 CI 테스트 범위와 패키지 검증이 유지되는지 확인한다.
39
+
40
+ ## 실행 결과
41
+
42
+ - `docker compose config --format json`으로 네 Compose 파일의 구문을 검사하고 각 이미지, Compose project 이름, 컨테이너 이름과 포트 매핑을 확인했다.
43
+ - 코어 테스트를 `tests/`, RabbitMQ 테스트를 `tests/rabbitmq/`, Redis 테스트를 `tests/redis/`에 분리했다. 패키지 경로 기반 unittest discovery와 `tests/redis` 이름 충돌 방지 설정을 적용했다.
44
+ - 브로커별 discovery는 RabbitMQ 71개(7개 건너뜀), Redis 32개(8개 건너뜀)로 통과했다. 변경된 코어 Inspector·Play·runner hook 테스트 40개, 명세 테스트 28개, 메시지 테스트 11개(3개 건너뜀)도 통과했다.
45
+ - 저장소 루트의 로컬 egg-info가 설치된 distribution보다 우선 선택되는 문제를 패키징 테스트에서 해결했다. CI와 같은 외부 작업 디렉터리에서 전체 discovery를 실행해 310개 테스트 통과와 15개 건너뜀을 확인했다.
46
+ - RabbitMQ 71개(7개 건너뜀), Redis 32개(8개 건너뜀) 테스트와 GitHub Actions YAML 파싱, `git diff --check`도 통과했다. 상세 결과는 [패키징 테스트 수정 및 전체 테스트 검증 기록](./tasks/1793626388737.md)을 참고한다.
47
+ - 브로커 테스트 환경 변수 이름에서 `DEFSTREAM_` 접두사를 제거하고 CI, 테스트, 로컬 실행 안내와 요구사항 명세를 갱신했다. 새 포트 변수 조회 및 전체 310개 테스트(15개 건너뜀)를 통과했다. 자세한 내용은 [브로커 테스트 환경 변수 이름 변경 검증](./tasks/1793626820522.md)에 기록했다.
48
+ - CI에서 코어 테스트를 루트 테스트 모듈로 제한하고 RabbitMQ·Redis job을 각각 분리했다. 각 브로커 job은 두 지원 버전과 Python 3.9~3.14의 12개 조합을 실행하도록 구성했다. 전용 core runner에서 코어 테스트 207개가 통과했으며 YAML 구조상 총 6개 코어 조합과 브로커별 12개 조합이 확인됐다. Docker 엔진이 없어 매트릭스의 실제 브로커 실행은 검증하지 못했다. 자세한 내용은 [CI 테스트 매트릭스 분리 기록](./tasks/1793627348502.md)을 참고한다.
49
+ - 브로커 job ID를 `test-rabbitmq`, `test-redis`로 단순화하고 publish 의존 관계와 이슈 기록을 갱신했다. 변경 내용은 [CI 브로커 job 이름 단순화 기록](./tasks/1793627590185.md)에 기록했다.
50
+ - RabbitMQ 3.13·4.4와 Redis 6.2·7.4를 기동해 health check를 통과시켰고 RabbitMQ 필수 플러그인을 확인했다. 설치된 Python 3.9·3.10·3.12·3.14 각 버전에서 네 브로커 테스트를 실행해 16개 조합을 통과했다. 최초 RabbitMQ 4.4 실행에서 확인된 transient non-exclusive queue 호환성 문제는 테스트 큐를 제품 기본 계약과 일치하도록 durable하게 선언해 해결했다. 상세 결과는 [Docker 기반 통합 테스트 기록](./tasks/1793628366252.md), 수정 내용은 [구현 기록](./implements/1793628366252.md)을 참고한다.
51
+ - GitHub Actions 실행 #41459408504에서 코어 테스트는 통과했지만 24개 브로커 job은 공통 테스트 모듈의 RabbitMQ·Redis 교차 import로 실패했다. 공통 fixture와 브로커별 API 검증을 분리한 뒤 실행 #41461742854에서 코어 및 브로커 24개 job 전체가 통과했다. 원인과 로컬 import 격리 결과는 [작업 기록](./tasks/1793629199998.md)을 참고한다.
52
+ - PR 리뷰에서 지적한 플러그인 이름 부분 문자열 비교와 미사용 import를 수정했다. `tests.test_inspector_play` 21개가 통과했고, 수정 후 CI 재실행 결과는 대기 중이다. [리뷰 수정 작업 기록](./tasks/1793631035345.md)을 참고한다.
@@ -0,0 +1,85 @@
1
+ # RabbitMQ·Redis 지원 범위에 맞는 테스트·워크플로용 Docker 설정 리소스 제공
2
+
3
+ ## 이슈 정보
4
+
5
+ | 항목 | 내용 |
6
+ | --- | --- |
7
+ | 출처 | GitHub Issues |
8
+ | 저장소 | `yong5eon/DefStream` |
9
+ | 원본 이슈 | [#39](https://github.com/yong5eon/DefStream/issues/39) |
10
+ | 상태 | Open |
11
+ | 유형·레이블 | 작업 (`task`, 원본 이슈에 적용됨) |
12
+ | 로컬 진행 상태 | 네 브로커 버전과 Python 3.9·3.10·3.12·3.14의 16개 조합 통과; import 분리 후 Actions 실행 #41461742854에서 코어와 브로커 24개 job 통과; PR 리뷰 지적 2건을 수정해 후속 CI 대기 |
13
+ | 작업 브랜치 | `task/39` |
14
+ | 분기 기준 | `master` |
15
+ | 병합 대상 브랜치 | 미지정 |
16
+
17
+ ## 원본 이슈
18
+
19
+ ## 목적
20
+
21
+ DefStream의 RabbitMQ와 Redis 지원 범위에 맞는 Docker 설정 리소스를 제공하여, 로컬 테스트와 GitHub Actions 워크플로에서 재현 가능한 브로커 환경을 사용할 수 있도록 합니다. 이 이슈는 추후 수행할 작업을 등록하는 것이며 현재 구성이 제공되었다는 의미는 아닙니다.
22
+
23
+ ## 작업 범위
24
+
25
+ - 프로젝트의 RabbitMQ와 Redis 지원 버전 및 필요한 구성 범위를 확인하고, 그 범위에 맞는 Docker 설정 리소스를 제공합니다. 지원 범위가 불명확하면 구현 전에 확정하며 임의로 버전을 확대하거나 축소하지 않습니다.
26
+ - 테스트에 필요한 브로커 설정, 연결 정보, 준비 상태 확인 방법을 포함하여 일관된 테스트 환경을 구성합니다.
27
+ - 로컬 테스트와 GitHub Actions 워크플로에서 해당 리소스를 활용할 수 있도록 연결합니다. 지원 버전별 검증이 필요한 경우 확인된 지원 범위에 맞춰 테스트 구성을 마련합니다.
28
+ - 브로커가 준비된 뒤 테스트를 실행하고, 기동 실패·연결 실패·테스트 실패가 성공으로 처리되지 않도록 합니다.
29
+ - 테스트 환경의 기동·종료·정리 절차와 실행 방법을 한국어로 문서화하고, 관련 영문 문서는 프로젝트 지침에 따라 동기화합니다.
30
+ - 운영 자격 증명을 포함하지 않고, 테스트용 설정과 운영용 설정의 차이를 명확히 합니다. 로컬 사용자 데이터나 다른 컨테이너에 영향을 주지 않도록 테스트 자원을 구분합니다.
31
+
32
+ ## 완료 기준
33
+
34
+ - [ ] RabbitMQ와 Redis의 지원 버전·구성 범위가 확인되고 Docker 리소스와 대응됨
35
+ - [ ] 제공된 리소스로 로컬 브로커 환경을 기동하여 관련 통합 테스트를 실행할 수 있음
36
+ - [ ] GitHub Actions에서 같은 지원 범위에 대한 브로커 테스트가 실행됨
37
+ - [ ] 브로커 준비 상태 확인, 실패 전파 및 테스트 자원 정리 동작이 검증됨
38
+ - [ ] 실행에 필요한 환경·명령·연결 설정·종료 및 정리 방법이 문서화됨
39
+ - [ ] 실제 검증한 버전과 테스트 범위, 검증하지 못한 범위가 기록됨
40
+
41
+ ## 추가 요청사항
42
+
43
+ - RabbitMQ 컨테이너는 다음 플러그인을 활성화하여 생성합니다.
44
+ - `rabbitmq_management`
45
+ - `rabbitmq_prometheus`
46
+ - `rabbitmq_shovel`
47
+ - `rabbitmq_shovel_management`
48
+ - RabbitMQ는 각 메이저의 최신 마이너 계열인 `3.13.x`와 `4.4.x`를 지원 대상으로 조사·검증합니다. `3.13.x`는 RabbitMQ 자체의 커뮤니티 지원이 종료된 계열이므로, 이는 DefStream이 별도로 유지할 호환성 범위입니다.
49
+ - Redis Streams는 Redis 5.0에서 도입되었지만, DefStream은 기본 소비 복구에 Redis 6.2에서 도입된 `XAUTOCLAIM`을 사용하므로 지원 하한은 `6.2`입니다. Redis CI는 최소 버전인 `6.2`와 현재 CI 검증 버전인 `7.4`를 대상으로 합니다.
50
+ - Compose 파일은 `res/docker/rabbitmq/`와 `res/docker/redis/`에 두고, 컨테이너 이름은 각각 `RabbitMQ-3`, `RabbitMQ-4`, `Redis-6`, `Redis-7`로 지정합니다.
51
+
52
+ ## 현재 진행 상태
53
+
54
+ - 네 Compose 파일, RabbitMQ 플러그인 설정, 통합 테스트 포트 연결과 CI 검증 job을 추가했습니다.
55
+ - 코어 테스트는 `tests/`, RabbitMQ 전용 테스트는 `tests/rabbitmq/`, Redis 전용 테스트는 `tests/redis/`로 분리하고 전체 discovery가 하위 테스트를 포함하도록 구성했습니다.
56
+ - CI가 저장소 외부에서 테스트를 실행할 때도 동일하게 탐색하도록 top-level 경로를 지정했습니다.
57
+ - 저장소 루트의 로컬 egg-info가 설치된 distribution 메타데이터를 가리는 문제를 패키징 테스트에서 해결했습니다. CI와 같은 외부 작업 디렉터리 기준 전체 310개 테스트가 통과했고 15개는 건너뛰었습니다.
58
+ - 로컬 Docker에서 네 브로커의 health check와 RabbitMQ 플러그인을 확인하고 16개 브로커 × Python 조합을 통과했습니다. 공통 fixture의 교차 import를 분리한 뒤 Actions 실행 #41461742854에서 코어 테스트와 RabbitMQ·Redis 24개 job이 모두 통과했습니다. 이후 PR 리뷰에서 지적한 RabbitMQ 플러그인 이름의 정확 일치 검사와 미사용 import를 수정했으며, 이 변경을 포함한 CI 재실행은 대기 중입니다.
59
+
60
+ ## 작업 기록
61
+
62
+ - [요구사항 명세서](./REQUIREMENTS.md)
63
+ - [작업 계획서](./PLAN.md)
64
+ - [RabbitMQ 로컬 테스트 환경](../../../res/docker/rabbitmq/README.md)
65
+ - [Redis 로컬 테스트 환경](../../../res/docker/redis/README.md)
66
+ - [구현 종합 기록](./IMPLEMENTS.md)
67
+ - [고객용 변경 로그](./CHANGELOG.md)
68
+ - [패키징 테스트 수정·전체 테스트 검증 기록](./tasks/1793626388737.md)
69
+ - [패키징 테스트 메타데이터 선택 수정](./implements/1793626388737.md)
70
+ - [브로커 환경 변수 이름 변경 작업 기록](./tasks/1793626820522.md)
71
+ - [브로커 테스트 환경 변수 이름 변경 구현 기록](./implements/1793626820522.md)
72
+ - [CI 매트릭스 분리 작업 기록](./tasks/1793627348502.md)
73
+ - [CI 테스트 job 분리 구현 기록](./implements/1793627348502.md)
74
+ - [CI 브로커 job 이름 단순화 기록](./tasks/1793627590185.md)
75
+ - [Docker 기반 브로커 × Python 통합 테스트 기록](./tasks/1793628366252.md)
76
+ - [RabbitMQ 4 테스트 큐 호환성 수정 기록](./implements/1793628366252.md)
77
+ - [브로커별 메시지 테스트 import 격리 검증](./tasks/1793629199998.md)
78
+ - [브로커별 메시지 테스트 의존성 분리](./implements/1793629199999.md)
79
+ - [PR 리뷰 수정 검증](./tasks/1793631035345.md)
80
+ - [PR 리뷰 지적 수정](./implements/1793631035346.md)
81
+ - [테스트 분리·검증 작업 기록](./tasks/1793625269565.md)
82
+ - [테스트 분리 구현 기록](./implements/1793625464717.md)
83
+ - RabbitMQ 지원 버전 조사: [조사 결과](./TASKS.md), [단계별 기록](./tasks/1793620359610.md), [버전 범위 결정](./tasks/1793621161604.md)
84
+ - Redis Streams 최소 버전 조사: [조사 결과](./TASKS.md), [단계별 기록](./tasks/1793621502459.md)
85
+ - Redis 최소 버전 및 CI 검증 대상 결정: [단계별 기록](./tasks/1793621903677.md)
@@ -0,0 +1,54 @@
1
+ # 요구사항 명세
2
+
3
+ ## 목적
4
+
5
+ RabbitMQ와 Redis 지원 범위의 경계 버전에서 통합 테스트를 실행할 수 있도록 버전별 Docker Compose 리소스를 제공한다.
6
+
7
+ ## 확정 요구사항
8
+
9
+ - RabbitMQ는 `3.13.x`와 `4.4.x`, Redis는 `6.2` 이상을 지원 대상으로 한다.
10
+ - 버전별 Compose 파일을 다음 위치에 분리한다.
11
+ - `res/docker/rabbitmq/rabbitmq-3.yml`
12
+ - `res/docker/rabbitmq/rabbitmq-4.yml`
13
+ - `res/docker/redis/redis-6.yml`
14
+ - `res/docker/redis/redis-7.yml`
15
+ - RabbitMQ 컨테이너는 각각 `RabbitMQ-3`, `RabbitMQ-4`로 생성하고 다음 플러그인을 활성화한다.
16
+ - `rabbitmq_management`
17
+ - `rabbitmq_prometheus`
18
+ - `rabbitmq_shovel`
19
+ - `rabbitmq_shovel_management`
20
+ - RabbitMQ 포트는 다음처럼 호스트 loopback에 게시한다.
21
+
22
+ | 컨테이너 | AMQP | Management | Prometheus |
23
+ | --- | --- | --- | --- |
24
+ | `RabbitMQ-3` | `55630:5672` | `55631:15672` | `55632:15692` |
25
+ | `RabbitMQ-4` | `55640:5672` | `55641:15672` | `55642:15692` |
26
+
27
+ - Redis 컨테이너는 `Redis-6`, `Redis-7`로 생성하고 다음 포트를 호스트 loopback에 게시한다.
28
+ - `Redis-6`: `56376:6379`
29
+ - `Redis-7`: `56377:6379`
30
+ - 모든 컨테이너는 시작 준비 상태를 확인하는 health check를 제공한다.
31
+ - Docker Compose 리소스는 테스트용이며 운영 자격 증명이나 호스트 전체 인터페이스에 대한 포트 공개를 포함하지 않는다.
32
+ - GitHub Actions에서 `test`는 `tests/` 루트의 코어 테스트만 실행한다. `test-rabbitmq`와 `test-redis`는 각각 해당 브로커 전용 테스트와 Worker 호환성 테스트를 실행한다.
33
+ - RabbitMQ `3.13.x`·`4.4.x`, Redis `6.2`·`7.4` 각각에 대해 지원 Python 버전 `3.9`~`3.14`를 조합해 검증한다. 브로커별 검증은 브로커 버전과 Python 버전의 전체 조합으로 실행한다.
34
+ - 코어 테스트는 `tests/` 루트에 두고, RabbitMQ 전용 테스트와 Redis 전용 테스트는 각각 `tests/rabbitmq/`, `tests/redis/`에 분리한다. 전체 테스트 discovery는 세 위치의 테스트를 모두 포함해야 한다.
35
+
36
+ ## 완료 기준
37
+
38
+ - 각 Compose 파일이 해당 컨테이너 이름, 이미지 계열, 호스트 포트와 health check를 선언한다.
39
+ - RabbitMQ 컨테이너 시작 시 네 플러그인이 모두 활성화된다.
40
+ - 동일 브로커의 버전별 컨테이너를 겹치지 않는 포트로 실행할 수 있다.
41
+ - Docker Compose 설정 검증이 성공하고, Docker 엔진이 사용 가능한 환경에서 컨테이너 기동·health check와 플러그인 활성화를 확인한다.
42
+ - GitHub Actions가 코어 테스트와 브로커별 테스트를 분리하고, 브로커마다 지원 버전과 Python 버전의 모든 조합을 검증한다.
43
+ - `tests/` 루트에는 코어 테스트만 남고, 브로커 전용 테스트는 각 브로커 디렉터리에서 독립적으로 발견·실행된다.
44
+
45
+ ## 통합 테스트 연결 설정
46
+
47
+ - RabbitMQ 통합 테스트는 `RABBITMQ_PORT`를 사용하고, 미설정 시 기존 기본 포트 `5672`를 사용한다.
48
+ - Redis 통합 테스트는 `REDIS_PORT`를 사용하고, 미설정 시 기존 기본 포트 `6379`를 사용한다.
49
+ - RabbitMQ·Redis 통합 테스트는 각각 `RABBITMQ_TESTS`, `REDIS_TESTS`가 `'1'`일 때 활성화한다.
50
+ - Compose 컨테이너 이름은 `RabbitMQ-3`, `RabbitMQ-4`, `Redis-6`, `Redis-7`이며, 컨테이너를 동시에 실행할 수 있도록 호스트 포트 매핑을 구분한다.
51
+
52
+ ## 확인된 제한사항
53
+
54
+ - 로컬 환경의 Docker 엔진이 실행되지 않으면 실제 이미지 pull, 컨테이너 기동과 플러그인 상태를 검증할 수 없다. 이 경우 Compose 정적 설정 검증과 미실행 사유를 구분해 기록한다.
@@ -0,0 +1,70 @@
1
+ # RabbitMQ·Redis 지원 버전 조사
2
+
3
+ ## 조사 결과
4
+
5
+ - 현재 GitHub Actions 통합 테스트는 `rabbitmq:4.1`과 `redis:7.4`를 사용합니다. 이는 테스트에 고정된 버전이며 프로젝트 전체의 브로커 지원 범위를 선언하지 않습니다.
6
+ - RabbitMQ 매뉴얼은 `Subscription.timeout` 기능에 RabbitMQ 3.12 이상이 필요하다고 명시합니다. 이는 해당 기능의 최소 버전이지, 전체 RabbitMQ 어댑터의 지원 최소 버전이라고 확인된 것은 아닙니다.
7
+ - 기존 작업 기록에는 RabbitMQ 3.13.7의 어댑터 테스트 검증이 있습니다. 현재 버전까지 포함하는 연속적인 지원 범위나 테스트 매트릭스는 확인되지 않았습니다.
8
+ - RabbitMQ 공식 지원 정보에서 조사 시점에 확인한 커뮤니티 지원 계열은 4.3.x와 4.4.x입니다. 4.3.x의 커뮤니티 지원은 2027-01-31, 4.4.x는 2027-07-31까지로 안내되어 있습니다. 3.13.x는 공식 지원표에 없으며, 현재 CI의 4.1도 커뮤니티 지원 계열이 아닙니다.
9
+ - 공식 플러그인 문서는 관리 플러그인이 RabbitMQ 배포판에 포함되며, Prometheus 지원과 Shovel도 배포판 플러그인으로 제공됨을 설명합니다. 저장소에는 이 플러그인들을 활성화하는 컨테이너 설정이 아직 없습니다.
10
+ - 사용자 결정에 따라 RabbitMQ는 각 메이저의 최신 마이너 계열인 3.13.x와 4.4.x를 대상으로 합니다. 3.13.x는 upstream 커뮤니티 지원 범위를 벗어났지만, DefStream의 호환성 대상으로 유지합니다.
11
+ - Redis Streams 자체는 5.0에서 도입됐지만, DefStream 기본 소비 복구 기능은 6.2에서 추가된 `XAUTOCLAIM`에 의존합니다. `reclaim_idle`의 기본값이 60,000ms이므로 옵션을 따로 끄지 않은 기본 Worker 동작을 지원하려면 Redis 6.2 이상이 필요합니다.
12
+ - 저장소의 Redis 매뉴얼도 Redis 6.2 이상을 요구하고, GitHub Actions는 `redis:7.4`를 사용합니다. 따라서 6.2는 기능상 하한이고 7.4는 현재 CI 검증 버전이며, 이 정보만으로 지원 상한 또는 모든 버전의 검증을 의미하지는 않습니다.
13
+ - 사용자 결정에 따라 Redis 지원 하한을 6.2로 확정하고, CI에서는 Redis 6.2와 현재 검증 버전인 7.4를 대상으로 합니다. Redis 5.0 이상이 Streams를 제공한다는 사실만으로 5.x를 지원 대상으로 포함하지 않습니다.
14
+
15
+ ## 참고 자료
16
+
17
+ - [RabbitMQ Release Information](https://www.rabbitmq.com/release-information)
18
+ - [RabbitMQ Plugins](https://www.rabbitmq.com/docs/plugins)
19
+ - [RabbitMQ Management Plugin](https://www.rabbitmq.com/docs/management)
20
+ - [RabbitMQ Prometheus Monitoring](https://www.rabbitmq.com/docs/prometheus)
21
+ - [RabbitMQ Shovel Plugin](https://www.rabbitmq.com/docs/shovel)
22
+ - 저장소 CI: [ci.yml](../../../.github/workflows/ci.yml)
23
+ - RabbitMQ 기능별 요구 버전: [RabbitMQ.md](../../../docs/RabbitMQ.md)
24
+ - 기존 RabbitMQ 3.13.7 검증 기록: [IMPLEMENTS.md](../../../issues/feature/1/IMPLEMENTS.md)
25
+
26
+ ## 다음 단계
27
+
28
+ 버전 조사 결론은 Compose·CI 구성에 반영했고, 로컬 Docker에서 네 브로커와 16개 브로커 × Python 조합을 검증했다. 교차 import를 수정한 뒤 Actions 실행 #41461742854에서 코어와 브로커 매트릭스 24개 job이 모두 통과했다. PR 리뷰 지적 두 건을 추가로 수정했으며, 해당 수정 후 CI 재실행을 기다리고 있다.
29
+
30
+ ## 검증 작업
31
+
32
+ - Compose 설정, CI YAML, Python 문법 및 이전 테스트 실행 결과는 [Compose 구성 검증 기록](./tasks/1793623390265.md)에 정리했다.
33
+ - 코어·브로커별 테스트 재구성과 최신 테스트 결과는 [테스트 분리·검증 기록](./tasks/1793625269565.md)에 정리했다.
34
+
35
+ ## 테스트 분리·검증 결과
36
+
37
+ - 코어 테스트는 `tests/` 루트에 유지하고 RabbitMQ·Redis 전용 테스트를 각각 `tests/rabbitmq/`, `tests/redis/`로 분리했다. `tests/__init__.py`와 `tests.*` import 경로를 사용하여 전체 discovery에서 외부 `redis` 라이브러리와 이름이 충돌하지 않게 했다.
38
+ - RabbitMQ 전용 discovery는 71개 테스트 중 7개, Redis 전용 discovery는 32개 중 8개를 브로커 미설정으로 건너뛰고 통과했다. 변경된 코어 테스트와 명세·메시지 테스트도 통과했다.
39
+ - 저장소 루트의 무시된 `DefStream.egg-info`가 설치된 editable distribution보다 먼저 선택되어 패키징 테스트 4개가 실패하는 원인을 확인했다. 테스트가 저장소 루트 자체의 메타데이터 항목을 제외하고 설치된 distribution을 조회하도록 수정했다.
40
+ - CI가 저장소 밖에서 실행하는 전체 테스트 discovery에도 프로젝트 top-level 경로를 지정하도록 수정했다. 미지정 시 하위 테스트의 `tests.*` import가 깨지는 것을 재현했고, 수정 명령으로 전체 310개 테스트가 import 오류 없이 발견됨을 확인했다.
41
+ - CI와 같은 외부 작업 디렉터리에서 UTF-8 출력 설정과 프로젝트 top-level 경로를 지정해 전체 310개 테스트를 실행했으며, 15개를 건너뛰고 통과했다. RabbitMQ 71개(7개 건너뜀)와 Redis 32개(8개 건너뜀) 테스트도 각각 통과했다.
42
+ - 이 단계에서는 GitHub Actions YAML 파싱과 `git diff --check`를 통과했지만 Docker 엔진이 없어 컨테이너 통합 테스트는 실행하지 못했다. 이후 실행한 로컬 브로커 통합 테스트 결과는 [Docker 기반 브로커 × Python 통합 테스트 기록](./tasks/1793628366252.md)에 정리했다.
43
+ - 이후 GitHub Actions 실행 #41459408504에서는 코어 job이 통과하고 브로커 매트릭스 24개 job이 공통 `tests.test_task_messages`를 통한 RabbitMQ·Redis 교차 import로 실패했다. 공통 fixture를 broker-free 모듈로 분리하고 adapter별 API 검증을 각 suite로 옮긴 뒤, 공통 메시지 테스트 8개와 브로커별 import 격리 테스트를 통과시켰다. 수정 후 Actions 재실행은 대기 중이다. 상세 결과는 [브로커별 메시지 테스트 import 격리 검증](./tasks/1793629199998.md)에 기록했다.
44
+ - PR 리뷰에서 RabbitMQ 플러그인 부분 문자열 검사로 인한 오탐 가능성과 미사용 import 두 건을 지적받아 수정했다. Inspector Play 테스트 21개와 정확한 전체 줄 비교 동작을 검증했다. 변경 후 CI 결과는 아직 없으며 [PR 리뷰 수정 검증](./tasks/1793631035345.md)에 정리했다.
45
+
46
+ ## 단계별 기록
47
+
48
+ - [RabbitMQ 지원 버전 및 플러그인 조사](./tasks/1793620359610.md)
49
+ - [RabbitMQ 3.x·4.x 지원 범위 결정](./tasks/1793621161604.md)
50
+ - [Redis Streams 최소 지원 버전 조사](./tasks/1793621502459.md)
51
+ - [Redis 최소 버전 및 CI 검증 대상 결정](./tasks/1793621903677.md)
52
+ - [Docker 구성 및 기존 테스트 검증](./tasks/1793623390265.md)
53
+ - [브로커별 테스트 분리와 검증](./tasks/1793625269565.md)
54
+ - [패키징 테스트 수정 및 전체 테스트 검증](./tasks/1793626388737.md)
55
+ - [브로커 테스트 환경 변수 이름 변경 검증](./tasks/1793626820522.md)
56
+ - [CI 테스트 job 분리 및 매트릭스 검증](./tasks/1793627348502.md)
57
+ - [CI 브로커 job 이름 단순화](./tasks/1793627590185.md)
58
+ - [Docker 기반 브로커 × Python 통합 테스트](./tasks/1793628366252.md)
59
+ - [브로커별 메시지 테스트 import 격리 검증](./tasks/1793629199998.md)
60
+ - [PR 리뷰 수정 검증](./tasks/1793631035345.md)
61
+
62
+ ## Redis 참고 자료
63
+
64
+ - [Redis Streams 소개](https://redis.io/docs/latest/develop/data-types/streams/)
65
+ - [`XGROUP CREATE` — Redis 5.0부터](https://redis.io/docs/latest/commands/xgroup-create/)
66
+ - [`XREADGROUP` — Redis 5.0부터](https://redis.io/docs/latest/commands/xreadgroup/)
67
+ - [`XACK` — Redis 5.0부터](https://redis.io/docs/latest/commands/xack/)
68
+ - [`XAUTOCLAIM` — Redis 6.2부터](https://redis.io/docs/latest/commands/xautoclaim/)
69
+ - 저장소 Redis 매뉴얼: [Redis.md](../../../docs/Redis.md)
70
+ - Redis 소비 기본값과 자동 회수 호출: [Consumer.py](../../../src/Broker/Implements/Redis/Consumer.py)