DefStream 0.1.21__tar.gz → 0.1.22__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.
- {defstream-0.1.21 → defstream-0.1.22}/DefStream.egg-info/PKG-INFO +1 -1
- {defstream-0.1.21 → defstream-0.1.22}/DefStream.egg-info/SOURCES.txt +8 -0
- {defstream-0.1.21 → defstream-0.1.22}/PKG-INFO +1 -1
- {defstream-0.1.21 → defstream-0.1.22}/docs/RabbitMQ.en.md +3 -1
- {defstream-0.1.21 → defstream-0.1.22}/docs/RabbitMQ.md +2 -1
- defstream-0.1.22/issues/fix/50/CHANGELOG.md +5 -0
- defstream-0.1.22/issues/fix/50/IMPLEMENTS.md +8 -0
- defstream-0.1.22/issues/fix/50/PLAN.md +15 -0
- defstream-0.1.22/issues/fix/50/README.md +36 -0
- defstream-0.1.22/issues/fix/50/REQUIREMENTS.md +23 -0
- defstream-0.1.22/issues/fix/50/TASKS.md +8 -0
- defstream-0.1.22/issues/fix/50/implements/1793282630353.md +7 -0
- defstream-0.1.22/issues/fix/50/tasks/1793282630354.md +12 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Queue.py +1 -1
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_rpc.py +37 -1
- {defstream-0.1.21 → defstream-0.1.22}/.github/ISSUE_TEMPLATE/01.feature.yml +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/.github/ISSUE_TEMPLATE/02.bug.yml +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/.github/ISSUE_TEMPLATE/03.fix.yml +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/.github/ISSUE_TEMPLATE/04.task.yml +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/.github/workflows/ci.yml +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/.gitignore +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/DefStream.egg-info/dependency_links.txt +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/DefStream.egg-info/requires.txt +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/DefStream.egg-info/top_level.txt +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/LICENSE +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/README.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/README.setup.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Contracts.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Contracts.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/GettingStarted.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/GettingStarted.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/LifecycleHooks.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/LifecycleHooks.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Operations.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Operations.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/README.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Redis.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Redis.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Tasks.en.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/docs/Tasks.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/instructions/CODE.instructions.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/instructions/DOCS.instructions.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/instructions/README.instructions.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/bug/16/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/bug/16/ISSUE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/bug/16/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/bug/16/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/1/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/1/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/1/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/1/TASK.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/1/ci.refs.json +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/CHANGELOG.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/PLAN.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/TASKS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793274693488.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793275218996.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793275899489.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793276075771.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793276518340.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793277364116.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793278267422.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793278764701.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/implements/1793279849390.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793272872217.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793274121654.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793274231988.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793275218995.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793275501812.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793275955973.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793276099601.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793276518341.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793277424063.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793278267423.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793278764702.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/46/tasks/1793279849391.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/CHANGELOG.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/PLAN.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/TASKS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/implements/1793271568985.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/implements/1793272077065.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/tasks/1793271236067.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/tasks/1793271384432.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/tasks/1793271506089.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/tasks/1793271819682.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/47/tasks/1793272077066.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/8/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/8/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/8/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/feature/8/ci.refs.json +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/10/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/10/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/10/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/13/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/21/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/21/ISSUE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/21/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/21/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/24/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/24/ISSUE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/24/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/24/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/25/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/25/ISSUE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/25/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/25/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/25/TASK.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/26/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/26/ISSUE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/26/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/26/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/29/ISSUE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/29/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/29/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/29/TASK.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/3/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/3/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/3/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/3/ci.refs.json +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/CHANGELOG.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/PLAN.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/TASKS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/implements/1793257519898.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/implements/1793257826069.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/tasks/1793256929057.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/tasks/1793256990072.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/tasks/1793257216492.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/tasks/1793257519899.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/41/tasks/1793257826068.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/CHANGELOG.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/PLAN.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/TASKS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/implements/1793260818660.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/implements/1793261447018.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/tasks/1793260818661.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/tasks/1793261447019.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/43/tasks/1793262314955.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/6/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/6/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/fix/6/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/18/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/18/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/18/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/32/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/32/ISSUE.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/32/PLAN.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/32/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/32/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/32/TASK.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/34/CHANGELOG.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/34/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/34/PLAN.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/34/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/34/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/36/CHANGELOG.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/36/IMPLEMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/36/PLAN.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/36/README.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/issues/task/36/REQUIREMENTS.md +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Broker/RabbitMQ/Sample.RPC.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Broker/RabbitMQ/Sample.Stream.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Broker/RabbitMQ/Sample.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Broker/Redis/Sample.Stream.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Broker/Redis/Sample.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Broker/Sample.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Worker/RabbitMQ/Client.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Worker/RabbitMQ/Tasks.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Worker/RabbitMQ/Worker.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Worker/Redis/Sample.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/samples/Worker/Sample.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/setup.cfg +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/setup.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Configuration.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Connection.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Consumer.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Errors.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Event.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Configuration.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Connection.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Consumer.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Event.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Exchange.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Serializer.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Stream.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/Subscription.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/RabbitMQ/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/Configuration.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/Connection.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/Consumer.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/Event.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/Queue.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/Serializer.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/Subscription.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/Redis/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Implements/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Priority.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/Protocol.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Broker/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Descriptor/DataObject.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Descriptor/Types.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Descriptor/Value.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Descriptor/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extension.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/Metrics.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/Ping.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/Play.html +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/Play.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/Specifications.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/Status.html +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/Status.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Extensions/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Inspector.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/Response.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Inspector/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Pattern.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Array.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Common.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Compare.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Condition.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/DataObject.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/DateTime.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Number.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Object.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Size.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/String.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/Type.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Patterns/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Validate.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/Validator.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Validator/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/Executor.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/Message.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/Pool.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/Run.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/Specification.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/Startup.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/Worker.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/Worker/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/src/__init__.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/_support.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_broker_packaging.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_descriptor.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_inspector.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_inspector_logging.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_inspector_play.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_lifecycle_hooks.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_logging.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_pool_callbacks.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_process_signals.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_protocol_contracts.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_broker_methods.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_integration.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_logging.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_priorities.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_rpc_integration.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_timeouts.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_rabbitmq_worker.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_redis.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_redis_integration.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_redis_logging.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_runner_hooks.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_specifications.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_status.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_status_ui.cjs +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_task_messages.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_task_priorities.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_validator_patterns.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_worker.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_worker_recovery.py +0 -0
- {defstream-0.1.21 → defstream-0.1.22}/tests/test_worker_startup.py +0 -0
|
@@ -141,6 +141,14 @@ issues/fix/43/implements/1793261447018.md
|
|
|
141
141
|
issues/fix/43/tasks/1793260818661.md
|
|
142
142
|
issues/fix/43/tasks/1793261447019.md
|
|
143
143
|
issues/fix/43/tasks/1793262314955.md
|
|
144
|
+
issues/fix/50/CHANGELOG.md
|
|
145
|
+
issues/fix/50/IMPLEMENTS.md
|
|
146
|
+
issues/fix/50/PLAN.md
|
|
147
|
+
issues/fix/50/README.md
|
|
148
|
+
issues/fix/50/REQUIREMENTS.md
|
|
149
|
+
issues/fix/50/TASKS.md
|
|
150
|
+
issues/fix/50/implements/1793282630353.md
|
|
151
|
+
issues/fix/50/tasks/1793282630354.md
|
|
144
152
|
issues/fix/6/IMPLEMENTS.md
|
|
145
153
|
issues/fix/6/README.md
|
|
146
154
|
issues/fix/6/REQUIREMENTS.md
|
|
@@ -325,7 +325,9 @@ print(result)
|
|
|
325
325
|
|
|
326
326
|
- `timeout` is in **seconds**. Missing replies raise `TimeoutError`.
|
|
327
327
|
This does not cancel delivered work or strictly bound total connection and cleanup time.
|
|
328
|
-
-
|
|
328
|
+
- Queue-based RPC uses a dedicated connection and creates a temporary reply queue named
|
|
329
|
+
`{request queue}.{uuid4().hex}`, which is cleaned up on exit. Exchange RPC reply queue
|
|
330
|
+
names are not affected by this rule.
|
|
329
331
|
- Server rejection raises `DefStream.Broker.RemoteError`.
|
|
330
332
|
Requeue can retry without sending a final error response.
|
|
331
333
|
- Reply publication and request ACK are not atomic. Handle duplicate execution with RPC too.
|
|
@@ -315,7 +315,8 @@ print(result)
|
|
|
315
315
|
|
|
316
316
|
- `timeout`은 **초** 단위이며 응답이 없으면 `TimeoutError`가 발생합니다.
|
|
317
317
|
이미 전달된 서버 작업을 취소하거나 전체 연결·정리 시간을 엄격히 제한하는 값은 아닙니다.
|
|
318
|
-
-
|
|
318
|
+
- 요청 큐 RPC는 전용 연결을 사용하고 `{요청 큐}.{uuid4().hex}` 형식의 임시 응답 큐를 생성합니다.
|
|
319
|
+
큐는 종료 시 정리됩니다. Exchange RPC의 응답 큐 이름은 이 규칙의 영향을 받지 않습니다.
|
|
319
320
|
- 서버가 요청을 거부하면 `DefStream.Broker.RemoteError`가 발생합니다.
|
|
320
321
|
재큐잉은 최종 오류 응답 없이 재시도할 수 있습니다.
|
|
321
322
|
- 응답 발행과 요청 ACK는 원자적이지 않습니다. RPC에서도 중복 실행에 대비하세요.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# 구현 결과
|
|
2
|
+
|
|
3
|
+
요청 큐 기반 RPC의 임시 응답 큐를 `{요청 큐}.{uuid4().hex}` 형식으로 선언한다. 전용 응답 큐의 exclusive·auto-delete 수명, 요청 `reply_to`, `correlation_id` 응답 매칭과 Exchange RPC 동작은 유지한다.
|
|
4
|
+
|
|
5
|
+
- 구현 및 회귀 테스트: [요청 큐 기반 RPC 응답 큐 이름 적용](./implements/1793282630353.md)
|
|
6
|
+
- 검증 결과: [이슈 분석 및 RPC 회귀 검증](./tasks/1793282630354.md)
|
|
7
|
+
|
|
8
|
+
`tests/test_rabbitmq_rpc.py` 16개와 `tests/test_rabbitmq_broker_methods.py` 1개가 통과했다. RabbitMQ 서버가 필요한 통합 테스트는 실행하지 않았다.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 작업 계획
|
|
2
|
+
|
|
3
|
+
## 대상과 순서
|
|
4
|
+
|
|
5
|
+
1. 완료: `src/Broker/Implements/RabbitMQ/Queue.py`에서 요청 큐 이름 기반 응답 큐를 선언했다.
|
|
6
|
+
2. 완료: `tests/test_rabbitmq_rpc.py`에 응답 큐 형식, 기존 선언 옵션과 `reply_to` 연결을 검증하는 회귀 테스트를 추가했다.
|
|
7
|
+
3. 완료: `docs/RabbitMQ.md`와 `docs/RabbitMQ.en.md`의 동기 RPC 설명을 함께 갱신했다.
|
|
8
|
+
4. 완료: RPC 테스트를 실행하고 결과를 기록했다.
|
|
9
|
+
5. 완료: 종합 문서, 단계별 기록과 `CHANGELOG.md`를 실제 결과에 맞춰 정리했다.
|
|
10
|
+
|
|
11
|
+
## 검증
|
|
12
|
+
|
|
13
|
+
- `tests/test_rabbitmq_rpc.py`의 Queue 및 Exchange RPC 테스트로 요청 큐 경로와 Exchange 제외 범위를 확인한다.
|
|
14
|
+
- RPC 테스트에서 응답 큐 이름 형식, exclusive·auto-delete 옵션, `reply_to` 연결 및 기존 성공·실패 처리를 확인한다.
|
|
15
|
+
- 문서 링크와 한국어·영어 동기화 여부를 확인한다.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# RPC 임시 응답 큐 이름을 요청 큐 기반으로 생성
|
|
2
|
+
|
|
3
|
+
## 이슈와 작업 정보
|
|
4
|
+
|
|
5
|
+
- 원본 이슈: [#50](https://github.com/yong5eon/DefStream/issues/50)
|
|
6
|
+
- 상태: Open
|
|
7
|
+
- 유형: `fix` (원본 레이블에 적용됨)
|
|
8
|
+
- 추가 레이블: `rabbitmq`
|
|
9
|
+
- 저장소: `yong5eon/DefStream`
|
|
10
|
+
- 작업 브랜치: `fix/50`
|
|
11
|
+
- 분기 기준: `master` (`origin/master`와 동일)
|
|
12
|
+
- 요구사항: [REQUIREMENTS.md](./REQUIREMENTS.md)
|
|
13
|
+
- 계획: [PLAN.md](./PLAN.md)
|
|
14
|
+
- 구현 종합: [IMPLEMENTS.md](./IMPLEMENTS.md)
|
|
15
|
+
- 작업·검증 종합: [TASKS.md](./TASKS.md)
|
|
16
|
+
- 변경 로그: [CHANGELOG.md](./CHANGELOG.md)
|
|
17
|
+
- 최신 구현 기록: [1793282630353.md](./implements/1793282630353.md)
|
|
18
|
+
- 최신 작업 기록: [1793282630354.md](./tasks/1793282630354.md)
|
|
19
|
+
|
|
20
|
+
## 이슈 원문
|
|
21
|
+
|
|
22
|
+
### 해결하려는 문제
|
|
23
|
+
|
|
24
|
+
RabbitMQ RPC가 요청마다 RabbitMQ 자동 생성 이름(`amq.gen-*`)의 임시 응답 큐를 사용해 큐 이름만으로는 어떤 요청 큐의 응답인지 알아보기 어렵습니다.
|
|
25
|
+
|
|
26
|
+
### 제안하는 해결 방법
|
|
27
|
+
|
|
28
|
+
`Queue.call()`을 포함해 요청 큐를 대상으로 하는 RPC에서 임시 응답 큐 이름을 `{요청큐}.{uuid4().hex}` 형식으로 생성합니다. 예를 들어 요청 큐가 `orders`이면 응답 큐 이름은 `orders.0123456789abcdef...` 형태입니다. 응답 큐의 exclusive·auto-delete 동작과 요청의 `reply_to`/`correlation_id` 처리 방식은 유지합니다.
|
|
29
|
+
|
|
30
|
+
### 고려한 대안
|
|
31
|
+
|
|
32
|
+
RabbitMQ가 생성하는 기본 임시 큐 이름(`amq.gen-*`)을 그대로 사용합니다.
|
|
33
|
+
|
|
34
|
+
### 추가 정보
|
|
35
|
+
|
|
36
|
+
Exchange RPC는 특정 요청 큐 이름을 대상으로 하지 않으므로 이번 요청 큐 기반 이름 규칙의 범위에 포함하지 않습니다.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 요구사항
|
|
2
|
+
|
|
3
|
+
## 분석
|
|
4
|
+
|
|
5
|
+
- 현재 `Queue.call()`은 RabbitMQ에 빈 큐 이름을 전달해 `amq.gen-*` 임시 응답 큐를 생성한다. 큐 이름만으로는 요청 큐를 식별하기 어렵다.
|
|
6
|
+
- `RabbitMQ.Connection.request()`는 `Queue.call()`에 위임하므로 해당 경로도 같은 응답 큐 이름 규칙을 사용해야 한다.
|
|
7
|
+
- `Exchange.call()`은 특정 요청 큐를 대상으로 하지 않으며 이 변경 범위에서 제외한다.
|
|
8
|
+
- 기존 응답 큐 수명과 RPC 상관관계 계약은 변경하지 않는다.
|
|
9
|
+
|
|
10
|
+
## 확정 요구사항
|
|
11
|
+
|
|
12
|
+
1. 요청 큐 기반 RPC의 임시 응답 큐 이름을 `{요청 큐 이름}.{uuid4().hex}` 형식으로 생성한다.
|
|
13
|
+
2. 응답 큐를 exclusive 및 auto-delete로 선언하는 기존 동작을 유지한다.
|
|
14
|
+
3. 요청의 `reply_to`는 생성한 응답 큐를 가리키고, `correlation_id` 기반 응답 일치 처리는 유지한다.
|
|
15
|
+
4. Exchange RPC의 임시 응답 큐 이름과 동작은 변경하지 않는다.
|
|
16
|
+
5. RabbitMQ 상세 매뉴얼의 한국어·영어 설명을 일치시켜 갱신한다.
|
|
17
|
+
|
|
18
|
+
## 인수 기준
|
|
19
|
+
|
|
20
|
+
- `Queue.call()`이 요청 큐 이름 뒤에 32자리 소문자 16진수 UUID를 붙여 응답 큐를 선언한다.
|
|
21
|
+
- 선언된 큐가 `exclusive=True`, `auto_delete=True`이고 요청의 `reply_to`에 사용된다.
|
|
22
|
+
- 기존 RPC 성공·오류·타임아웃 및 상관관계 테스트가 유지된다.
|
|
23
|
+
- Exchange RPC 동작은 변경되지 않는다.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# 작업 및 검증 결과
|
|
2
|
+
|
|
3
|
+
이슈 원문과 기존 구현을 대조해 요청 큐 기반 RPC만 변경하고 Exchange RPC는 제외했다. `fix` 레이블이 이미 적용되어 있었고, 요청한 `fix/50` 브랜치를 `master`에서 생성했다.
|
|
4
|
+
|
|
5
|
+
- [이슈 분석 및 RPC 회귀 검증](./tasks/1793282630354.md)
|
|
6
|
+
- [구현 결과](./IMPLEMENTS.md)
|
|
7
|
+
|
|
8
|
+
워크스페이스 Python 환경에서 RPC 테스트 16개와 RabbitMQ 브로커 메서드 테스트 1개가 통과했다. RabbitMQ 서버 기반 통합 테스트는 실행하지 않았다.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 요청 큐 기반 RPC 응답 큐 이름 적용
|
|
2
|
+
|
|
3
|
+
`src/Broker/Implements/RabbitMQ/Queue.py`의 `Queue.call()`이 RabbitMQ에 빈 큐 이름을 전달하던 부분을 `{요청 큐}.{uuid4().hex}` 형식으로 변경했다. 응답 큐는 계속 `exclusive=True`, `auto_delete=True`로 선언되며, 생성된 큐 이름을 사용한 소비와 요청 `reply_to`, 기존 `correlation_id` 응답 일치 처리는 유지된다.
|
|
4
|
+
|
|
5
|
+
`Exchange.call()`은 별도 구현이므로 변경하지 않았다. 회귀 테스트에서 큐 RPC의 이름 형식과 옵션, `reply_to` 연결을 확인하고 Exchange RPC는 빈 이름을 계속 요청하는지 확인한다. RabbitMQ 상세 매뉴얼도 한국어·영어판을 함께 갱신했다.
|
|
6
|
+
|
|
7
|
+
검증 결과는 [작업·검증 기록](../tasks/1793282630354.md)에 정리했다.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 이슈 분석 및 RPC 회귀 검증
|
|
2
|
+
|
|
3
|
+
- GitHub 이슈 #50의 원문과 레이블을 확인했다. `fix` 유형 레이블이 이미 적용되어 있어 변경하지 않았다.
|
|
4
|
+
- `fix/50`을 `master` (`origin/master`와 동일)에서 생성했다. 요청 큐 RPC는 `Queue.call()`을 거치고 Exchange RPC는 별도 구현임을 확인했다.
|
|
5
|
+
- 이슈 README, 요구사항, 계획 및 구현·작업 종합 기록을 작성했다.
|
|
6
|
+
- 기본 시스템 Python에는 `pika`가 없어 첫 테스트 수집이 실패했다. 별도 설치 없이 워크스페이스 Python 환경에서 다음 테스트를 재실행했다.
|
|
7
|
+
- 저장소 루트에서 `python -m unittest discover -s tests -p test_rabbitmq_rpc.py`: 16개 통과
|
|
8
|
+
- 저장소 루트에서 `python -m unittest discover -s tests -p test_rabbitmq_broker_methods.py`: 1개 통과
|
|
9
|
+
- 테스트는 큐 응답 이름 형식, `exclusive`·`auto_delete`, 요청 `reply_to` 연결과 Exchange RPC의 기존 이름 요청 동작을 확인한다.
|
|
10
|
+
- 고객에게 보이는 응답 큐 식별 동작을 변경 로그에 기록하고 RabbitMQ 한국어·영어 상세 매뉴얼을 맞춰 갱신했다.
|
|
11
|
+
|
|
12
|
+
RabbitMQ 서버를 사용하는 통합 테스트는 실행하지 않았다.
|
|
@@ -3,6 +3,7 @@ from json import (
|
|
|
3
3
|
dumps,
|
|
4
4
|
loads,
|
|
5
5
|
)
|
|
6
|
+
from typing import List
|
|
6
7
|
from unittest import (
|
|
7
8
|
TestCase,
|
|
8
9
|
main,
|
|
@@ -310,6 +311,20 @@ class QueueClientTests(TestCase):
|
|
|
310
311
|
connect = self.connect
|
|
311
312
|
connection = connect.return_value
|
|
312
313
|
channel = connection.channel.return_value
|
|
314
|
+
reply_queues: List[str] = []
|
|
315
|
+
|
|
316
|
+
def declare_reply_queue(
|
|
317
|
+
*,
|
|
318
|
+
queue: str,
|
|
319
|
+
exclusive: bool,
|
|
320
|
+
auto_delete: bool,
|
|
321
|
+
) -> Mock:
|
|
322
|
+
declaration: Mock = Mock()
|
|
323
|
+
declaration.method.queue = queue if queue else 'amq.gen-test'
|
|
324
|
+
reply_queues.append(declaration.method.queue)
|
|
325
|
+
return declaration
|
|
326
|
+
|
|
327
|
+
channel.queue_declare.side_effect = declare_reply_queue
|
|
313
328
|
|
|
314
329
|
def respond(**kwargs):
|
|
315
330
|
callback = channel.basic_consume.call_args.kwargs['on_message_callback']
|
|
@@ -338,7 +353,28 @@ class QueueClientTests(TestCase):
|
|
|
338
353
|
7,
|
|
339
354
|
)
|
|
340
355
|
connection.close.assert_called_once_with()
|
|
341
|
-
|
|
356
|
+
queue_declaration = channel.queue_declare.call_args.kwargs
|
|
357
|
+
if self.client_class is Queue:
|
|
358
|
+
self.assertRegex(
|
|
359
|
+
queue_declaration['queue'],
|
|
360
|
+
r'^requests\.[0-9a-f]{32}$',
|
|
361
|
+
)
|
|
362
|
+
else:
|
|
363
|
+
self.assertEqual(
|
|
364
|
+
queue_declaration['queue'],
|
|
365
|
+
'',
|
|
366
|
+
)
|
|
367
|
+
self.assertTrue(queue_declaration['exclusive'])
|
|
368
|
+
self.assertTrue(queue_declaration['auto_delete'])
|
|
369
|
+
properties = channel.basic_publish.call_args.kwargs['properties']
|
|
370
|
+
self.assertEqual(
|
|
371
|
+
channel.basic_consume.call_args.args[0],
|
|
372
|
+
reply_queues[0],
|
|
373
|
+
)
|
|
374
|
+
self.assertEqual(
|
|
375
|
+
properties.reply_to,
|
|
376
|
+
reply_queues[0],
|
|
377
|
+
)
|
|
342
378
|
self.assertTrue(channel.basic_publish.call_args.kwargs['mandatory'])
|
|
343
379
|
|
|
344
380
|
def test_timeout_closes_connection(self):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|