Skip to content

Commit b56b027

Browse files
committed
Fixed some interfaces.
1 parent a16fcdb commit b56b027

File tree

11 files changed

+70
-260
lines changed

11 files changed

+70
-260
lines changed

python/natsrpy/_natsrpy_rs/__init__.pyi

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ from natsrpy._natsrpy_rs.message import Message
88
class IteratorSubscription:
99
def __aiter__(self) -> IteratorSubscription: ...
1010
async def __anext__(self) -> Message: ...
11+
async def next(self, timeout: float | timedelta | None = None) -> Message: ...
1112
async def unsubscribe(self, limit: int | None = None) -> None: ...
1213
async def drain(self) -> None: ...
1314

@@ -41,7 +42,15 @@ class Nats:
4142
reply: str | None = None,
4243
err_on_disconnect: bool = False,
4344
) -> None: ...
44-
async def request(self, subject: str, payload: bytes) -> None: ...
45+
async def request(
46+
self,
47+
subject: str,
48+
payload: bytes | str | bytearray | memoryview,
49+
*,
50+
headers: dict[str, Any] | None = None,
51+
reply: str | None = None,
52+
err_on_disconnect: bool = False,
53+
) -> None: ...
4554
async def drain(self) -> None: ...
4655
async def flush(self) -> None: ...
4756
@overload

python/natsrpy/_natsrpy_rs/js/managers.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ class StreamsManager:
1515
async def create(self, config: StreamConfig) -> Stream: ...
1616
async def create_or_update(self, config: StreamConfig) -> Stream: ...
1717
async def get(self, bucket: str) -> Stream: ...
18-
async def delete(self, bucket: str) -> None: ...
18+
async def delete(self, bucket: str) -> bool: ...
1919
async def update(self, config: StreamConfig) -> Stream: ...
2020

2121
class KVManager:
2222
async def create(self, config: KVConfig) -> KeyValue: ...
2323
async def create_or_update(self, config: KVConfig) -> KeyValue: ...
2424
async def get(self, bucket: str) -> KeyValue: ...
25-
async def delete(self, bucket: str) -> None: ...
25+
async def delete(self, bucket: str) -> bool: ...
2626
async def update(self, config: KVConfig) -> KeyValue: ...
2727

2828
class ConsumersManager:

python/tests/test_configs.py

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
from natsrpy.js import (
22
AckPolicy,
3-
Compression,
43
DeliverPolicy,
54
DiscardPolicy,
65
KVConfig,
76
ObjectStoreConfig,
8-
PersistenceMode,
97
PullConsumerConfig,
108
PushConsumerConfig,
119
ReplayPolicy,
@@ -16,55 +14,6 @@
1614
)
1715

1816

19-
async def test_storage_type_values() -> None:
20-
assert StorageType.FILE is not None
21-
assert StorageType.MEMORY is not None
22-
assert StorageType.FILE != StorageType.MEMORY
23-
24-
25-
async def test_discard_policy_values() -> None:
26-
assert DiscardPolicy.OLD is not None
27-
assert DiscardPolicy.NEW is not None
28-
assert DiscardPolicy.OLD != DiscardPolicy.NEW
29-
30-
31-
async def test_retention_policy_values() -> None:
32-
assert RetentionPolicy.LIMITS is not None
33-
assert RetentionPolicy.INTEREST is not None
34-
assert RetentionPolicy.WORKQUEUE is not None
35-
36-
37-
async def test_compression_values() -> None:
38-
assert Compression.S2 is not None
39-
assert Compression.NONE is not None
40-
assert Compression.S2 != Compression.NONE
41-
42-
43-
async def test_persistence_mode_values() -> None:
44-
assert PersistenceMode.Default is not None
45-
assert PersistenceMode.Async is not None
46-
47-
48-
async def test_deliver_policy_values() -> None:
49-
assert DeliverPolicy.ALL is not None
50-
assert DeliverPolicy.LAST is not None
51-
assert DeliverPolicy.NEW is not None
52-
assert DeliverPolicy.BY_START_SEQUENCE is not None
53-
assert DeliverPolicy.BY_START_TIME is not None
54-
assert DeliverPolicy.LAST_PER_SUBJECT is not None
55-
56-
57-
async def test_ack_policy_values() -> None:
58-
assert AckPolicy.EXPLICIT is not None
59-
assert AckPolicy.NONE is not None
60-
assert AckPolicy.ALL is not None
61-
62-
63-
async def test_replay_policy_values() -> None:
64-
assert ReplayPolicy.INSTANT is not None
65-
assert ReplayPolicy.ORIGINAL is not None
66-
67-
6817
async def test_stream_config_defaults() -> None:
6918
config = StreamConfig(name="test", subjects=["test.>"])
7019
assert config.name == "test"

python/tests/test_consumers.py

Lines changed: 48 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -21,50 +21,29 @@ async def js(nats: Nats) -> JetStream:
2121

2222

2323
async def test_pull_consumer_create(js: JetStream) -> None:
24-
stream_name = f"test-pcreate-{uuid.uuid4().hex[:8]}"
24+
stream_name = f"test-pcreate-{uuid.uuid4()}"
2525
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
2626
stream = await js.streams.create(config)
2727
try:
2828
consumer_config = PullConsumerConfig(
29-
name=f"consumer-{uuid.uuid4().hex[:8]}",
29+
name=f"consumer-{uuid.uuid4()}",
3030
)
3131
consumer = await stream.consumers.create(consumer_config)
3232
assert isinstance(consumer, PullConsumer)
3333
finally:
3434
await js.streams.delete(stream_name)
3535

3636

37-
async def test_pull_consumer_fetch(js: JetStream) -> None:
38-
stream_name = f"test-pfetch-{uuid.uuid4().hex[:8]}"
39-
subj = f"{stream_name}.data"
40-
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
41-
stream = await js.streams.create(config)
42-
try:
43-
await js.publish(subj, b"fetch-msg-1")
44-
await js.publish(subj, b"fetch-msg-2")
45-
46-
consumer_config = PullConsumerConfig(
47-
name=f"consumer-{uuid.uuid4().hex[:8]}",
48-
)
49-
consumer = await stream.consumers.create(consumer_config)
50-
messages = await consumer.fetch(max_messages=2, timeout=5.0)
51-
assert len(messages) == 2
52-
assert messages[0].payload == b"fetch-msg-1"
53-
assert messages[1].payload == b"fetch-msg-2"
54-
finally:
55-
await js.streams.delete(stream_name)
56-
57-
5837
async def test_pull_consumer_fetch_with_ack(js: JetStream) -> None:
59-
stream_name = f"test-pack-{uuid.uuid4().hex[:8]}"
38+
stream_name = f"test-pack-{uuid.uuid4()}"
6039
subj = f"{stream_name}.data"
6140
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
6241
stream = await js.streams.create(config)
6342
try:
6443
await js.publish(subj, b"ack-msg")
6544

6645
consumer_config = PullConsumerConfig(
67-
name=f"consumer-{uuid.uuid4().hex[:8]}",
46+
name=f"consumer-{uuid.uuid4()}",
6847
ack_policy=AckPolicy.EXPLICIT,
6948
)
7049
consumer = await stream.consumers.create(consumer_config)
@@ -76,15 +55,15 @@ async def test_pull_consumer_fetch_with_ack(js: JetStream) -> None:
7655

7756

7857
async def test_pull_consumer_nack(js: JetStream) -> None:
79-
stream_name = f"test-pnack-{uuid.uuid4().hex[:8]}"
58+
stream_name = f"test-pnack-{uuid.uuid4()}"
8059
subj = f"{stream_name}.data"
8160
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
8261
stream = await js.streams.create(config)
8362
try:
8463
await js.publish(subj, b"nack-msg")
8564

8665
consumer_config = PullConsumerConfig(
87-
name=f"consumer-{uuid.uuid4().hex[:8]}",
66+
name=f"consumer-{uuid.uuid4()}",
8867
ack_policy=AckPolicy.EXPLICIT,
8968
)
9069
consumer = await stream.consumers.create(consumer_config)
@@ -96,15 +75,15 @@ async def test_pull_consumer_nack(js: JetStream) -> None:
9675

9776

9877
async def test_pull_consumer_term(js: JetStream) -> None:
99-
stream_name = f"test-pterm-{uuid.uuid4().hex[:8]}"
78+
stream_name = f"test-pterm-{uuid.uuid4()}"
10079
subj = f"{stream_name}.data"
10180
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
10281
stream = await js.streams.create(config)
10382
try:
10483
await js.publish(subj, b"term-msg")
10584

10685
consumer_config = PullConsumerConfig(
107-
name=f"consumer-{uuid.uuid4().hex[:8]}",
86+
name=f"consumer-{uuid.uuid4()}",
10887
ack_policy=AckPolicy.EXPLICIT,
10988
)
11089
consumer = await stream.consumers.create(consumer_config)
@@ -116,15 +95,15 @@ async def test_pull_consumer_term(js: JetStream) -> None:
11695

11796

11897
async def test_pull_consumer_progress(js: JetStream) -> None:
119-
stream_name = f"test-pprog-{uuid.uuid4().hex[:8]}"
98+
stream_name = f"test-pprog-{uuid.uuid4()}"
12099
subj = f"{stream_name}.data"
121100
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
122101
stream = await js.streams.create(config)
123102
try:
124103
await js.publish(subj, b"progress-msg")
125104

126105
consumer_config = PullConsumerConfig(
127-
name=f"consumer-{uuid.uuid4().hex[:8]}",
106+
name=f"consumer-{uuid.uuid4()}",
128107
ack_policy=AckPolicy.EXPLICIT,
129108
)
130109
consumer = await stream.consumers.create(consumer_config)
@@ -137,14 +116,14 @@ async def test_pull_consumer_progress(js: JetStream) -> None:
137116

138117

139118
async def test_pull_consumer_message_properties(js: JetStream) -> None:
140-
stream_name = f"test-pmsgprop-{uuid.uuid4().hex[:8]}"
119+
stream_name = f"test-pmsgprop-{uuid.uuid4()}"
141120
subj = f"{stream_name}.data"
142121
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
143122
stream = await js.streams.create(config)
144123
try:
145124
await js.publish(subj, b"prop-msg")
146125

147-
consumer_name = f"consumer-{uuid.uuid4().hex[:8]}"
126+
consumer_name = f"consumer-{uuid.uuid4()}"
148127
consumer_config = PullConsumerConfig(name=consumer_name)
149128
consumer = await stream.consumers.create(consumer_config)
150129
messages = await consumer.fetch(max_messages=1, timeout=5.0)
@@ -166,15 +145,15 @@ async def test_pull_consumer_message_properties(js: JetStream) -> None:
166145

167146

168147
async def test_pull_consumer_with_filter_subject(js: JetStream) -> None:
169-
stream_name = f"test-pfilter-{uuid.uuid4().hex[:8]}"
148+
stream_name = f"test-pfilter-{uuid.uuid4()}"
170149
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
171150
stream = await js.streams.create(config)
172151
try:
173152
await js.publish(f"{stream_name}.a", b"msg-a")
174153
await js.publish(f"{stream_name}.b", b"msg-b")
175154

176155
consumer_config = PullConsumerConfig(
177-
name=f"consumer-{uuid.uuid4().hex[:8]}",
156+
name=f"consumer-{uuid.uuid4()}",
178157
filter_subject=f"{stream_name}.a",
179158
)
180159
consumer = await stream.consumers.create(consumer_config)
@@ -187,7 +166,7 @@ async def test_pull_consumer_with_filter_subject(js: JetStream) -> None:
187166

188167

189168
async def test_pull_consumer_deliver_policy(js: JetStream) -> None:
190-
stream_name = f"test-pdeliver-{uuid.uuid4().hex[:8]}"
169+
stream_name = f"test-pdeliver-{uuid.uuid4()}"
191170
subj = f"{stream_name}.data"
192171
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
193172
stream = await js.streams.create(config)
@@ -196,7 +175,7 @@ async def test_pull_consumer_deliver_policy(js: JetStream) -> None:
196175
await js.publish(subj, b"new-msg")
197176

198177
consumer_config = PullConsumerConfig(
199-
name=f"consumer-{uuid.uuid4().hex[:8]}",
178+
name=f"consumer-{uuid.uuid4()}",
200179
deliver_policy=DeliverPolicy.LAST,
201180
)
202181
consumer = await stream.consumers.create(consumer_config)
@@ -208,12 +187,12 @@ async def test_pull_consumer_deliver_policy(js: JetStream) -> None:
208187

209188

210189
async def test_pull_consumer_replay_policy(js: JetStream) -> None:
211-
stream_name = f"test-preplay-{uuid.uuid4().hex[:8]}"
190+
stream_name = f"test-preplay-{uuid.uuid4()}"
212191
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
213192
stream = await js.streams.create(config)
214193
try:
215194
consumer_config = PullConsumerConfig(
216-
name=f"consumer-{uuid.uuid4().hex[:8]}",
195+
name=f"consumer-{uuid.uuid4()}",
217196
replay_policy=ReplayPolicy.INSTANT,
218197
)
219198
consumer = await stream.consumers.create(consumer_config)
@@ -223,12 +202,11 @@ async def test_pull_consumer_replay_policy(js: JetStream) -> None:
223202

224203

225204
async def test_pull_consumer_durable(js: JetStream) -> None:
226-
stream_name = f"test-pdurable-{uuid.uuid4().hex[:8]}"
227-
subj = f"{stream_name}.data"
205+
stream_name = f"test-pdurable-{uuid.uuid4()}"
228206
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
229207
stream = await js.streams.create(config)
230208
try:
231-
durable_name = f"durable-{uuid.uuid4().hex[:8]}"
209+
durable_name = f"durable-{uuid.uuid4()}"
232210
consumer_config = PullConsumerConfig(
233211
durable_name=durable_name,
234212
)
@@ -242,41 +220,59 @@ async def test_pull_consumer_durable(js: JetStream) -> None:
242220

243221

244222
async def test_push_consumer_create(js: JetStream) -> None:
245-
stream_name = f"test-pushcreate-{uuid.uuid4().hex[:8]}"
223+
stream_name = f"test-pushcreate-{uuid.uuid4()}"
246224
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
247225
stream = await js.streams.create(config)
248226
try:
249227
deliver_subj = uuid.uuid4().hex
250228
consumer_config = PushConsumerConfig(
251229
deliver_subject=deliver_subj,
252-
name=f"consumer-{uuid.uuid4().hex[:8]}",
230+
name=f"consumer-{uuid.uuid4()}",
253231
)
254232
consumer = await stream.consumers.create(consumer_config)
255233
assert isinstance(consumer, PushConsumer)
256234
finally:
257235
await js.streams.delete(stream_name)
258236

259237

238+
async def test_pull_consumer_messages(js: JetStream) -> None:
239+
stream_name = f"test-pushmsg-{uuid.uuid4()}"
240+
subj = f"{stream_name}.data"
241+
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
242+
messages = [uuid.uuid4().hex.encode(), uuid.uuid4().hex.encode()]
243+
stream = await js.streams.create(config)
244+
try:
245+
for message in messages:
246+
await js.publish(subj, message)
247+
consumer_config = PullConsumerConfig(name=f"consumer-{uuid.uuid4()}")
248+
consumer = await stream.consumers.create(consumer_config)
249+
msgs_iter = await consumer.fetch(timeout=0.5)
250+
for nats_msg, payload in zip(msgs_iter, messages, strict=True):
251+
assert nats_msg.payload == payload
252+
finally:
253+
await js.streams.delete(stream_name)
254+
255+
260256
async def test_push_consumer_messages(js: JetStream) -> None:
261-
stream_name = f"test-pushmsg-{uuid.uuid4().hex[:8]}"
257+
stream_name = f"test-pushmsg-{uuid.uuid4()}"
262258
subj = f"{stream_name}.data"
263259
config = StreamConfig(name=stream_name, subjects=[f"{stream_name}.>"])
260+
messages = [uuid.uuid4().hex.encode(), uuid.uuid4().hex.encode()]
264261
stream = await js.streams.create(config)
265262
try:
266-
await js.publish(subj, b"push-msg-1")
267-
await js.publish(subj, b"push-msg-2")
263+
for message in messages:
264+
await js.publish(subj, message)
268265

269266
deliver_subj = uuid.uuid4().hex
270267
consumer_config = PushConsumerConfig(
271268
deliver_subject=deliver_subj,
272-
name=f"consumer-{uuid.uuid4().hex[:8]}",
269+
name=f"consumer-{uuid.uuid4()}",
273270
)
274271
consumer = await stream.consumers.create(consumer_config)
275272
msgs_iter = await consumer.messages()
276-
msg1 = await msgs_iter.next(timeout=5.0)
277-
msg2 = await msgs_iter.next(timeout=5.0)
278-
assert msg1.payload == b"push-msg-1"
279-
assert msg2.payload == b"push-msg-2"
273+
for message in messages:
274+
nats_msg = await msgs_iter.next(timeout=0.5)
275+
assert message == nats_msg.payload
280276
finally:
281277
await js.streams.delete(stream_name)
282278

python/tests/test_kv.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
from natsrpy import Nats
55
from natsrpy.js import (
66
JetStream,
7-
KVConfig,
87
KeyValue,
8+
KVConfig,
99
StorageType,
1010
)
1111

python/tests/test_request_reply.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ async def responder() -> None:
6767
task = asyncio.create_task(responder())
6868
await asyncio.sleep(0.1)
6969

70-
await nats.request(subj, None)
70+
await nats.request(subj, b"")
7171
await task
7272

7373
assert received_payload[0] == b""

python/tests/test_streams.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import pytest
44
from natsrpy import Nats
55
from natsrpy.js import (
6-
Compression,
76
DiscardPolicy,
87
JetStream,
98
RetentionPolicy,

0 commit comments

Comments
 (0)