DefStream 0.1.18__tar.gz → 0.1.19__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 (238) hide show
  1. {defstream-0.1.18 → defstream-0.1.19}/DefStream.egg-info/PKG-INFO +1 -1
  2. {defstream-0.1.18 → defstream-0.1.19}/DefStream.egg-info/SOURCES.txt +15 -5
  3. {defstream-0.1.18 → defstream-0.1.19}/PKG-INFO +1 -1
  4. {defstream-0.1.18 → defstream-0.1.19}/docs/Contracts.en.md +1 -1
  5. {defstream-0.1.18 → defstream-0.1.19}/docs/Contracts.md +1 -1
  6. {defstream-0.1.18 → defstream-0.1.19}/docs/Operations.en.md +34 -21
  7. {defstream-0.1.18 → defstream-0.1.19}/docs/Operations.md +34 -21
  8. {defstream-0.1.18 → defstream-0.1.19}/docs/RabbitMQ.en.md +7 -4
  9. {defstream-0.1.18 → defstream-0.1.19}/docs/RabbitMQ.md +8 -5
  10. {defstream-0.1.18 → defstream-0.1.19}/docs/Redis.en.md +13 -7
  11. {defstream-0.1.18 → defstream-0.1.19}/docs/Redis.md +11 -6
  12. {defstream-0.1.18 → defstream-0.1.19}/docs/Tasks.en.md +2 -2
  13. {defstream-0.1.18 → defstream-0.1.19}/docs/Tasks.md +3 -2
  14. defstream-0.1.19/issues/fix/43/CHANGELOG.md +5 -0
  15. defstream-0.1.19/issues/fix/43/IMPLEMENTS.md +16 -0
  16. defstream-0.1.19/issues/fix/43/PLAN.md +67 -0
  17. defstream-0.1.19/issues/fix/43/README.md +35 -0
  18. defstream-0.1.19/issues/fix/43/REQUIREMENTS.md +59 -0
  19. defstream-0.1.19/issues/fix/43/TASKS.md +3 -0
  20. defstream-0.1.19/issues/fix/43/implements/1793260818660.md +7 -0
  21. defstream-0.1.19/issues/fix/43/implements/1793261447018.md +7 -0
  22. defstream-0.1.19/issues/fix/43/tasks/1793260818661.md +14 -0
  23. defstream-0.1.19/issues/fix/43/tasks/1793261447019.md +7 -0
  24. defstream-0.1.19/issues/fix/43/tasks/1793262314955.md +7 -0
  25. {defstream-0.1.18 → defstream-0.1.19}/samples/Broker/RabbitMQ/Sample.RPC.py +6 -3
  26. {defstream-0.1.18 → defstream-0.1.19}/samples/Broker/RabbitMQ/Sample.Stream.py +1 -1
  27. {defstream-0.1.18 → defstream-0.1.19}/samples/Broker/RabbitMQ/Sample.py +11 -7
  28. {defstream-0.1.18 → defstream-0.1.19}/samples/Broker/Redis/Sample.Stream.py +1 -1
  29. {defstream-0.1.18 → defstream-0.1.19}/samples/Broker/Redis/Sample.py +1 -1
  30. {defstream-0.1.18 → defstream-0.1.19}/samples/Broker/Sample.py +6 -3
  31. {defstream-0.1.18 → defstream-0.1.19}/samples/Worker/RabbitMQ/Tasks.py +6 -2
  32. {defstream-0.1.18 → defstream-0.1.19}/samples/Worker/RabbitMQ/Worker.py +3 -3
  33. {defstream-0.1.18 → defstream-0.1.19}/samples/Worker/Redis/Sample.py +6 -4
  34. {defstream-0.1.18 → defstream-0.1.19}/samples/Worker/Sample.py +4 -3
  35. {defstream-0.1.18 → defstream-0.1.19}/setup.py +1 -1
  36. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Configuration.py +1 -2
  37. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Consumer.py +3 -3
  38. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Event.py +2 -2
  39. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Connection.py +1 -1
  40. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Consumer.py +7 -5
  41. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Event.py +20 -1
  42. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Exchange.py +1 -2
  43. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Queue.py +1 -1
  44. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Stream.py +3 -3
  45. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/__init__.py +2 -4
  46. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/Connection.py +1 -1
  47. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/Consumer.py +8 -4
  48. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/Event.py +23 -2
  49. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/Queue.py +4 -4
  50. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/Subscription.py +1 -1
  51. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/__init__.py +6 -6
  52. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Protocol.py +2 -2
  53. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/__init__.py +2 -8
  54. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Extensions/Metrics.py +1 -1
  55. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Extensions/Ping.py +1 -1
  56. defstream-0.1.18/src/Inspector/Extensions/Console.html → defstream-0.1.19/src/Inspector/Extensions/Play.html +4 -4
  57. defstream-0.1.18/src/Inspector/Extensions/Console.py → defstream-0.1.19/src/Inspector/Extensions/Play.py +29 -29
  58. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Extensions/Specifications.py +1 -1
  59. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Extensions/Status.py +1 -1
  60. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Extensions/__init__.py +2 -2
  61. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Inspector.py +12 -5
  62. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/DataObject.py +18 -10
  63. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Object.py +18 -10
  64. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/String.py +8 -1
  65. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Type.py +56 -51
  66. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/Executor.py +1 -1
  67. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/Pool.py +3 -3
  68. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/Run.py +5 -5
  69. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/Worker.py +1 -1
  70. defstream-0.1.19/tests/_support.py +48 -0
  71. {defstream-0.1.18 → defstream-0.1.19}/tests/test_broker_packaging.py +29 -2
  72. {defstream-0.1.18 → defstream-0.1.19}/tests/test_inspector.py +63 -36
  73. {defstream-0.1.18 → defstream-0.1.19}/tests/test_inspector_logging.py +39 -19
  74. defstream-0.1.18/tests/test_inspector_console.py → defstream-0.1.19/tests/test_inspector_play.py +65 -52
  75. {defstream-0.1.18 → defstream-0.1.19}/tests/test_lifecycle_hooks.py +25 -14
  76. {defstream-0.1.18 → defstream-0.1.19}/tests/test_logging.py +31 -23
  77. {defstream-0.1.18 → defstream-0.1.19}/tests/test_protocol_contracts.py +44 -28
  78. {defstream-0.1.18 → defstream-0.1.19}/tests/test_rabbitmq_integration.py +8 -7
  79. {defstream-0.1.18 → defstream-0.1.19}/tests/test_rabbitmq_logging.py +12 -6
  80. {defstream-0.1.18 → defstream-0.1.19}/tests/test_rabbitmq_rpc.py +11 -8
  81. {defstream-0.1.18 → defstream-0.1.19}/tests/test_rabbitmq_rpc_integration.py +4 -3
  82. {defstream-0.1.18 → defstream-0.1.19}/tests/test_rabbitmq_worker.py +5 -2
  83. {defstream-0.1.18 → defstream-0.1.19}/tests/test_redis.py +8 -0
  84. {defstream-0.1.18 → defstream-0.1.19}/tests/test_redis_integration.py +12 -9
  85. {defstream-0.1.18 → defstream-0.1.19}/tests/test_redis_logging.py +30 -7
  86. {defstream-0.1.18 → defstream-0.1.19}/tests/test_runner_hooks.py +1 -1
  87. {defstream-0.1.18 → defstream-0.1.19}/tests/test_specifications.py +59 -34
  88. {defstream-0.1.18 → defstream-0.1.19}/tests/test_task_messages.py +22 -12
  89. {defstream-0.1.18 → defstream-0.1.19}/tests/test_validator_patterns.py +15 -1
  90. {defstream-0.1.18 → defstream-0.1.19}/tests/test_worker.py +18 -12
  91. {defstream-0.1.18 → defstream-0.1.19}/tests/test_worker_startup.py +18 -11
  92. defstream-0.1.18/src/Broker/Implements/RabbitMQ/Policies.py +0 -9
  93. defstream-0.1.18/src/Broker/Policies.py +0 -25
  94. {defstream-0.1.18 → defstream-0.1.19}/.github/ISSUE_TEMPLATE/01.feature.yml +0 -0
  95. {defstream-0.1.18 → defstream-0.1.19}/.github/ISSUE_TEMPLATE/02.bug.yml +0 -0
  96. {defstream-0.1.18 → defstream-0.1.19}/.github/ISSUE_TEMPLATE/03.fix.yml +0 -0
  97. {defstream-0.1.18 → defstream-0.1.19}/.github/ISSUE_TEMPLATE/04.task.yml +0 -0
  98. {defstream-0.1.18 → defstream-0.1.19}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  99. {defstream-0.1.18 → defstream-0.1.19}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  100. {defstream-0.1.18 → defstream-0.1.19}/.github/workflows/ci.yml +0 -0
  101. {defstream-0.1.18 → defstream-0.1.19}/.gitignore +0 -0
  102. {defstream-0.1.18 → defstream-0.1.19}/DefStream.egg-info/dependency_links.txt +0 -0
  103. {defstream-0.1.18 → defstream-0.1.19}/DefStream.egg-info/requires.txt +0 -0
  104. {defstream-0.1.18 → defstream-0.1.19}/DefStream.egg-info/top_level.txt +0 -0
  105. {defstream-0.1.18 → defstream-0.1.19}/LICENSE +0 -0
  106. {defstream-0.1.18 → defstream-0.1.19}/README.en.md +0 -0
  107. {defstream-0.1.18 → defstream-0.1.19}/README.md +0 -0
  108. {defstream-0.1.18 → defstream-0.1.19}/README.setup.md +0 -0
  109. {defstream-0.1.18 → defstream-0.1.19}/docs/GettingStarted.en.md +0 -0
  110. {defstream-0.1.18 → defstream-0.1.19}/docs/GettingStarted.md +0 -0
  111. {defstream-0.1.18 → defstream-0.1.19}/docs/LifecycleHooks.en.md +0 -0
  112. {defstream-0.1.18 → defstream-0.1.19}/docs/LifecycleHooks.md +0 -0
  113. {defstream-0.1.18 → defstream-0.1.19}/docs/README.en.md +0 -0
  114. {defstream-0.1.18 → defstream-0.1.19}/docs/README.md +0 -0
  115. {defstream-0.1.18 → defstream-0.1.19}/instructions/CODE.instructions.md +0 -0
  116. {defstream-0.1.18 → defstream-0.1.19}/instructions/DOCS.instructions.md +0 -0
  117. {defstream-0.1.18 → defstream-0.1.19}/instructions/README.instructions.md +0 -0
  118. {defstream-0.1.18 → defstream-0.1.19}/issues/bug/16/IMPLEMENTS.md +0 -0
  119. {defstream-0.1.18 → defstream-0.1.19}/issues/bug/16/ISSUE.md +0 -0
  120. {defstream-0.1.18 → defstream-0.1.19}/issues/bug/16/README.md +0 -0
  121. {defstream-0.1.18 → defstream-0.1.19}/issues/bug/16/REQUIREMENTS.md +0 -0
  122. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/1/IMPLEMENTS.md +0 -0
  123. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/1/README.md +0 -0
  124. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/1/REQUIREMENTS.md +0 -0
  125. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/1/TASK.md +0 -0
  126. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/1/ci.refs.json +0 -0
  127. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/8/IMPLEMENTS.md +0 -0
  128. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/8/README.md +0 -0
  129. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/8/REQUIREMENTS.md +0 -0
  130. {defstream-0.1.18 → defstream-0.1.19}/issues/feature/8/ci.refs.json +0 -0
  131. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/10/IMPLEMENTS.md +0 -0
  132. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/10/README.md +0 -0
  133. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/10/REQUIREMENTS.md +0 -0
  134. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/13/README.md +0 -0
  135. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/21/IMPLEMENTS.md +0 -0
  136. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/21/ISSUE.md +0 -0
  137. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/21/README.md +0 -0
  138. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/21/REQUIREMENTS.md +0 -0
  139. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/24/IMPLEMENTS.md +0 -0
  140. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/24/ISSUE.md +0 -0
  141. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/24/README.md +0 -0
  142. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/24/REQUIREMENTS.md +0 -0
  143. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/25/IMPLEMENTS.md +0 -0
  144. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/25/ISSUE.md +0 -0
  145. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/25/README.md +0 -0
  146. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/25/REQUIREMENTS.md +0 -0
  147. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/25/TASK.md +0 -0
  148. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/26/IMPLEMENTS.md +0 -0
  149. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/26/ISSUE.md +0 -0
  150. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/26/README.md +0 -0
  151. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/26/REQUIREMENTS.md +0 -0
  152. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/29/ISSUE.md +0 -0
  153. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/29/README.md +0 -0
  154. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/29/REQUIREMENTS.md +0 -0
  155. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/29/TASK.md +0 -0
  156. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/3/IMPLEMENTS.md +0 -0
  157. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/3/README.md +0 -0
  158. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/3/REQUIREMENTS.md +0 -0
  159. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/3/ci.refs.json +0 -0
  160. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/CHANGELOG.md +0 -0
  161. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/IMPLEMENTS.md +0 -0
  162. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/PLAN.md +0 -0
  163. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/README.md +0 -0
  164. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/REQUIREMENTS.md +0 -0
  165. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/TASKS.md +0 -0
  166. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/implements/1793257519898.md +0 -0
  167. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/implements/1793257826069.md +0 -0
  168. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/tasks/1793256929057.md +0 -0
  169. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/tasks/1793256990072.md +0 -0
  170. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/tasks/1793257216492.md +0 -0
  171. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/tasks/1793257519899.md +0 -0
  172. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/41/tasks/1793257826068.md +0 -0
  173. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/6/IMPLEMENTS.md +0 -0
  174. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/6/README.md +0 -0
  175. {defstream-0.1.18 → defstream-0.1.19}/issues/fix/6/REQUIREMENTS.md +0 -0
  176. {defstream-0.1.18 → defstream-0.1.19}/issues/task/18/IMPLEMENTS.md +0 -0
  177. {defstream-0.1.18 → defstream-0.1.19}/issues/task/18/README.md +0 -0
  178. {defstream-0.1.18 → defstream-0.1.19}/issues/task/18/REQUIREMENTS.md +0 -0
  179. {defstream-0.1.18 → defstream-0.1.19}/issues/task/32/IMPLEMENTS.md +0 -0
  180. {defstream-0.1.18 → defstream-0.1.19}/issues/task/32/ISSUE.md +0 -0
  181. {defstream-0.1.18 → defstream-0.1.19}/issues/task/32/PLAN.md +0 -0
  182. {defstream-0.1.18 → defstream-0.1.19}/issues/task/32/README.md +0 -0
  183. {defstream-0.1.18 → defstream-0.1.19}/issues/task/32/REQUIREMENTS.md +0 -0
  184. {defstream-0.1.18 → defstream-0.1.19}/issues/task/32/TASK.md +0 -0
  185. {defstream-0.1.18 → defstream-0.1.19}/issues/task/34/CHANGELOG.md +0 -0
  186. {defstream-0.1.18 → defstream-0.1.19}/issues/task/34/IMPLEMENTS.md +0 -0
  187. {defstream-0.1.18 → defstream-0.1.19}/issues/task/34/PLAN.md +0 -0
  188. {defstream-0.1.18 → defstream-0.1.19}/issues/task/34/README.md +0 -0
  189. {defstream-0.1.18 → defstream-0.1.19}/issues/task/34/REQUIREMENTS.md +0 -0
  190. {defstream-0.1.18 → defstream-0.1.19}/issues/task/36/CHANGELOG.md +0 -0
  191. {defstream-0.1.18 → defstream-0.1.19}/issues/task/36/IMPLEMENTS.md +0 -0
  192. {defstream-0.1.18 → defstream-0.1.19}/issues/task/36/PLAN.md +0 -0
  193. {defstream-0.1.18 → defstream-0.1.19}/issues/task/36/README.md +0 -0
  194. {defstream-0.1.18 → defstream-0.1.19}/issues/task/36/REQUIREMENTS.md +0 -0
  195. {defstream-0.1.18 → defstream-0.1.19}/samples/Worker/RabbitMQ/Client.py +0 -0
  196. {defstream-0.1.18 → defstream-0.1.19}/setup.cfg +0 -0
  197. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Connection.py +0 -0
  198. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Errors.py +0 -0
  199. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Configuration.py +0 -0
  200. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Serializer.py +0 -0
  201. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/RabbitMQ/Subscription.py +0 -0
  202. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/Configuration.py +0 -0
  203. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/Redis/Serializer.py +0 -0
  204. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Implements/__init__.py +0 -0
  205. {defstream-0.1.18 → defstream-0.1.19}/src/Broker/Priority.py +0 -0
  206. {defstream-0.1.18 → defstream-0.1.19}/src/Descriptor/DataObject.py +0 -0
  207. {defstream-0.1.18 → defstream-0.1.19}/src/Descriptor/Types.py +0 -0
  208. {defstream-0.1.18 → defstream-0.1.19}/src/Descriptor/Value.py +0 -0
  209. {defstream-0.1.18 → defstream-0.1.19}/src/Descriptor/__init__.py +0 -0
  210. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Extension.py +0 -0
  211. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Extensions/Status.html +0 -0
  212. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/Response.py +0 -0
  213. {defstream-0.1.18 → defstream-0.1.19}/src/Inspector/__init__.py +0 -0
  214. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Pattern.py +0 -0
  215. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Array.py +0 -0
  216. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Common.py +0 -0
  217. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Compare.py +0 -0
  218. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Condition.py +0 -0
  219. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/DateTime.py +0 -0
  220. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Number.py +0 -0
  221. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/Size.py +0 -0
  222. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Patterns/__init__.py +0 -0
  223. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Validate.py +0 -0
  224. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/Validator.py +0 -0
  225. {defstream-0.1.18 → defstream-0.1.19}/src/Validator/__init__.py +0 -0
  226. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/Message.py +0 -0
  227. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/Specification.py +0 -0
  228. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/Startup.py +0 -0
  229. {defstream-0.1.18 → defstream-0.1.19}/src/Worker/__init__.py +0 -0
  230. {defstream-0.1.18 → defstream-0.1.19}/src/__init__.py +0 -0
  231. {defstream-0.1.18 → defstream-0.1.19}/tests/test_descriptor.py +0 -0
  232. {defstream-0.1.18 → defstream-0.1.19}/tests/test_pool_callbacks.py +0 -0
  233. {defstream-0.1.18 → defstream-0.1.19}/tests/test_process_signals.py +0 -0
  234. {defstream-0.1.18 → defstream-0.1.19}/tests/test_rabbitmq_broker_methods.py +0 -0
  235. {defstream-0.1.18 → defstream-0.1.19}/tests/test_rabbitmq_priorities.py +0 -0
  236. {defstream-0.1.18 → defstream-0.1.19}/tests/test_status.py +0 -0
  237. {defstream-0.1.18 → defstream-0.1.19}/tests/test_status_ui.cjs +0 -0
  238. {defstream-0.1.18 → defstream-0.1.19}/tests/test_task_priorities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DefStream
3
- Version: 0.1.18
3
+ Version: 0.1.19
4
4
  Summary: Synchronous message processing with pluggable broker adapters
5
5
  Home-page: https://github.com/yong5eon/DefStream
6
6
  Author: Heo Yongseon
@@ -90,6 +90,17 @@ issues/fix/41/tasks/1793256990072.md
90
90
  issues/fix/41/tasks/1793257216492.md
91
91
  issues/fix/41/tasks/1793257519899.md
92
92
  issues/fix/41/tasks/1793257826068.md
93
+ issues/fix/43/CHANGELOG.md
94
+ issues/fix/43/IMPLEMENTS.md
95
+ issues/fix/43/PLAN.md
96
+ issues/fix/43/README.md
97
+ issues/fix/43/REQUIREMENTS.md
98
+ issues/fix/43/TASKS.md
99
+ issues/fix/43/implements/1793260818660.md
100
+ issues/fix/43/implements/1793261447018.md
101
+ issues/fix/43/tasks/1793260818661.md
102
+ issues/fix/43/tasks/1793261447019.md
103
+ issues/fix/43/tasks/1793262314955.md
93
104
  issues/fix/6/IMPLEMENTS.md
94
105
  issues/fix/6/README.md
95
106
  issues/fix/6/REQUIREMENTS.md
@@ -129,7 +140,6 @@ src/Broker/Connection.py
129
140
  src/Broker/Consumer.py
130
141
  src/Broker/Errors.py
131
142
  src/Broker/Event.py
132
- src/Broker/Policies.py
133
143
  src/Broker/Priority.py
134
144
  src/Broker/Protocol.py
135
145
  src/Broker/__init__.py
@@ -139,7 +149,6 @@ src/Broker/Implements/RabbitMQ/Connection.py
139
149
  src/Broker/Implements/RabbitMQ/Consumer.py
140
150
  src/Broker/Implements/RabbitMQ/Event.py
141
151
  src/Broker/Implements/RabbitMQ/Exchange.py
142
- src/Broker/Implements/RabbitMQ/Policies.py
143
152
  src/Broker/Implements/RabbitMQ/Queue.py
144
153
  src/Broker/Implements/RabbitMQ/Serializer.py
145
154
  src/Broker/Implements/RabbitMQ/Stream.py
@@ -161,10 +170,10 @@ src/Inspector/Extension.py
161
170
  src/Inspector/Inspector.py
162
171
  src/Inspector/Response.py
163
172
  src/Inspector/__init__.py
164
- src/Inspector/Extensions/Console.html
165
- src/Inspector/Extensions/Console.py
166
173
  src/Inspector/Extensions/Metrics.py
167
174
  src/Inspector/Extensions/Ping.py
175
+ src/Inspector/Extensions/Play.html
176
+ src/Inspector/Extensions/Play.py
168
177
  src/Inspector/Extensions/Specifications.py
169
178
  src/Inspector/Extensions/Status.html
170
179
  src/Inspector/Extensions/Status.py
@@ -193,11 +202,12 @@ src/Worker/Specification.py
193
202
  src/Worker/Startup.py
194
203
  src/Worker/Worker.py
195
204
  src/Worker/__init__.py
205
+ tests/_support.py
196
206
  tests/test_broker_packaging.py
197
207
  tests/test_descriptor.py
198
208
  tests/test_inspector.py
199
- tests/test_inspector_console.py
200
209
  tests/test_inspector_logging.py
210
+ tests/test_inspector_play.py
201
211
  tests/test_lifecycle_hooks.py
202
212
  tests/test_logging.py
203
213
  tests/test_pool_callbacks.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DefStream
3
- Version: 0.1.18
3
+ Version: 0.1.19
4
4
  Summary: Synchronous message processing with pluggable broker adapters
5
5
  Home-page: https://github.com/yong5eon/DefStream
6
6
  Author: Heo Yongseon
@@ -171,5 +171,5 @@ Validation exceptions are task failures and follow error hooks and the `on_error
171
171
  policy. The example's `Reject()` avoids endlessly retrying invalid inputs.
172
172
  To preserve failures in a DLQ, also configure `Subscription(error=...)` and
173
173
  provision it through `declare()`. Schemas and examples appear in Inspector's
174
- AsyncAPI and console; custom Validator patterns are not automatically
174
+ AsyncAPI and Play; custom Validator patterns are not automatically
175
175
  reverse-engineered into JSON Schema.
@@ -146,7 +146,7 @@ class Add(
146
146
  검증 예외는 작업 실패로 처리되어 오류 훅과 `on_error` 정책을 따릅니다.
147
147
  예제의 `Reject()`는 잘못된 입력을 무한 재시도하지 않게 합니다. DLQ에 보관하려면
148
148
  `Subscription(error=...)`도 지정하고 `declare()`로 해당 큐를 준비하세요.
149
- 스키마·예제는 Inspector의 AsyncAPI와 콘솔에 표시되며,
149
+ 스키마·예제는 Inspector의 AsyncAPI와 Play에 표시되며,
150
150
  사용자 정의 Validator 패턴을 자동으로 JSON Schema로 역변환하지는 않습니다.
151
151
 
152
152
  ```mermaid
@@ -4,7 +4,7 @@
4
4
 
5
5
  Inspector tools, logging, and broker selection.
6
6
 
7
- ## Health checks and task console
7
+ ## Health checks and Play
8
8
 
9
9
  Inspector is optional and uses a Python standard-library HTTP server.
10
10
  Configure it before starting the Worker and pass `Worker(..., inspector=inspector)`.
@@ -13,7 +13,7 @@ This snippet reuses the `Connection` and `Configuration` imports from `worker.py
13
13
  ```python
14
14
  from DefStream.Inspector import Inspector
15
15
  from DefStream.Inspector.Extensions import (
16
- Console,
16
+ Play,
17
17
  Metrics,
18
18
  Ping,
19
19
  Specifications,
@@ -38,8 +38,8 @@ inspector = Inspector(
38
38
  Metrics('/metrics'),
39
39
  Status('/status'),
40
40
  Specifications('/asyncapi.json'),
41
- Console(
42
- '/console',
41
+ Play(
42
+ '/play',
43
43
  broker=create_connection,
44
44
  title='DefStream',
45
45
  ),
@@ -53,7 +53,7 @@ inspector = Inspector(
53
53
  | `/metrics` | Prometheus metrics with the `defstream_` prefix |
54
54
  | `/status` | Successes, failures, throughput, and duration; register with exactly one `Metrics` |
55
55
  | `/asyncapi.json` | Registered task request/reply contracts as AsyncAPI JSON |
56
- | `/console` | Browse tasks and schemas, send JSON messages, and execute RPC on supported brokers |
56
+ | `/play` | Browse tasks and schemas, send JSON messages, and execute RPC on supported brokers |
57
57
 
58
58
  There are no default routes. Metrics describe one Worker and reset on restart.
59
59
  Execution counts include retries and hooks, not unique messages or ACKs.
@@ -67,22 +67,26 @@ flowchart LR
67
67
  I --> M[Prometheus metrics]
68
68
  I --> S[Status endpoint]
69
69
  I --> A[AsyncAPI document]
70
- I --> C[Task console]
70
+ I --> C[Play task execution]
71
71
  C --> F[BrokerFactory]
72
72
  F --> B[New broker connection per use]
73
73
  ```
74
74
 
75
- **Restrict access.** The console example above publishes real tasks without
75
+ The `Console` extension has been renamed to `Play`. Update existing imports and
76
+ class usages to `Play`. The example above uses `/play`, but you can keep your
77
+ configured URL path. The extension logger is now `Worker.Inspector.Play`.
78
+
79
+ **Restrict access.** The Play example above publishes real tasks without
76
80
  authentication. For authentication, pass a random token of at least 16 characters
77
- using `Console(token=...)` and enter it in the browser. Load the token from an
81
+ using `Play(token=...)` and enter it in the browser. Load the token from an
78
82
  environment variable or secret store. Other built-in endpoints remain
79
83
  unauthenticated: bind to loopback or a trusted management network, and use an
80
84
  HTTPS reverse proxy with additional access control for remote access.
81
85
  Inspector has no built-in TLS and is not a public web server.
82
- The console's connection factory must return a new connection on every call,
86
+ Play's connection factory must return a new connection on every call,
83
87
  never the Worker's connection.
84
88
 
85
- Console's `broker` parameter uses the `DefStream.Broker.BrokerFactory` contract.
89
+ Play's `broker` parameter uses the `DefStream.Broker.BrokerFactory` contract.
86
90
  Its `__call__() -> Connection` takes no arguments and returns a new connection.
87
91
  Functions such as `create_connection` above and lambdas remain valid without changes.
88
92
  For a class-based factory, you can inherit `BrokerFactory` and implement `__call__`.
@@ -92,14 +96,19 @@ For a class-based factory, you can inherit `BrokerFactory` and implement `__call
92
96
 
93
97
  DefStream records messages through standard `logging` without configuring handlers,
94
98
  formatters, or levels. Select the sources your application needs. The samples
95
- output only the `Sample` and `DefStream` logger hierarchies, replacing their
99
+ output only the `Sample`, `Worker`, `Task`, and `Broker` logger hierarchies, replacing their
96
100
  `print()` calls with logging. The Worker's existing startup banner is still
97
101
  printed regardless of logging configuration.
98
102
 
99
103
  ```python
100
104
  from logging import DEBUG, Filter, Formatter, StreamHandler, getLogger
101
105
 
102
- sources = (Filter('Sample'), Filter('DefStream'))
106
+ sources = (
107
+ Filter('Sample'),
108
+ Filter('Worker'),
109
+ Filter('Task'),
110
+ Filter('Broker'),
111
+ )
103
112
  handler = StreamHandler()
104
113
  handler.setFormatter(Formatter(
105
114
  '%(asctime)s %(processName)s %(name)s %(levelname)s %(message)s'
@@ -113,24 +122,28 @@ logger = getLogger('Sample')
113
122
  logger.info('Application started')
114
123
  ```
115
124
 
116
- Apply filters to the **handler**, not the root logger. `Filter('DefStream')`
117
- includes `DefStream` and names below `DefStream.`, but not `DefStreamExtra`.
125
+ Apply filters to the **handler**, not the root logger. `Filter('Worker')`
126
+ includes `Worker` and names below `Worker.`, but not `WorkerExtra`.
127
+ Broker loggers use the separate `Broker` hierarchy and are not included by a
128
+ `Worker` filter.
118
129
  This configuration is an example for a standalone application; it does not change
119
130
  output from other handlers already installed. To receive only broker logs, select
120
- `DefStream.Broker.RabbitMQ` or `DefStream.Broker.Implements.Redis`
121
- instead of `DefStream`.
131
+ `Broker.RabbitMQ` or `Broker.Redis`.
122
132
 
123
- - The class member `logger` uses `DefStream.Worker`, `DefStream.Run`,
124
- `DefStream.Executor`, `DefStream.Pool`, `DefStream.ThreadPool`, and
125
- `DefStream.ProcessPool`.
133
+ - The `Worker` and `Run` loggers use `Worker` and `Task`, respectively.
134
+ `Executor`, `Pool`, `ThreadPool`, and `ProcessPool` use the `Worker` hierarchy.
126
135
  - Shared Pool methods also use the concrete pool's logger member. User subclasses
127
136
  inherit the default name and can explicitly override `logger`.
128
- - Inspector, Server, and RequestHandler share `DefStream.Inspector`.
137
+ - Inspector, Server, and RequestHandler share `Worker.Inspector`.
129
138
  HTTP request receipt is DEBUG; response status and transmission results are INFO.
130
- Extension-specific logs use `DefStream.Inspector.Extensions.<extension name>`.
139
+ Extension-specific logs use `Worker.Inspector.<extension name>`.
131
140
  - Normal per-message processing is DEBUG, lifecycle events are INFO, events
132
141
  requiring attention are WARNING, and processing failures are ERROR.
133
142
  Bodies, results, and credentials are excluded from the default log context.
143
+ - RabbitMQ and Redis broker loggers use the `Broker.RabbitMQ` and `Broker.Redis`
144
+ hierarchies. Update filters and handlers that use the former `DefStream.Broker...` names.
145
+ - Worker logs use the `Worker` and `Task` hierarchies, while Inspector logs use
146
+ `Worker.Inspector`. Update filters and handlers configured with former `DefStream.*` names.
134
147
  - Without any handlers, Python's `lastResort` may write WARNING and higher to
135
148
  stderr. Do not put sensitive values in user exception messages: failure
136
149
  tracebacks include those messages.
@@ -4,7 +4,7 @@
4
4
 
5
5
  Inspector, 로깅 및 브로커 선택 시 고려사항입니다.
6
6
 
7
- ## 상태 확인과 작업 콘솔
7
+ ## 상태 확인과 Play
8
8
 
9
9
  선택 기능인 Inspector는 Python 표준 라이브러리 HTTP 서버를 사용합니다.
10
10
  다음 코드를 Worker 실행 전에 구성하고 `Worker(..., inspector=inspector)`로 전달하세요.
@@ -13,7 +13,7 @@ Inspector, 로깅 및 브로커 선택 시 고려사항입니다.
13
13
  ```python
14
14
  from DefStream.Inspector import Inspector
15
15
  from DefStream.Inspector.Extensions import (
16
- Console,
16
+ Play,
17
17
  Metrics,
18
18
  Ping,
19
19
  Specifications,
@@ -38,8 +38,8 @@ inspector = Inspector(
38
38
  Metrics('/metrics'),
39
39
  Status('/status'),
40
40
  Specifications('/asyncapi.json'),
41
- Console(
42
- '/console',
41
+ Play(
42
+ '/play',
43
43
  broker=create_connection,
44
44
  title='DefStream',
45
45
  ),
@@ -53,7 +53,7 @@ inspector = Inspector(
53
53
  | `/metrics` | `defstream_` 접두사의 Prometheus 지표 |
54
54
  | `/status` | 처리 성공·실패·처리량·소요 시간. `Metrics` 하나와 함께 등록 |
55
55
  | `/asyncapi.json` | 등록 작업의 요청·응답 계약을 AsyncAPI JSON으로 제공 |
56
- | `/console` | 작업 목록·스키마 조회, JSON 메시지 발행, 지원 브로커의 RPC 실행 |
56
+ | `/play` | 작업 목록·스키마 조회, JSON 메시지 발행, 지원 브로커의 RPC 실행 |
57
57
 
58
58
  기본으로 등록되는 경로는 없습니다. 지표는 한 Worker 기준이며 재시작 시 초기화됩니다.
59
59
  처리 횟수는 재시도와 훅을 포함한 실행 시도 기준이지 고유 메시지 수나 ACK 수가 아닙니다.
@@ -67,20 +67,24 @@ flowchart LR
67
67
  I --> M[Prometheus 지표]
68
68
  I --> S[상태 경로]
69
69
  I --> A[AsyncAPI 문서]
70
- I --> C[작업 콘솔]
70
+ I --> C[Play 작업 실행]
71
71
  C --> F[BrokerFactory]
72
72
  F --> B[사용할 때마다 새 브로커 연결]
73
73
  ```
74
74
 
75
- **접근을 제한하세요.** 위 콘솔 예제는 인증 없이 실제 작업을 발행합니다.
76
- 인증이 필요하면 `Console`에 `token=`으로 무작위 16자 이상 토큰을 전달하고,
75
+ `Console` 확장은 `Play`로 이름이 변경되었습니다. 기존 import와 클래스 사용을
76
+ `Play`로 변경하세요. 위 예제는 `/play`를 사용하지만 직접 지정한 URL 경로는 유지할 수 있습니다.
77
+ 확장 로거 이름은 `Worker.Inspector.Play`입니다.
78
+
79
+ **접근을 제한하세요.** 위 Play 예제는 인증 없이 실제 작업을 발행합니다.
80
+ 인증이 필요하면 `Play`에 `token=`으로 무작위 16자 이상 토큰을 전달하고,
77
81
  브라우저에서 입력하세요. 토큰은 환경변수나 비밀 저장소에서 읽으세요.
78
82
  다른 기본 엔드포인트는 인증되지 않으므로 신뢰할 수 있는 관리망이나 루프백에만 바인딩하고,
79
83
  원격 접근은 HTTPS 역방향 프록시 및 별도 접근 제어를 사용하세요.
80
84
  Inspector 자체는 TLS를 제공하지 않으며 공개 웹 서버가 아닙니다.
81
- 콘솔의 연결 팩터리는 호출마다 새 연결을 반환해야 하고 Worker 연결을 공유하면 안 됩니다.
85
+ Play의 연결 팩터리는 호출마다 새 연결을 반환해야 하고 Worker 연결을 공유하면 안 됩니다.
82
86
 
83
- Console의 `broker` 인자는 `DefStream.Broker.BrokerFactory` 계약을 사용합니다.
87
+ Play의 `broker` 인자는 `DefStream.Broker.BrokerFactory` 계약을 사용합니다.
84
88
  이 계약의 `__call__() -> Connection`은 인자 없이 새 연결을 반환합니다.
85
89
  위의 `create_connection` 같은 함수나 람다도 그대로 전달할 수 있으며,
86
90
  클래스로 구현할 때는 `BrokerFactory`를 상속하고 `__call__`을 구현할 수 있습니다.
@@ -89,14 +93,19 @@ Console의 `broker` 인자는 `DefStream.Broker.BrokerFactory` 계약을 사용
89
93
  ## 로깅
90
94
 
91
95
  DefStream은 표준 `logging`으로 기록하며 핸들러·포매터·레벨을 설정하지 않습니다.
92
- 애플리케이션에서 필요한 출처만 선택해 출력하세요. 샘플은 `Sample`과 `DefStream`
93
- 이름 및 그 하위 로거만 출력하며, 샘플의 `print()`는 로그로 대체했습니다.
96
+ 애플리케이션에서 필요한 출처만 선택해 출력하세요. 샘플은 `Sample`, `Worker`, `Task`,
97
+ `Broker` 이름 및 그 하위 로거만 출력하며, 샘플의 `print()`는 로그로 대체했습니다.
94
98
  Worker의 기존 시작 배너는 로깅 설정과 무관하게 그대로 출력됩니다.
95
99
 
96
100
  ```python
97
101
  from logging import DEBUG, Filter, Formatter, StreamHandler, getLogger
98
102
 
99
- sources = (Filter('Sample'), Filter('DefStream'))
103
+ sources = (
104
+ Filter('Sample'),
105
+ Filter('Worker'),
106
+ Filter('Task'),
107
+ Filter('Broker'),
108
+ )
100
109
  handler = StreamHandler()
101
110
  handler.setFormatter(Formatter(
102
111
  '%(asctime)s %(processName)s %(name)s %(levelname)s %(message)s'
@@ -110,21 +119,25 @@ logger = getLogger('Sample')
110
119
  logger.info('Application started')
111
120
  ```
112
121
 
113
- 필터는 루트 로거가 아닌 **핸들러**에 적용합니다. `Filter('DefStream')`은
114
- `DefStream`과 `DefStream.` 하위 이름을 포함하지만 `DefStreamExtra`는 포함하지 않습니다.
122
+ 필터는 루트 로거가 아닌 **핸들러**에 적용합니다. `Filter('Worker')`는
123
+ `Worker`와 `Worker.` 하위 이름을 포함하지만 `WorkerExtra`는 포함하지 않습니다.
124
+ 브로커 로그는 `Broker` 계층을 사용하므로 `Worker` 필터에 포함되지 않습니다.
115
125
  위 설정은 독립 실행 애플리케이션을 위한 예제이며, 이미 있는 다른 핸들러의 출력은 바꾸지 않습니다.
116
- 브로커만 보고 싶으면 `DefStream` 대신 `DefStream.Broker.RabbitMQ` 또는
117
- `DefStream.Broker.Implements.Redis`를 선택할 수 있습니다.
126
+ 브로커만 보고 싶으면 `Broker.RabbitMQ` 또는 `Broker.Redis`를 선택할 수 있습니다.
118
127
 
119
- - 클래스 멤버 `logger`에 `DefStream.Worker`, `DefStream.Run`, `DefStream.Executor`,
120
- `DefStream.Pool`, `DefStream.ThreadPool`, `DefStream.ProcessPool`을 사용합니다.
128
+ - `Worker`와 `Run`의 `logger`는 각각 `Worker`와 `Task`를 사용합니다.
129
+ `Executor`, `Pool`, `ThreadPool`, `ProcessPool`의 로거는 `Worker` 계층을 사용합니다.
121
130
  - Pool 공통 메서드도 실제 풀의 로거 멤버를 사용합니다. 사용자 하위 클래스는 기본 이름을
122
131
  상속하며 원하면 `logger`를 명시적으로 재정의할 수 있습니다.
123
- - Inspector·Server·RequestHandler는 `DefStream.Inspector`를 공유합니다.
132
+ - Inspector·Server·RequestHandler는 `Worker.Inspector`를 공유합니다.
124
133
  HTTP 요청 수신은 DEBUG, 응답 상태와 전송 결과는 INFO입니다.
125
- 확장 고유 로그는 `DefStream.Inspector.Extensions.<확장 이름>`을 사용합니다.
134
+ 확장 고유 로그는 `Worker.Inspector.<확장 이름>`을 사용합니다.
126
135
  - 정상 메시지별 처리 흐름은 DEBUG, 생명주기는 INFO, 주의할 사건은 WARNING,
127
136
  처리 실패는 ERROR로 기록합니다. 본문·결과·인증정보는 기본 로그에 포함하지 않습니다.
137
+ - RabbitMQ와 Redis 브로커 로그는 각각 `Broker.RabbitMQ`와 `Broker.Redis` 이름 계층을
138
+ 사용합니다. 기존 `DefStream.Broker...` 이름으로 구성한 필터·핸들러는 새 이름에 맞춰야 합니다.
139
+ - Worker 로그는 `Worker` 및 `Task` 계층을, Inspector 로그는 `Worker.Inspector` 계층을
140
+ 사용합니다. 기존 `DefStream.*` 이름에 의존한 필터·핸들러를 새 이름에 맞춰 갱신하세요.
128
141
  - 핸들러가 전혀 없으면 Python의 `lastResort`에 의해 WARNING 이상이 stderr에 나올 수 있습니다.
129
142
  사용자 예외 메시지에는 민감한 값을 넣지 마세요. 실패 traceback에 예외 메시지가 포함됩니다.
130
143
 
@@ -47,18 +47,20 @@ discarded when none is configured.
47
47
  ### Logging
48
48
 
49
49
  `Connection`, `Consumer`, `Queue`, `Exchange`, `Stream`, and `Event` expose a class
50
- member `logger` named `DefStream.Broker.RabbitMQ.ClassName`; the logger name differs
50
+ member `logger` named `Broker.RabbitMQ.ClassName`; the logger name differs
51
51
  from the module path `DefStream.Broker.Implements.RabbitMQ`. Subclasses
52
52
  inherit that logger unless they explicitly override it. The library adds no handlers
53
53
  (including `NullHandler`), levels, or filters; propagation and `logging.lastResort`
54
54
  keep their standard behavior.
55
+ Update filters or handlers configured for the former `DefStream.Broker.RabbitMQ`
56
+ names to use `Broker.RabbitMQ`.
55
57
 
56
58
  The RabbitMQ implementation does not log normal operation at INFO.
57
59
  Connection attempts, successful connects and closes, successful queue/exchange/stream
58
60
  declaration, deletion, and binding, consumer subscription, channel close, and
59
61
  consumption-loop lifecycle events, and per-message/RPC/settlement tracing all use DEBUG,
60
62
  so opening and closing a connection per task does not add INFO records.
61
- Worker start, readiness, and shutdown remain visible at INFO through the `DefStream.Worker` logger.
63
+ Worker start, readiness, and shutdown remain visible at INFO through the `Worker` logger.
62
64
  Expected RPC anomalies use WARNING, and internal I/O or codec failures, including
63
65
  failed connection and resource operations, use ERROR.
64
66
  Payloads, results, headers, credentials, exception text, and tracebacks are omitted.
@@ -68,9 +70,10 @@ timeout does not cancel delivered work.
68
70
 
69
71
  The Python samples configure a root DEBUG console handler only in their main entry
70
72
  points. Its filter accepts `Filter('Sample')` **or**
71
- `Filter('DefStream.Broker.RabbitMQ')`, including dotted descendants only;
73
+ `Filter('Broker.RabbitMQ')`, including dotted descendants only;
72
74
  Pika and core logs are excluded. Applications configure their own handlers, levels,
73
- and filters at a chosen ancestor (`DefStream`, `DefStream.Broker`, etc.) or class.
75
+ and filters at `Broker`, `Broker.RabbitMQ`, or a class name. Broker loggers are
76
+ outside the `DefStream` hierarchy; use `DefStream` separately for core logs.
74
77
 
75
78
  ### Connection configuration
76
79
 
@@ -61,28 +61,31 @@ finally:
61
61
 
62
62
  ### 로깅
63
63
 
64
- 여섯 클래스는 `DefStream.Broker.RabbitMQ.ClassName` 이름의 클래스 멤버
64
+ 여섯 클래스는 `Broker.RabbitMQ.ClassName` 이름의 클래스 멤버
65
65
  `logger`를 사용합니다(`Connection`, `Consumer`, `Queue`, `Exchange`, `Stream`, `Event`).
66
66
  로거 이름은 모듈 경로(`DefStream.Broker.Implements.RabbitMQ`)와 다릅니다.
67
67
  하위 클래스는 같은 로거를 상속하며 필요하면 멤버를 재정의할 수 있습니다.
68
68
  라이브러리는 핸들러·`NullHandler`·레벨·필터를 설정하지 않고 루트로 전파합니다.
69
69
  미설정 시 표준 `logging.lastResort` 동작을 유지합니다.
70
+ 기존 `DefStream.Broker.RabbitMQ` 이름으로 필터나 핸들러를 설정했다면
71
+ `Broker.RabbitMQ`로 갱신하세요.
70
72
 
71
73
  RabbitMQ 구현은 정상 동작을 INFO로 기록하지 않습니다.
72
74
  연결 시도·성공·종료, 큐·Exchange·Stream 선언·삭제·바인딩 성공, Consumer의 구독 적용·채널 종료·소비 루프 생명주기,
73
75
  메시지·RPC·정산 추적은 모두 DEBUG입니다.
74
76
  작업마다 연결을 열고 닫아도 INFO 로그가 늘어나지 않습니다.
75
- Worker 시작·준비·종료 같은 실행 생명주기는 `DefStream.Worker` 로거의 INFO로 확인할 수 있습니다.
77
+ Worker 시작·준비·종료 같은 실행 생명주기는 `Worker` 로거의 INFO로 확인할 수 있습니다.
76
78
  RPC 시간 초과·원격 오류·응답 라우팅 불가는 WARNING, 연결·자원 작업 실패를 포함한 내부 I/O·코덱 오류는 ERROR입니다.
77
79
  본문·결과·헤더·인증정보와 예외 문자열·traceback은 기록하지 않으며 예외는 그대로 전파합니다.
78
80
  애플리케이션이 같은 예외를 다시 기록하면 중복될 수 있습니다.
79
81
  발행 API 반환은 소비자 처리 완료가 아니며, RPC 응답 시간 초과도 전달된 작업을 취소하지 않습니다.
80
82
 
81
83
  `samples/Broker/RabbitMQ/*.py`는 실행 진입점에서만 루트 DEBUG 콘솔 출력을 구성합니다.
82
- 핸들러의 `Filter('Sample')` 또는 `Filter('DefStream.Broker.RabbitMQ')`
84
+ 핸들러의 `Filter('Sample')` 또는 `Filter('Broker.RabbitMQ')`
83
85
  통과 조건으로 두 이름과 점으로 구분된 하위 로거만 출력하며 Pika·코어 등은 제외합니다.
84
- 다른 애플리케이션에서는 원하는 상위 이름(`DefStream`, `DefStream.Broker` 등)이나
85
- 클래스 이름을 선택하고 핸들러·레벨·필터를 직접 구성하세요.
86
+ 브로커 로거는 `DefStream` 계층 밖에 있으므로 다른 애플리케이션에서는 `Broker`,
87
+ `Broker.RabbitMQ` 또는 클래스 이름으로 선택하세요. `DefStream`은 Worker 등
88
+ 코어 로거를 선택할 때 사용합니다.
86
89
 
87
90
  ### Worker로 작업 처리하기
88
91
 
@@ -67,14 +67,16 @@ Read production credentials from environment variables or a secret store.
67
67
  ### Logging
68
68
 
69
69
  `Connection`, `Consumer`, `Queue`, and `Event` each use a class-level logger named
70
- `DefStream.Broker.Implements.Redis.<ClassName>`. Records propagate to the parent
71
- `DefStream` logger and the root logger. The library does not configure handlers
72
- or logging levels; configure output destinations and filters in your application.
70
+ `Broker.Redis.<ClassName>`. Records propagate to the parent `Broker` logger and
71
+ the root logger. Update filters or handlers configured for the former
72
+ `DefStream.Broker.Implements.Redis` names to use `Broker.Redis`. The library does
73
+ not configure handlers or logging levels; configure output destinations and filters
74
+ in your application.
73
75
  Records exclude message bodies and credentials, and existing exceptions still
74
76
  propagate to callers after an error is logged. Since callers may log the same
75
77
  failure again, keep traceback logging at the boundary responsible for that failure.
76
78
  The examples configure output only at their execution entry points, selecting
77
- the `Sample` and Redis logger hierarchies at DEBUG level.
79
+ the `Sample` and `Broker.Redis` logger hierarchies at DEBUG level.
78
80
 
79
81
  ### Consumer groups and history
80
82
 
@@ -111,8 +113,12 @@ This executable example prepares a task stream and group, then consumes tasks.
111
113
  ```python
112
114
  from signal import SIGINT, signal
113
115
 
114
- from DefStream.Broker.Policies import Reject
115
- from DefStream.Broker.Implements.Redis import Configuration, Connection, Subscription
116
+ from DefStream.Broker.Implements.Redis import (
117
+ Configuration,
118
+ Connection,
119
+ Reject,
120
+ Subscription,
121
+ )
116
122
  from DefStream.Worker import Run, ThreadPool, Worker, WorkerSetup, declare
117
123
 
118
124
 
@@ -219,7 +225,7 @@ flowchart TD
219
225
  - `delete_queue()` and `delete_stream()` delete the stream key itself.
220
226
  Do not remove shared streams/groups in cleanup code without ownership.
221
227
  - Connection, decoding, and handler failures propagate; there is no automatic reconnection.
222
- - Exchanges and RPC are not supported. Do not use `request()` or console RPC.
228
+ - Exchanges and RPC are not supported. Do not use `request()` or Play RPC.
223
229
  - Redis Cluster is implemented, but current integration tests cover standalone Redis.
224
230
  - The Worker's connection and pool belong to one run. `worker.stop()` waits for tasks and closes resources.
225
231
 
@@ -66,13 +66,14 @@ Cluster는 Redis Cluster를 사용하며 `database=0`이어야 합니다.
66
66
  ### 로깅
67
67
 
68
68
  `Connection`, `Consumer`, `Queue`, `Event`는 각각
69
- `DefStream.Broker.Implements.Redis.<클래스명>` 로거를 사용하며 상위
70
- `DefStream` 로거와 루트 로거로 전파합니다. 라이브러리는 핸들러나 로그 수준을
69
+ `Broker.Redis.<클래스명>` 로거를 사용하며 상위 `Broker` 로거와 루트 로거로
70
+ 전파합니다. 기존 `DefStream.Broker.Implements.Redis` 이름으로 설정한 필터나
71
+ 핸들러는 `Broker.Redis`로 갱신하세요. 라이브러리는 핸들러나 로그 수준을
71
72
  설정하지 않으므로 애플리케이션에서 필요한 출력 대상과 필터를 구성하세요.
72
73
  기록에는 메시지 본문과 인증 정보가 포함되지 않으며, 오류 로그 후에도 기존
73
74
  예외는 호출자에게 전파됩니다. 호출자가 같은 실패를 다시 기록할 수 있으므로
74
75
  traceback은 담당 경계 한 곳에서만 남기세요. 예제는 실행 진입점에서만 `Sample`
75
- 및 Redis 로거 계층을 DEBUG로 출력하도록 설정합니다.
76
+ 및 `Broker.Redis` 로거 계층을 DEBUG로 출력하도록 설정합니다.
76
77
 
77
78
  ### 소비자 그룹과 이력
78
79
 
@@ -109,8 +110,12 @@ for event in connection.stream('defstream.example.redis').read(
109
110
  ```python
110
111
  from signal import SIGINT, signal
111
112
 
112
- from DefStream.Broker.Policies import Reject
113
- from DefStream.Broker.Implements.Redis import Configuration, Connection, Subscription
113
+ from DefStream.Broker.Implements.Redis import (
114
+ Configuration,
115
+ Connection,
116
+ Reject,
117
+ Subscription,
118
+ )
114
119
  from DefStream.Worker import Run, ThreadPool, Worker, WorkerSetup, declare
115
120
 
116
121
 
@@ -215,7 +220,7 @@ flowchart TD
215
220
  - `delete_queue()`와 `delete_stream()`은 스트림 키 자체를 삭제합니다.
216
221
  공유 스트림·그룹을 정리 코드에서 무단 삭제하지 마세요.
217
222
  - 연결·디코딩·핸들러 오류는 호출자에게 전파하며 자동 재연결하지 않습니다.
218
- - Exchange와 RPC는 지원하지 않습니다. `request()`와 콘솔 RPC를 사용할 수 없습니다.
223
+ - Exchange와 RPC는 지원하지 않습니다. `request()`와 Play의 RPC를 사용할 수 없습니다.
219
224
  - Redis Cluster 구성은 지원하지만 현재 통합 테스트 대상은 standalone Redis입니다.
220
225
  - Worker의 연결과 풀은 한 번의 실행 전용입니다. `worker.stop()`은 작업을 기다린 뒤 자원을 닫습니다.
221
226
 
@@ -121,8 +121,8 @@ result = request(
121
121
  ### Success, failures, and retries
122
122
 
123
123
  - ACK follows successful execution and completion hooks. RabbitMQ RPC also publishes the reply before ACK.
124
- - Failures use the task's `on_error` policy. The default is `Requeue()`; choose `Reject()` explicitly if needed.
125
- - Both policies can be imported from `DefStream.Broker.Policies`.
124
+ - Failures use the task's `on_error` policy. If omitted, the broker's default behavior applies; choose a policy provided by that broker, such as `Reject()`, when needed.
125
+ - `Policy` is the shared broker contract. Import `Requeue` and `Reject` from the selected broker package; behavior can differ by broker.
126
126
  - Rejection is broker-specific: RabbitMQ dead-letters to a configured DLQ or discards the message;
127
127
  Redis acknowledges it for the group while preserving stream history.
128
128
  - There is no automatic retry-count limit. Choose a policy that avoids endless redelivery of permanently invalid messages.
@@ -119,8 +119,9 @@ result = request(
119
119
  ### 성공, 실패와 재시도
120
120
 
121
121
  - 작업 실행과 완료 훅이 성공한 뒤 ACK합니다. RabbitMQ RPC는 응답 발행도 ACK보다 먼저 수행합니다.
122
- - 실패 시 `on_error` 정책을 적용합니다. 기본값은 `Requeue()`이며, `Reject()`를 명시할 수 있습니다.
123
- - `Requeue`와 `Reject`는 공통으로 `DefStream.Broker.Policies`에서 가져올 수 있습니다.
122
+ - 실패 시 `on_error` 정책을 적용합니다. 생략하면 브로커 기본 동작을 따르며, `Reject()` 등 브로커가 제공하는 정책을 명시할 수 있습니다.
123
+ - `Policy`는 브로커 공통 계약입니다. `Requeue`와 `Reject` 구현은 사용 중인 브로커
124
+ 패키지에서 가져오며, 같은 이름의 정책도 동작은 브로커마다 다를 수 있습니다.
124
125
  - `Reject()`의 실제 효과는 브로커에 따라 다릅니다. RabbitMQ는 설정된 DLQ로 보내거나 폐기하며,
125
126
  Redis는 해당 그룹에서 ACK하고 스트림 이력은 유지합니다.
126
127
  - 재시도 횟수의 자동 제한은 없습니다. 영구적인 오류가 무한 재전달되지 않도록 정책을 선택하세요.
@@ -0,0 +1,5 @@
1
+ # 로그 이름 계층 정리
2
+
3
+ RabbitMQ와 Redis 로그 이름은 각각 `Broker.RabbitMQ.<클래스명>`과 `Broker.Redis.<클래스명>`으로 변경했습니다. Worker 로거는 `Worker`, 작업 실행 로그는 `Task`, 풀·실행기 로거는 `Worker` 계층을 사용합니다. Inspector 확장 로그는 `Worker.Inspector.<확장 이름>`으로 구분됩니다.
4
+
5
+ 기존 `DefStream.*` 이름으로 구성한 Broker·Worker·Inspector 로그 필터·핸들러는 새 이름 계층에 맞춰 갱신해야 합니다. 제품 모듈 import 경로와 공개 API는 변경되지 않았습니다.
@@ -0,0 +1,16 @@
1
+ # 구현 결과
2
+
3
+ RabbitMQ의 여섯 클래스와 Redis의 네 클래스 로거 이름은 각각 `Broker.RabbitMQ.<클래스명>`과 `Broker.Redis.<클래스명>`입니다. Worker 로거는 `Worker`, Run 로거는 `Task`, Executor·Pool 계열은 `Worker.<클래스명>`을 사용합니다. Inspector·Server·RequestHandler 로거는 `Worker.Inspector`, Inspector 확장 로거는 `Worker.Inspector.<클래스명>`을 사용합니다. Descriptor와 Validator는 로거를 사용하지 않아 변경하지 않았습니다. 기존 모듈·import 경로와 공개 API는 유지했습니다.
4
+
5
+ 새 로그 계층에 맞춰 샘플의 Worker·Broker 필터를 갱신했습니다. 한국어·영어 Operations, RabbitMQ, Redis 매뉴얼은 새 계층과 기존 이름으로 필터·핸들러를 구성한 애플리케이션의 설정 변경을 안내합니다.
6
+
7
+ | 검증 항목 | 결과 |
8
+ | --- | --- |
9
+ | Broker·Worker·Task·Inspector 클래스별 이름 및 계층 전파 | 통과 |
10
+ | 기존 import 경로·공개 API, Descriptor·Validator 비대상 유지 | 통과 |
11
+ | 한국어·영어 매뉴얼과 샘플 필터의 새 이름 일치 | 반영 |
12
+ | 확장 범위 검증: 65개 테스트 통과 | [이전 검증 기록](./tasks/1793261447019.md) |
13
+ | 추가 이름 변경 후 126개 테스트 통과, 6개 건너뜀 | [최신 검증 기록](./tasks/1793262314955.md) |
14
+ | 초기 브로커 변경 검증과 패키징 환경 제한 | [이전 검증 기록](./tasks/1793260818661.md) |
15
+
16
+ 단계별 구현 내역은 [브로커 구현 기록](./implements/1793260818660.md)과 [Worker·Inspector 구현 기록](./implements/1793261447018.md)을 참고하세요.
@@ -0,0 +1,67 @@
1
+ # 로거 이름 변경 작업 계획
2
+
3
+ ## 작업 정보
4
+
5
+ | 항목 | 내용 |
6
+ | --- | --- |
7
+ | 원본 이슈 | [#43](https://github.com/yong5eon/DefStream/issues/43) |
8
+ | 요구사항 | [REQUIREMENTS.md](./REQUIREMENTS.md) |
9
+ | 작업 대상 | `yong5eon/DefStream` |
10
+ | 작업 브랜치 | `fix/43` |
11
+ | 분기 기준 | 로컬 `master`의 `23df707` |
12
+ | 병합 대상 브랜치 | 미지정 |
13
+ | 진행 상태 | 완료 |
14
+
15
+ ## 진행 원칙
16
+
17
+ - 변경 범위와 인수 기준은 요구사항 명세를 따른다.
18
+ - RabbitMQ·Redis, Worker, Inspector 로거 이름과 계층만 요구된 형식으로 변경하고 로그 메시지·레벨·전파 정책은 유지한다.
19
+ - 모듈·import 경로와 공개 API는 유지하고, 로거를 사용하지 않는 Descriptor·Validator는 변경하지 않는다.
20
+ - 저장소 전체의 로거 이름 사용 테스트·문서·샘플을 새 계층과 일치시키되 API import 경로는 유지한다.
21
+ - 구현 중 영향 범위나 요구사항이 달라지면 이 계획과 요구사항 명세를 함께 갱신한다.
22
+ - 병합 대상이 지정되지 않았으므로 임의로 정하거나 병합하지 않는다.
23
+
24
+ ## 작업 순서
25
+
26
+ | 단계 | 작업 | 관련 기준 | 상태 |
27
+ | --- | --- | --- | --- |
28
+ | 1 | RabbitMQ·Redis 구현체의 클래스별 로거 선언과 저장소 내 기존 로거 이름 참조를 확인해 변경 대상을 확정한다. | AC-01, AC-02, AC-04 | 완료 |
29
+ | 2 | RabbitMQ 클래스 로거 이름을 `Broker.RabbitMQ.<클래스명>`으로, Redis 클래스 로거 이름을 `Broker.Redis.<클래스명>`으로 변경한다. | AC-01, AC-02 | 완료 |
30
+ | 3 | 로거 이름, 계층 전파·루트 전파와 로그 캡처를 확인하는 기존 테스트를 새 이름에 맞게 갱신하고, Worker·Inspector 이름 및 import 경로 불변을 확인한다. | AC-03, AC-04 | 완료 |
31
+ | 4 | Operations, RabbitMQ, Redis의 한국어·영어 매뉴얼에서 브로커 로거 이름과 사용 예시를 갱신하고, 기존 이름으로 설정한 애플리케이션은 새 이름에 맞춰야 함을 안내한다. | AC-05 | 완료 |
32
+ | 5 | 관련 로깅 테스트와 필요한 회귀 테스트를 실행하고, 검색 결과·내부 링크·변경 범위를 확인한다. 발견한 이번 변경의 문제를 수정하고 검증을 반복한다. | AC-01–AC-05 | 완료 |
33
+ | 6 | Worker 로거는 `Worker`, Run 로거는 `Task`, Executor·Pool 계열은 `Worker.<클래스명>`으로, Inspector 확장 로거는 `Worker.Inspector.<클래스명>`으로 변경한다. | AC-04, AC-05 | 완료 |
34
+ | 7 | Worker·Inspector 이름과 로그 계층을 검증하도록 테스트를 갱신하고, 기존 공개 import 및 비대상 Descriptor·Validator 동작이 유지되는지 확인한다. | AC-04–AC-06 | 완료 |
35
+ | 8 | Worker 샘플 필터에 `Task` 계층을 반영하고, Operations·RabbitMQ 한국어·영어 로깅 설명 및 기존 logger 설정 변경 안내를 갱신한다. | AC-07 | 완료 |
36
+ | 9 | 브로커·Worker·Inspector 로깅 테스트, 관련 회귀 테스트, 검색 및 문서 링크를 검증하고 결과를 기록한다. | AC-01–AC-07 | 완료 |
37
+
38
+ ## 인수 기준별 검증
39
+
40
+ | 인수 기준 | 검증 방법 |
41
+ | --- | --- |
42
+ | AC-01 | RabbitMQ 클래스별 로거 이름 테스트에서 새 형식을 확인하고 `DefStream.`이 없는지 검사한다. |
43
+ | AC-02 | Redis 클래스별 로거 이름 테스트에서 새 형식을 확인하고 `DefStream.` 및 `Implements.`가 없는지 검사한다. |
44
+ | AC-03 | 새 어댑터 상위 이름과 루트 이름으로 로그를 캡처하여 전파가 유지되고, 기록의 이름으로 필터링할 수 있는지 확인한다. |
45
+ | AC-04 | Worker 클래스별 새 이름, Pool 하위 클래스의 기본 이름 상속 및 로그 캡처 테스트를 실행한다. |
46
+ | AC-05 | Inspector 공용·확장 로거 이름과 `Worker.Inspector` 계층·루트 전파 테스트를 실행한다. |
47
+ | AC-06 | import·공개 API 테스트를 실행하고 Descriptor·Validator에서 로거 변경이 발생하지 않았는지 검색한다. |
48
+ | AC-07 | 브로커·Worker·Inspector 로깅 테스트를 실행하고 샘플 및 한국어·영어 매뉴얼의 새 이름과 설정 안내를 대조한다. |
49
+
50
+ ## 검증 범위와 주의사항
51
+
52
+ - 우선 `tests/test_rabbitmq_logging.py`, `tests/test_redis_logging.py`, `tests/test_logging.py` 및 브로커 패키징·공개 API 관련 테스트에서 새 이름과 유지 계약을 확인한다.
53
+ - 저장소 검색으로 기존 브로커 로거 이름을 참조하는 문서·샘플·테스트가 남아 있지 않은지 확인한다. import 경로의 `DefStream.Broker.Implements.*`는 제거 대상이 아니다.
54
+ - `DefStream.Worker`·`DefStream.Inspector` import 경로는 유지하고 logger 설정·검증 문자열만 새 이름으로 갱신한다.
55
+ - Worker 로그 이름은 `Worker`와 `Task`로 구분되므로 Worker 로그 필터 예제에는 두 계층을 모두 포함한다.
56
+ - Descriptor·Validator에는 로거가 없으므로 변경하지 않는다.
57
+ - 전체 테스트 실행 여부는 관련 테스트 결과와 환경 의존성을 확인한 뒤 결정하고, 실행하지 않은 검증은 완료로 기록하지 않는다.
58
+ - 구현 후 매뉴얼 영향 검토 및 변경 로그 작성은 실제 변경과 결과를 확인한 뒤 진행한다.
59
+ - 커밋·푸시·PR 생성은 별도 요청이 있을 때만 수행한다.
60
+
61
+ ## 완료 결과
62
+
63
+ - 브로커 로거 이름·테스트·샘플·한국어·영어 매뉴얼 변경과 인수 기준 검증을 완료했다.
64
+ - 테스트 상세 결과와 패키징 검증 환경 제한은 [작업 기록](./tasks/1793260818661.md)에 기록했다.
65
+ - 일반 배포 패키지 메타데이터를 사용하는 `test_broker_packaging.py` 검증은 현재 editable 설치 환경 때문에 완료하지 못했다.
66
+
67
+ Worker·Inspector 로거 변경 범위까지 확장해 구현과 요구사항 검증을 완료했다. 확장 구현 결과는 [구현 기록](./implements/1793261447018.md), 추가 이름 변경에 맞춘 테스트·샘플·문서 정합성 확인은 최신 [작업 기록](./tasks/1793262314955.md)에 정리했다.