quantum-framework 0.9.0__py3-none-any.whl
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.
- quantum/__init__.py +1 -0
- quantum/cli/__init__.py +2 -0
- quantum/cli/commands/__init__.py +15 -0
- quantum/cli/commands/build.py +417 -0
- quantum/cli/commands/dev.py +185 -0
- quantum/cli/commands/docs.py +329 -0
- quantum/cli/commands/lint.py +523 -0
- quantum/cli/commands/migrate.py +527 -0
- quantum/cli/commands/new.py +622 -0
- quantum/cli/commands/serve.py +190 -0
- quantum/cli/commands/test.py +193 -0
- quantum/cli/deploy.py +810 -0
- quantum/cli/hot_reload.py +951 -0
- quantum/cli/jobs.py +356 -0
- quantum/cli/mq.py +582 -0
- quantum/cli/pkg.py +390 -0
- quantum/cli/runner.py +547 -0
- quantum/cli/server_process.py +159 -0
- quantum/cli/utils.py +334 -0
- quantum/compiler/__init__.py +30 -0
- quantum/compiler/base_generator.py +367 -0
- quantum/compiler/cli.py +295 -0
- quantum/compiler/expression_transformer.py +444 -0
- quantum/compiler/javascript/__init__.py +10 -0
- quantum/compiler/javascript/generator.py +659 -0
- quantum/compiler/optimizer.py +270 -0
- quantum/compiler/python/__init__.py +10 -0
- quantum/compiler/python/generator.py +883 -0
- quantum/compiler/python/runtime.py +863 -0
- quantum/compiler/transpiler.py +330 -0
- quantum/core/__init__.py +3 -0
- quantum/core/ast_nodes.py +2611 -0
- quantum/core/expression_diagnostics.py +87 -0
- quantum/core/expression_stdlib.py +148 -0
- quantum/core/expressions.py +591 -0
- quantum/core/features/agents/src/__init__.py +30 -0
- quantum/core/features/agents/src/ast_node.py +540 -0
- quantum/core/features/conditionals/src/__init__.py +8 -0
- quantum/core/features/conditionals/src/ast_node.py +68 -0
- quantum/core/features/data_fetching/src/__init__.py +21 -0
- quantum/core/features/data_fetching/src/ast_node.py +312 -0
- quantum/core/features/data_fetching/src/desktop_adapter.py +351 -0
- quantum/core/features/data_fetching/src/html_adapter.py +474 -0
- quantum/core/features/data_fetching/src/parser.py +225 -0
- quantum/core/features/data_import/src/__init__.py +0 -0
- quantum/core/features/data_import/src/ast_node.py +291 -0
- quantum/core/features/data_import/src/runtime.py +538 -0
- quantum/core/features/dump/src/__init__.py +12 -0
- quantum/core/features/dump/src/ast_node.py +106 -0
- quantum/core/features/dump/src/parser.py +61 -0
- quantum/core/features/dump/src/runtime.py +246 -0
- quantum/core/features/functions/src/__init__.py +8 -0
- quantum/core/features/functions/src/ast_node.py +149 -0
- quantum/core/features/game_engine_2d/src/__init__.py +19 -0
- quantum/core/features/game_engine_2d/src/ast_nodes.py +1719 -0
- quantum/core/features/game_engine_2d/src/parser.py +983 -0
- quantum/core/features/invocation/src/__init__.py +0 -0
- quantum/core/features/invocation/src/ast_node.py +146 -0
- quantum/core/features/invocation/src/runtime.py +327 -0
- quantum/core/features/knowledge_base/src/__init__.py +6 -0
- quantum/core/features/knowledge_base/src/ast_node.py +113 -0
- quantum/core/features/knowledge_base/src/parser.py +82 -0
- quantum/core/features/logging/src/__init__.py +12 -0
- quantum/core/features/logging/src/ast_node.py +111 -0
- quantum/core/features/logging/src/parser.py +50 -0
- quantum/core/features/logging/src/runtime.py +190 -0
- quantum/core/features/loops/src/__init__.py +8 -0
- quantum/core/features/loops/src/ast_node.py +60 -0
- quantum/core/features/query/src/__init__.py +0 -0
- quantum/core/features/query/src/database_service.py +322 -0
- quantum/core/features/query/src/query_validators.py +20 -0
- quantum/core/features/state_management/src/__init__.py +11 -0
- quantum/core/features/state_management/src/ast_node.py +228 -0
- quantum/core/features/terminal_engine/src/__init__.py +21 -0
- quantum/core/features/terminal_engine/src/ast_nodes.py +560 -0
- quantum/core/features/terminal_engine/src/parser.py +361 -0
- quantum/core/features/testing_engine/src/__init__.py +41 -0
- quantum/core/features/testing_engine/src/ast_nodes.py +1212 -0
- quantum/core/features/testing_engine/src/parser.py +604 -0
- quantum/core/features/theming/src/__init__.py +48 -0
- quantum/core/features/theming/src/ast_node.py +137 -0
- quantum/core/features/theming/src/presets.py +405 -0
- quantum/core/features/ui_engine/src/__init__.py +20 -0
- quantum/core/features/ui_engine/src/ast_nodes.py +1854 -0
- quantum/core/features/ui_engine/src/parser.py +1106 -0
- quantum/core/features/websocket/src/__init__.py +24 -0
- quantum/core/features/websocket/src/ast_node.py +247 -0
- quantum/core/html_compat.py +299 -0
- quantum/core/parser.py +1235 -0
- quantum/core/parser_registry.py +213 -0
- quantum/core/parsers/__init__.py +76 -0
- quantum/core/parsers/ai/__init__.py +12 -0
- quantum/core/parsers/ai/agent_parser.py +106 -0
- quantum/core/parsers/ai/knowledge_parser.py +86 -0
- quantum/core/parsers/ai/llm_parser.py +78 -0
- quantum/core/parsers/ai/team_parser.py +88 -0
- quantum/core/parsers/base.py +322 -0
- quantum/core/parsers/composition/__init__.py +10 -0
- quantum/core/parsers/composition/import_parser.py +50 -0
- quantum/core/parsers/composition/slot_parser.py +48 -0
- quantum/core/parsers/control_flow/__init__.py +11 -0
- quantum/core/parsers/control_flow/if_parser.py +68 -0
- quantum/core/parsers/control_flow/loop_parser.py +105 -0
- quantum/core/parsers/control_flow/set_parser.py +89 -0
- quantum/core/parsers/data/__init__.py +12 -0
- quantum/core/parsers/data/data_parser.py +217 -0
- quantum/core/parsers/data/invoke_parser.py +116 -0
- quantum/core/parsers/data/query_parser.py +188 -0
- quantum/core/parsers/data/transaction_parser.py +77 -0
- quantum/core/parsers/events/__init__.py +9 -0
- quantum/core/parsers/events/dispatch_event_parser.py +44 -0
- quantum/core/parsers/forms/__init__.py +11 -0
- quantum/core/parsers/forms/action_parser.py +54 -0
- quantum/core/parsers/forms/flash_parser.py +34 -0
- quantum/core/parsers/forms/redirect_parser.py +33 -0
- quantum/core/parsers/functions/__init__.py +11 -0
- quantum/core/parsers/functions/function_parser.py +137 -0
- quantum/core/parsers/functions/param_parser.py +66 -0
- quantum/core/parsers/functions/return_parser.py +31 -0
- quantum/core/parsers/html/__init__.py +10 -0
- quantum/core/parsers/html/component_call_parser.py +130 -0
- quantum/core/parsers/html/html_parser.py +115 -0
- quantum/core/parsers/jobs/__init__.py +11 -0
- quantum/core/parsers/jobs/job_parser.py +71 -0
- quantum/core/parsers/jobs/schedule_parser.py +62 -0
- quantum/core/parsers/jobs/thread_parser.py +57 -0
- quantum/core/parsers/messaging/__init__.py +17 -0
- quantum/core/parsers/messaging/message_ack_parser.py +30 -0
- quantum/core/parsers/messaging/message_nack_parser.py +30 -0
- quantum/core/parsers/messaging/message_parser.py +114 -0
- quantum/core/parsers/messaging/queue_parser.py +61 -0
- quantum/core/parsers/messaging/websocket_parser.py +121 -0
- quantum/core/parsers/persistence/__init__.py +9 -0
- quantum/core/parsers/persistence/persist_parser.py +64 -0
- quantum/core/parsers/routing/__init__.py +9 -0
- quantum/core/parsers/routing/route_parser.py +41 -0
- quantum/core/parsers/scripting/__init__.py +12 -0
- quantum/core/parsers/scripting/pyclass_parser.py +62 -0
- quantum/core/parsers/scripting/pydecorator_parser.py +68 -0
- quantum/core/parsers/scripting/pyimport_parser.py +52 -0
- quantum/core/parsers/scripting/python_parser.py +49 -0
- quantum/core/parsers/services/__init__.py +12 -0
- quantum/core/parsers/services/dump_parser.py +52 -0
- quantum/core/parsers/services/file_parser.py +48 -0
- quantum/core/parsers/services/log_parser.py +46 -0
- quantum/core/parsers/services/mail_parser.py +65 -0
- quantum/core/tiers.py +82 -0
- quantum/packages/__init__.py +28 -0
- quantum/packages/manager.py +413 -0
- quantum/packages/manifest.py +351 -0
- quantum/packages/registry.py +399 -0
- quantum/packages/resolver.py +336 -0
- quantum/plugins/__init__.py +33 -0
- quantum/plugins/hooks.py +329 -0
- quantum/plugins/loader.py +479 -0
- quantum/plugins/manifest.py +336 -0
- quantum/plugins/registry.py +371 -0
- quantum/runtime/__init__.py +28 -0
- quantum/runtime/action_handler.py +443 -0
- quantum/runtime/adapters/__init__.py +88 -0
- quantum/runtime/adapters/memory_adapter.py +690 -0
- quantum/runtime/adapters/rabbitmq_adapter.py +715 -0
- quantum/runtime/adapters/redis_adapter.py +582 -0
- quantum/runtime/adapters/sqlite_adapter.py +414 -0
- quantum/runtime/agent_service.py +1133 -0
- quantum/runtime/api_server.py +86 -0
- quantum/runtime/ast_cache.py +506 -0
- quantum/runtime/auth_service.py +267 -0
- quantum/runtime/component.py +990 -0
- quantum/runtime/component_composer.py +319 -0
- quantum/runtime/component_resolver.py +174 -0
- quantum/runtime/database_service.py +598 -0
- quantum/runtime/email_service.py +162 -0
- quantum/runtime/error_handler.py +295 -0
- quantum/runtime/execution_context.py +286 -0
- quantum/runtime/executor_registry.py +171 -0
- quantum/runtime/executors/__init__.py +71 -0
- quantum/runtime/executors/ai/__init__.py +12 -0
- quantum/runtime/executors/ai/agent_executor.py +217 -0
- quantum/runtime/executors/ai/knowledge_executor.py +114 -0
- quantum/runtime/executors/ai/llm_executor.py +153 -0
- quantum/runtime/executors/ai/team_executor.py +171 -0
- quantum/runtime/executors/base.py +262 -0
- quantum/runtime/executors/control_flow/__init__.py +11 -0
- quantum/runtime/executors/control_flow/if_executor.py +93 -0
- quantum/runtime/executors/control_flow/loop_executor.py +307 -0
- quantum/runtime/executors/control_flow/set_executor.py +412 -0
- quantum/runtime/executors/data/__init__.py +12 -0
- quantum/runtime/executors/data/data_executor.py +145 -0
- quantum/runtime/executors/data/invoke_executor.py +176 -0
- quantum/runtime/executors/data/query_executor.py +256 -0
- quantum/runtime/executors/data/transaction_executor.py +91 -0
- quantum/runtime/executors/jobs/__init__.py +11 -0
- quantum/runtime/executors/jobs/job_executor.py +190 -0
- quantum/runtime/executors/jobs/schedule_executor.py +132 -0
- quantum/runtime/executors/jobs/thread_executor.py +127 -0
- quantum/runtime/executors/messaging/__init__.py +17 -0
- quantum/runtime/executors/messaging/message_ack_executor.py +51 -0
- quantum/runtime/executors/messaging/message_executor.py +174 -0
- quantum/runtime/executors/messaging/queue_executor.py +103 -0
- quantum/runtime/executors/messaging/websocket_executor.py +197 -0
- quantum/runtime/executors/scripting/__init__.py +11 -0
- quantum/runtime/executors/scripting/pyclass_executor.py +90 -0
- quantum/runtime/executors/scripting/pyimport_executor.py +81 -0
- quantum/runtime/executors/scripting/python_executor.py +249 -0
- quantum/runtime/executors/services/__init__.py +12 -0
- quantum/runtime/executors/services/dump_executor.py +72 -0
- quantum/runtime/executors/services/file_executor.py +89 -0
- quantum/runtime/executors/services/log_executor.py +77 -0
- quantum/runtime/executors/services/mail_executor.py +81 -0
- quantum/runtime/expression_cache.py +498 -0
- quantum/runtime/file_upload_service.py +326 -0
- quantum/runtime/function_registry.py +118 -0
- quantum/runtime/game_builder.py +166 -0
- quantum/runtime/game_code_generator.py +2371 -0
- quantum/runtime/game_templates.py +2006 -0
- quantum/runtime/godot_code_generator.py +4681 -0
- quantum/runtime/godot_templates.py +1449 -0
- quantum/runtime/job_executor.py +1599 -0
- quantum/runtime/knowledge_service.py +500 -0
- quantum/runtime/llm_cache.py +100 -0
- quantum/runtime/llm_providers.py +704 -0
- quantum/runtime/llm_service.py +287 -0
- quantum/runtime/logging_setup.py +140 -0
- quantum/runtime/message_broker.py +364 -0
- quantum/runtime/message_queue_service.py +571 -0
- quantum/runtime/param_validation.py +184 -0
- quantum/runtime/pypy_compat.py +315 -0
- quantum/runtime/python_bridge.py +698 -0
- quantum/runtime/query_validators.py +304 -0
- quantum/runtime/renderer.py +733 -0
- quantum/runtime/service_container.py +444 -0
- quantum/runtime/terminal_builder.py +76 -0
- quantum/runtime/terminal_code_generator.py +607 -0
- quantum/runtime/terminal_templates.py +243 -0
- quantum/runtime/testing_builder.py +77 -0
- quantum/runtime/testing_code_generator.py +833 -0
- quantum/runtime/testing_templates.py +85 -0
- quantum/runtime/ui_builder.py +188 -0
- quantum/runtime/ui_desktop_adapter.py +1730 -0
- quantum/runtime/ui_desktop_templates.py +307 -0
- quantum/runtime/ui_html_adapter.py +2691 -0
- quantum/runtime/ui_html_templates.py +2297 -0
- quantum/runtime/ui_mobile_adapter.py +1832 -0
- quantum/runtime/ui_mobile_templates.py +1003 -0
- quantum/runtime/ui_textual_adapter.py +1866 -0
- quantum/runtime/ui_textual_templates.py +45 -0
- quantum/runtime/ui_tokens.py +465 -0
- quantum/runtime/ui_validator.py +365 -0
- quantum/runtime/validators.py +256 -0
- quantum/runtime/web_server.py +1766 -0
- quantum/runtime/websocket_adapter.py +501 -0
- quantum/runtime/websocket_service.py +585 -0
- quantum/runtime/websocket_transport.py +289 -0
- quantum/runtime/wsgi.py +101 -0
- quantum/utils/__init__.py +1 -0
- quantum_framework-0.9.0.dist-info/METADATA +244 -0
- quantum_framework-0.9.0.dist-info/RECORD +262 -0
- quantum_framework-0.9.0.dist-info/WHEEL +5 -0
- quantum_framework-0.9.0.dist-info/entry_points.txt +2 -0
- quantum_framework-0.9.0.dist-info/licenses/LICENSE +21 -0
- quantum_framework-0.9.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Message Queue System - Message Broker Abstraction
|
|
3
|
+
|
|
4
|
+
Provides a unified interface for message queue operations across
|
|
5
|
+
different backends (In-Memory, Redis, RabbitMQ).
|
|
6
|
+
|
|
7
|
+
Supports:
|
|
8
|
+
- Publish/Subscribe (topics)
|
|
9
|
+
- Direct queue messaging
|
|
10
|
+
- Request/Reply pattern
|
|
11
|
+
- Message acknowledgment
|
|
12
|
+
- Dead letter queues
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from abc import ABC, abstractmethod
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
|
+
from typing import Dict, Any, Optional, Callable, List
|
|
18
|
+
import uuid
|
|
19
|
+
import time
|
|
20
|
+
import json
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class MessageBrokerError(Exception):
|
|
24
|
+
"""Base exception for message broker errors"""
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ConnectionError(MessageBrokerError):
|
|
29
|
+
"""Raised when connection to broker fails"""
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class PublishError(MessageBrokerError):
|
|
34
|
+
"""Raised when message publish fails"""
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class SubscribeError(MessageBrokerError):
|
|
39
|
+
"""Raised when subscription fails"""
|
|
40
|
+
pass
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class QueueError(MessageBrokerError):
|
|
44
|
+
"""Raised when queue operation fails"""
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass
|
|
49
|
+
class Message:
|
|
50
|
+
"""
|
|
51
|
+
Represents a message in the queue system.
|
|
52
|
+
|
|
53
|
+
Attributes:
|
|
54
|
+
id: Unique message identifier
|
|
55
|
+
topic: Topic name (for pub/sub)
|
|
56
|
+
queue: Queue name (for direct messaging)
|
|
57
|
+
body: Message payload (can be any JSON-serializable type)
|
|
58
|
+
headers: Custom message headers
|
|
59
|
+
timestamp: Message creation timestamp
|
|
60
|
+
reply_to: Queue for reply (used in request/reply pattern)
|
|
61
|
+
correlation_id: ID linking request and response
|
|
62
|
+
"""
|
|
63
|
+
id: str = field(default_factory=lambda: str(uuid.uuid4()))
|
|
64
|
+
topic: Optional[str] = None
|
|
65
|
+
queue: Optional[str] = None
|
|
66
|
+
body: Any = None
|
|
67
|
+
headers: Dict[str, str] = field(default_factory=dict)
|
|
68
|
+
timestamp: float = field(default_factory=time.time)
|
|
69
|
+
reply_to: Optional[str] = None
|
|
70
|
+
correlation_id: Optional[str] = None
|
|
71
|
+
|
|
72
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
73
|
+
"""Serialize message to dictionary"""
|
|
74
|
+
return {
|
|
75
|
+
'id': self.id,
|
|
76
|
+
'topic': self.topic,
|
|
77
|
+
'queue': self.queue,
|
|
78
|
+
'body': self.body,
|
|
79
|
+
'headers': self.headers,
|
|
80
|
+
'timestamp': self.timestamp,
|
|
81
|
+
'reply_to': self.reply_to,
|
|
82
|
+
'correlation_id': self.correlation_id
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def from_dict(cls, data: Dict[str, Any]) -> 'Message':
|
|
87
|
+
"""Deserialize message from dictionary"""
|
|
88
|
+
return cls(
|
|
89
|
+
id=data.get('id', str(uuid.uuid4())),
|
|
90
|
+
topic=data.get('topic'),
|
|
91
|
+
queue=data.get('queue'),
|
|
92
|
+
body=data.get('body'),
|
|
93
|
+
headers=data.get('headers', {}),
|
|
94
|
+
timestamp=data.get('timestamp', time.time()),
|
|
95
|
+
reply_to=data.get('reply_to'),
|
|
96
|
+
correlation_id=data.get('correlation_id')
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
def to_json(self) -> str:
|
|
100
|
+
"""Serialize message to JSON string"""
|
|
101
|
+
return json.dumps(self.to_dict())
|
|
102
|
+
|
|
103
|
+
@classmethod
|
|
104
|
+
def from_json(cls, json_str: str) -> 'Message':
|
|
105
|
+
"""Deserialize message from JSON string"""
|
|
106
|
+
return cls.from_dict(json.loads(json_str))
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@dataclass
|
|
110
|
+
class QueueInfo:
|
|
111
|
+
"""
|
|
112
|
+
Information about a queue.
|
|
113
|
+
|
|
114
|
+
Attributes:
|
|
115
|
+
name: Queue name
|
|
116
|
+
message_count: Number of messages in queue
|
|
117
|
+
consumer_count: Number of active consumers
|
|
118
|
+
durable: Whether queue survives broker restart
|
|
119
|
+
auto_delete: Whether queue is deleted when last consumer disconnects
|
|
120
|
+
"""
|
|
121
|
+
name: str
|
|
122
|
+
message_count: int = 0
|
|
123
|
+
consumer_count: int = 0
|
|
124
|
+
durable: bool = True
|
|
125
|
+
auto_delete: bool = False
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
# Type alias for message handler callbacks
|
|
129
|
+
MessageHandler = Callable[[Message], None]
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
class MessageBroker(ABC):
|
|
133
|
+
"""
|
|
134
|
+
Abstract base class for message broker implementations.
|
|
135
|
+
|
|
136
|
+
Provides a unified interface for:
|
|
137
|
+
- Connection management
|
|
138
|
+
- Publishing to topics
|
|
139
|
+
- Sending to queues
|
|
140
|
+
- Subscribing to topics/queues
|
|
141
|
+
- Message acknowledgment
|
|
142
|
+
- Queue management
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
@abstractmethod
|
|
146
|
+
def connect(self, config: Dict[str, Any]) -> None:
|
|
147
|
+
"""
|
|
148
|
+
Connect to the message broker.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
config: Connection configuration (host, port, credentials, etc.)
|
|
152
|
+
|
|
153
|
+
Raises:
|
|
154
|
+
ConnectionError: If connection fails
|
|
155
|
+
"""
|
|
156
|
+
pass
|
|
157
|
+
|
|
158
|
+
@abstractmethod
|
|
159
|
+
def disconnect(self) -> None:
|
|
160
|
+
"""
|
|
161
|
+
Disconnect from the message broker.
|
|
162
|
+
|
|
163
|
+
Should clean up all resources, close connections, and
|
|
164
|
+
cancel any active subscriptions.
|
|
165
|
+
"""
|
|
166
|
+
pass
|
|
167
|
+
|
|
168
|
+
@abstractmethod
|
|
169
|
+
def is_connected(self) -> bool:
|
|
170
|
+
"""
|
|
171
|
+
Check if connected to the broker.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
True if connected, False otherwise
|
|
175
|
+
"""
|
|
176
|
+
pass
|
|
177
|
+
|
|
178
|
+
@abstractmethod
|
|
179
|
+
def publish(self, topic: str, message: Message) -> None:
|
|
180
|
+
"""
|
|
181
|
+
Publish a message to a topic (pub/sub pattern).
|
|
182
|
+
|
|
183
|
+
All subscribers to the topic will receive the message.
|
|
184
|
+
|
|
185
|
+
Args:
|
|
186
|
+
topic: Topic name (supports wildcards in some implementations)
|
|
187
|
+
message: Message to publish
|
|
188
|
+
|
|
189
|
+
Raises:
|
|
190
|
+
PublishError: If publish fails
|
|
191
|
+
"""
|
|
192
|
+
pass
|
|
193
|
+
|
|
194
|
+
@abstractmethod
|
|
195
|
+
def send(self, queue: str, message: Message) -> None:
|
|
196
|
+
"""
|
|
197
|
+
Send a message directly to a queue (point-to-point).
|
|
198
|
+
|
|
199
|
+
Only one consumer will receive the message.
|
|
200
|
+
|
|
201
|
+
Args:
|
|
202
|
+
queue: Queue name
|
|
203
|
+
message: Message to send
|
|
204
|
+
|
|
205
|
+
Raises:
|
|
206
|
+
PublishError: If send fails
|
|
207
|
+
"""
|
|
208
|
+
pass
|
|
209
|
+
|
|
210
|
+
@abstractmethod
|
|
211
|
+
def request(self, queue: str, message: Message, timeout: int = 5000) -> Message:
|
|
212
|
+
"""
|
|
213
|
+
Send a request and wait for a reply (request/reply pattern).
|
|
214
|
+
|
|
215
|
+
Args:
|
|
216
|
+
queue: Queue to send request to
|
|
217
|
+
message: Request message
|
|
218
|
+
timeout: Timeout in milliseconds
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
Response message
|
|
222
|
+
|
|
223
|
+
Raises:
|
|
224
|
+
PublishError: If request fails
|
|
225
|
+
TimeoutError: If no response within timeout
|
|
226
|
+
"""
|
|
227
|
+
pass
|
|
228
|
+
|
|
229
|
+
@abstractmethod
|
|
230
|
+
def subscribe(self, topic: str, handler: MessageHandler) -> str:
|
|
231
|
+
"""
|
|
232
|
+
Subscribe to a topic.
|
|
233
|
+
|
|
234
|
+
Args:
|
|
235
|
+
topic: Topic pattern to subscribe to
|
|
236
|
+
handler: Callback function for received messages
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
Subscription ID (for unsubscribing)
|
|
240
|
+
|
|
241
|
+
Raises:
|
|
242
|
+
SubscribeError: If subscription fails
|
|
243
|
+
"""
|
|
244
|
+
pass
|
|
245
|
+
|
|
246
|
+
@abstractmethod
|
|
247
|
+
def consume(self, queue: str, handler: MessageHandler, prefetch: int = 1) -> str:
|
|
248
|
+
"""
|
|
249
|
+
Start consuming messages from a queue.
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
queue: Queue name
|
|
253
|
+
handler: Callback function for received messages
|
|
254
|
+
prefetch: Number of messages to prefetch
|
|
255
|
+
|
|
256
|
+
Returns:
|
|
257
|
+
Consumer ID (for stopping consumption)
|
|
258
|
+
|
|
259
|
+
Raises:
|
|
260
|
+
SubscribeError: If consumption setup fails
|
|
261
|
+
"""
|
|
262
|
+
pass
|
|
263
|
+
|
|
264
|
+
@abstractmethod
|
|
265
|
+
def unsubscribe(self, subscription_id: str) -> None:
|
|
266
|
+
"""
|
|
267
|
+
Unsubscribe from a topic or stop consuming from a queue.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
subscription_id: ID returned from subscribe() or consume()
|
|
271
|
+
"""
|
|
272
|
+
pass
|
|
273
|
+
|
|
274
|
+
@abstractmethod
|
|
275
|
+
def ack(self, message: Message) -> None:
|
|
276
|
+
"""
|
|
277
|
+
Acknowledge successful message processing.
|
|
278
|
+
|
|
279
|
+
Args:
|
|
280
|
+
message: Message to acknowledge
|
|
281
|
+
"""
|
|
282
|
+
pass
|
|
283
|
+
|
|
284
|
+
@abstractmethod
|
|
285
|
+
def nack(self, message: Message, requeue: bool = True) -> None:
|
|
286
|
+
"""
|
|
287
|
+
Negative acknowledge - reject a message.
|
|
288
|
+
|
|
289
|
+
Args:
|
|
290
|
+
message: Message to reject
|
|
291
|
+
requeue: If True, requeue the message; if False, discard or send to DLQ
|
|
292
|
+
"""
|
|
293
|
+
pass
|
|
294
|
+
|
|
295
|
+
@abstractmethod
|
|
296
|
+
def declare_queue(
|
|
297
|
+
self,
|
|
298
|
+
name: str,
|
|
299
|
+
durable: bool = True,
|
|
300
|
+
exclusive: bool = False,
|
|
301
|
+
auto_delete: bool = False,
|
|
302
|
+
dead_letter_queue: Optional[str] = None,
|
|
303
|
+
ttl: Optional[int] = None
|
|
304
|
+
) -> None:
|
|
305
|
+
"""
|
|
306
|
+
Declare a queue (create if not exists).
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
name: Queue name
|
|
310
|
+
durable: Survive broker restart
|
|
311
|
+
exclusive: Only this connection can access
|
|
312
|
+
auto_delete: Delete when last consumer disconnects
|
|
313
|
+
dead_letter_queue: Queue for rejected/expired messages
|
|
314
|
+
ttl: Message TTL in milliseconds
|
|
315
|
+
|
|
316
|
+
Raises:
|
|
317
|
+
QueueError: If declaration fails
|
|
318
|
+
"""
|
|
319
|
+
pass
|
|
320
|
+
|
|
321
|
+
@abstractmethod
|
|
322
|
+
def purge_queue(self, name: str) -> int:
|
|
323
|
+
"""
|
|
324
|
+
Purge all messages from a queue.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
name: Queue name
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
Number of messages purged
|
|
331
|
+
|
|
332
|
+
Raises:
|
|
333
|
+
QueueError: If purge fails
|
|
334
|
+
"""
|
|
335
|
+
pass
|
|
336
|
+
|
|
337
|
+
@abstractmethod
|
|
338
|
+
def delete_queue(self, name: str) -> None:
|
|
339
|
+
"""
|
|
340
|
+
Delete a queue.
|
|
341
|
+
|
|
342
|
+
Args:
|
|
343
|
+
name: Queue name
|
|
344
|
+
|
|
345
|
+
Raises:
|
|
346
|
+
QueueError: If deletion fails
|
|
347
|
+
"""
|
|
348
|
+
pass
|
|
349
|
+
|
|
350
|
+
@abstractmethod
|
|
351
|
+
def get_queue_info(self, name: str) -> QueueInfo:
|
|
352
|
+
"""
|
|
353
|
+
Get information about a queue.
|
|
354
|
+
|
|
355
|
+
Args:
|
|
356
|
+
name: Queue name
|
|
357
|
+
|
|
358
|
+
Returns:
|
|
359
|
+
QueueInfo with queue statistics
|
|
360
|
+
|
|
361
|
+
Raises:
|
|
362
|
+
QueueError: If queue doesn't exist or info retrieval fails
|
|
363
|
+
"""
|
|
364
|
+
pass
|