sentry-arroyo 2.20.9__tar.gz → 2.20.10__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.
- {sentry_arroyo-2.20.9/sentry_arroyo.egg-info → sentry_arroyo-2.20.10}/PKG-INFO +1 -1
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/abstract.py +33 -10
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10/sentry_arroyo.egg-info}/PKG-INFO +1 -1
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/setup.py +1 -1
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/backends/test_kafka.py +0 -9
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/LICENSE +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/MANIFEST.in +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/README.md +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/kafka/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/kafka/commit.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/kafka/configuration.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/kafka/consumer.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/local/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/local/backend.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/local/storages/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/local/storages/abstract.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/backends/local/storages/memory.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/commit.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/dlq.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/errors.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/processor.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/abstract.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/batching.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/buffer.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/commit.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/filter.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/guard.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/healthcheck.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/noop.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/produce.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/reduce.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/run_task.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/run_task_in_threads.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/run_task_with_multiprocessing.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/unfold.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/py.typed +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/types.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/clock.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/codecs.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/concurrent.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/logging.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/metricDefs.json +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/metric_defs.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/metrics.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/profiler.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/utils/retries.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/examples/transform_and_produce/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/examples/transform_and_produce/batched.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/examples/transform_and_produce/script.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/examples/transform_and_produce/simple.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/requirements.txt +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/sentry_arroyo.egg-info/SOURCES.txt +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/sentry_arroyo.egg-info/dependency_links.txt +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/sentry_arroyo.egg-info/not-zip-safe +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/sentry_arroyo.egg-info/requires.txt +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/sentry_arroyo.egg-info/top_level.txt +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/setup.cfg +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/backends/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/backends/mixins.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/backends/test_commit.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/backends/test_local.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_all.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_batching.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_buffer.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_commit.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_filter.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_guard.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_noop.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_produce.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_reduce.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_run_task.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_run_task_in_threads.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_run_task_with_multiprocessing.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/strategies/test_unfold.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/processing/test_processor.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/test_commit.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/test_dlq.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/test_kip848_e2e.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/test_types.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/utils/__init__.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/utils/test_concurrent.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/utils/test_metrics.py +0 -0
- {sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/tests/utils/test_retries.py +0 -0
|
@@ -4,7 +4,16 @@ import logging
|
|
|
4
4
|
import time
|
|
5
5
|
from abc import ABC, abstractmethod, abstractproperty
|
|
6
6
|
from concurrent.futures import Future
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import (
|
|
8
|
+
Callable,
|
|
9
|
+
Generic,
|
|
10
|
+
Mapping,
|
|
11
|
+
Optional,
|
|
12
|
+
Protocol,
|
|
13
|
+
Sequence,
|
|
14
|
+
TypeVar,
|
|
15
|
+
Union,
|
|
16
|
+
)
|
|
8
17
|
|
|
9
18
|
from arroyo.types import BrokerValue, Partition, Topic, TStrategyPayload
|
|
10
19
|
|
|
@@ -178,11 +187,32 @@ class Consumer(Generic[TStrategyPayload], ABC):
|
|
|
178
187
|
raise NotImplementedError
|
|
179
188
|
|
|
180
189
|
|
|
190
|
+
class ProducerFuture(Protocol, Generic[T]):
|
|
191
|
+
"""
|
|
192
|
+
An abstract interface for a kind of Future. Stdlib futures are too slow to
|
|
193
|
+
construct, so we use these.
|
|
194
|
+
"""
|
|
195
|
+
|
|
196
|
+
def done(self) -> bool:
|
|
197
|
+
...
|
|
198
|
+
|
|
199
|
+
def result(self, timeout: float | None = None) -> T:
|
|
200
|
+
"""
|
|
201
|
+
Return result or raise exception. May block, but does not have to.
|
|
202
|
+
"""
|
|
203
|
+
...
|
|
204
|
+
|
|
205
|
+
def set_result(self, result: T) -> None:
|
|
206
|
+
...
|
|
207
|
+
|
|
208
|
+
def set_exception(self, exception: Exception) -> None:
|
|
209
|
+
...
|
|
210
|
+
|
|
211
|
+
|
|
181
212
|
class SimpleProducerFuture(Generic[T]):
|
|
182
213
|
"""
|
|
183
214
|
A stub for concurrent.futures.Future that does not construct any Condition
|
|
184
|
-
variables, therefore is faster to construct.
|
|
185
|
-
missing, and result() in particular is not efficient with timeout > 0.
|
|
215
|
+
variables, therefore is faster to construct.
|
|
186
216
|
"""
|
|
187
217
|
|
|
188
218
|
def __init__(self) -> None:
|
|
@@ -202,10 +232,6 @@ class SimpleProducerFuture(Generic[T]):
|
|
|
202
232
|
# only in tests at most. It is only here for the sake of implementing
|
|
203
233
|
# the contract. If you really need result with timeout>0, you should
|
|
204
234
|
# use the stdlib future.
|
|
205
|
-
#
|
|
206
|
-
# If this becomes performance sensitive, we can potentially implement
|
|
207
|
-
# something more sophisticated such as lazily creating the condition
|
|
208
|
-
# variable, and synchronizing the creation of that using a global lock.
|
|
209
235
|
while deadline is None or time.time() < deadline:
|
|
210
236
|
if self.result_exception is not None:
|
|
211
237
|
raise self.result_exception
|
|
@@ -222,9 +248,6 @@ class SimpleProducerFuture(Generic[T]):
|
|
|
222
248
|
self.result_exception = exception
|
|
223
249
|
|
|
224
250
|
|
|
225
|
-
ProducerFuture = Union[SimpleProducerFuture[T], Future[T]]
|
|
226
|
-
|
|
227
|
-
|
|
228
251
|
class Producer(Generic[TStrategyPayload], ABC):
|
|
229
252
|
@abstractmethod
|
|
230
253
|
def produce(
|
|
@@ -167,15 +167,6 @@ class TestKafkaStreams(StreamsTestMixin[KafkaPayload]):
|
|
|
167
167
|
else:
|
|
168
168
|
raise AssertionError("expected EndOfPartition error")
|
|
169
169
|
|
|
170
|
-
@pytest.mark.parametrize("use_simple_futures", [True, False])
|
|
171
|
-
def test_producer_future_behavior(self, use_simple_futures: bool) -> None:
|
|
172
|
-
with self.get_topic() as topic:
|
|
173
|
-
with closing(self.get_producer(use_simple_futures)) as producer:
|
|
174
|
-
future = producer.produce(topic, next(self.get_payloads()))
|
|
175
|
-
assert not future.done()
|
|
176
|
-
assert future.result(5.0)
|
|
177
|
-
assert future.done()
|
|
178
|
-
|
|
179
170
|
def test_lenient_offset_reset_latest(self) -> None:
|
|
180
171
|
payload = KafkaPayload(b"a", b"0", [])
|
|
181
172
|
with self.get_topic() as topic:
|
|
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
|
{sentry_arroyo-2.20.9 → sentry_arroyo-2.20.10}/arroyo/processing/strategies/run_task_in_threads.py
RENAMED
|
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
|