kurrentdbclient 1.2.1__tar.gz → 1.2.2__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 (64) hide show
  1. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/PKG-INFO +1 -1
  2. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/__init__.py +1 -1
  3. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/opentelemetry/__init__.py +15 -0
  4. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/opentelemetry/spanners.py +112 -2
  5. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/pyproject.toml +1 -1
  6. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/LICENSE +0 -0
  7. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/README.md +0 -0
  8. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/.DS_Store +0 -0
  9. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/asyncio_client.py +0 -0
  10. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/client.py +0 -0
  11. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/common.py +0 -0
  12. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/connection.py +0 -0
  13. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/connection_spec.py +0 -0
  14. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/events.py +0 -0
  15. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/exceptions.py +0 -0
  16. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/gossip.py +0 -0
  17. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/__init__.py +0 -0
  18. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/opentelemetry/attributes.py +0 -0
  19. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/opentelemetry/grpc.py +0 -0
  20. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/opentelemetry/package.py +0 -0
  21. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/opentelemetry/utils.py +0 -0
  22. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/instrumentation/opentelemetry/version.py +0 -0
  23. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/persistent.py +0 -0
  24. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/projections.py +0 -0
  25. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/google/rpc/code_pb2.py +0 -0
  26. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/google/rpc/code_pb2.pyi +0 -0
  27. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/google/rpc/code_pb2_grpc.py +0 -0
  28. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/kurrent/rpc/errors_pb2.py +0 -0
  29. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/kurrent/rpc/errors_pb2.pyi +0 -0
  30. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/kurrent/rpc/errors_pb2_grpc.py +0 -0
  31. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/kurrent/rpc/rpc_pb2.py +0 -0
  32. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/kurrent/rpc/rpc_pb2.pyi +0 -0
  33. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/kurrent/rpc/rpc_pb2_grpc.py +0 -0
  34. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/cluster_pb2.py +0 -0
  35. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/cluster_pb2.pyi +0 -0
  36. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/cluster_pb2_grpc.py +0 -0
  37. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/gossip_pb2.py +0 -0
  38. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/gossip_pb2.pyi +0 -0
  39. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/gossip_pb2_grpc.py +0 -0
  40. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/persistent_pb2.py +0 -0
  41. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/persistent_pb2.pyi +0 -0
  42. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/persistent_pb2_grpc.py +0 -0
  43. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/projections_pb2.py +0 -0
  44. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/projections_pb2.pyi +0 -0
  45. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/projections_pb2_grpc.py +0 -0
  46. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/shared_pb2.py +0 -0
  47. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/shared_pb2.pyi +0 -0
  48. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/shared_pb2_grpc.py +0 -0
  49. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/status_pb2.py +0 -0
  50. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/status_pb2.pyi +0 -0
  51. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/status_pb2_grpc.py +0 -0
  52. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/streams_pb2.py +0 -0
  53. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/streams_pb2.pyi +0 -0
  54. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v1/streams_pb2_grpc.py +0 -0
  55. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v2/streams/errors_pb2.py +0 -0
  56. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v2/streams/errors_pb2.pyi +0 -0
  57. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v2/streams/errors_pb2_grpc.py +0 -0
  58. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v2/streams/streams_pb2.py +0 -0
  59. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v2/streams/streams_pb2.pyi +0 -0
  60. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/protos/v2/streams/streams_pb2_grpc.py +0 -0
  61. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/py.typed +0 -0
  62. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/streams.py +0 -0
  63. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/unpack_error_status.py +0 -0
  64. {kurrentdbclient-1.2.1 → kurrentdbclient-1.2.2}/kurrentdbclient/v2streams.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kurrentdbclient
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Python gRPC Client for KurrentDB
5
5
  License: BSD-3-Clause
6
6
  License-File: LICENSE
@@ -26,7 +26,7 @@ from kurrentdbclient.streams import (
26
26
  ReadResponse,
27
27
  )
28
28
 
29
- __version__ = "1.2.1"
29
+ __version__ = "1.2.2"
30
30
 
31
31
  __all__ = [
32
32
  "DEFAULT_EXCLUDE_FILTER",
@@ -20,6 +20,7 @@ from kurrentdbclient.instrumentation.opentelemetry.spanners import (
20
20
  span_append_to_stream,
21
21
  span_catchup_subscription,
22
22
  span_get_stream,
23
+ span_multi_append_to_stream,
23
24
  span_persistent_subscription,
24
25
  span_read_stream,
25
26
  )
@@ -68,6 +69,12 @@ class KurrentDBClientInstrumentor(_BaseInstrumentor):
68
69
  spanner_func=span_append_to_stream,
69
70
  tracer=tracer,
70
71
  )
72
+ apply_spanner(
73
+ patched_class=KurrentDBClient,
74
+ spanned_func=KurrentDBClient.multi_append_to_stream,
75
+ spanner_func=span_multi_append_to_stream,
76
+ tracer=tracer,
77
+ )
71
78
  apply_spanner(
72
79
  patched_class=KurrentDBClient,
73
80
  spanned_func=KurrentDBClient.subscribe_to_stream,
@@ -112,6 +119,7 @@ class KurrentDBClientInstrumentor(_BaseInstrumentor):
112
119
 
113
120
  def _uninstrument(self, **kwargs: Any) -> None:
114
121
  unwrap(KurrentDBClient, "append_to_stream")
122
+ unwrap(KurrentDBClient, "multi_append_to_stream")
115
123
  unwrap(KurrentDBClient, "subscribe_to_stream")
116
124
  unwrap(KurrentDBClient, "subscribe_to_all")
117
125
  unwrap(KurrentDBClient, "read_subscription_to_stream")
@@ -136,6 +144,12 @@ class AsyncKurrentDBClientInstrumentor(_BaseInstrumentor):
136
144
  spanner_func=span_append_to_stream,
137
145
  tracer=tracer,
138
146
  )
147
+ apply_spanner(
148
+ patched_class=AsyncKurrentDBClient,
149
+ spanned_func=AsyncKurrentDBClient.multi_append_to_stream,
150
+ spanner_func=span_multi_append_to_stream,
151
+ tracer=tracer,
152
+ )
139
153
  apply_spanner(
140
154
  patched_class=AsyncKurrentDBClient,
141
155
  spanned_func=AsyncKurrentDBClient.subscribe_to_stream,
@@ -176,6 +190,7 @@ class AsyncKurrentDBClientInstrumentor(_BaseInstrumentor):
176
190
 
177
191
  def _uninstrument(self, **kwargs: Any) -> None:
178
192
  unwrap(AsyncKurrentDBClient, "append_to_stream")
193
+ unwrap(AsyncKurrentDBClient, "multi_append_to_stream")
179
194
  unwrap(AsyncKurrentDBClient, "subscribe_to_stream")
180
195
  unwrap(AsyncKurrentDBClient, "subscribe_to_all")
181
196
  unwrap(AsyncKurrentDBClient, "read_subscription_to_stream")
@@ -32,6 +32,7 @@ from kurrentdbclient import (
32
32
  AsyncReadResponse,
33
33
  KurrentDBClient,
34
34
  NewEvent,
35
+ NewEvents,
35
36
  ReadResponse,
36
37
  RecordedEvent,
37
38
  StreamState,
@@ -70,14 +71,17 @@ if TYPE_CHECKING:
70
71
 
71
72
 
72
73
  STREAMS_APPEND = "streams.append"
74
+ STREAMS_MULTI_APPEND = "streams.multi-append"
73
75
  STREAMS_SUBSCRIBE = "streams.subscribe"
74
76
  SPAN_NAMES_BY_CLIENT_METHOD = {
75
77
  KurrentDBClient.append_to_stream.__qualname__: STREAMS_APPEND,
78
+ KurrentDBClient.multi_append_to_stream.__qualname__: STREAMS_MULTI_APPEND,
76
79
  KurrentDBClient.subscribe_to_all.__qualname__: STREAMS_SUBSCRIBE,
77
80
  KurrentDBClient.subscribe_to_stream.__qualname__: STREAMS_SUBSCRIBE,
78
81
  KurrentDBClient.read_subscription_to_all.__qualname__: STREAMS_SUBSCRIBE,
79
82
  KurrentDBClient.read_subscription_to_stream.__qualname__: STREAMS_SUBSCRIBE,
80
83
  AsyncKurrentDBClient.append_to_stream.__qualname__: STREAMS_APPEND,
84
+ AsyncKurrentDBClient.multi_append_to_stream.__qualname__: STREAMS_MULTI_APPEND,
81
85
  AsyncKurrentDBClient.subscribe_to_all.__qualname__: STREAMS_SUBSCRIBE,
82
86
  AsyncKurrentDBClient.subscribe_to_stream.__qualname__: STREAMS_SUBSCRIBE,
83
87
  AsyncKurrentDBClient.read_subscription_to_all.__qualname__: STREAMS_SUBSCRIBE,
@@ -85,11 +89,13 @@ SPAN_NAMES_BY_CLIENT_METHOD = {
85
89
  }
86
90
  SPAN_KINDS_BY_CLIENT_METHOD = {
87
91
  KurrentDBClient.append_to_stream.__qualname__: SpanKind.PRODUCER,
92
+ KurrentDBClient.multi_append_to_stream.__qualname__: SpanKind.PRODUCER,
88
93
  KurrentDBClient.subscribe_to_all.__qualname__: SpanKind.CONSUMER,
89
94
  KurrentDBClient.subscribe_to_stream.__qualname__: SpanKind.CONSUMER,
90
95
  KurrentDBClient.read_subscription_to_all.__qualname__: SpanKind.CONSUMER,
91
96
  KurrentDBClient.read_subscription_to_stream.__qualname__: SpanKind.CONSUMER,
92
97
  AsyncKurrentDBClient.append_to_stream.__qualname__: SpanKind.PRODUCER,
98
+ AsyncKurrentDBClient.multi_append_to_stream.__qualname__: SpanKind.PRODUCER,
93
99
  AsyncKurrentDBClient.subscribe_to_all.__qualname__: SpanKind.CONSUMER,
94
100
  AsyncKurrentDBClient.subscribe_to_stream.__qualname__: SpanKind.CONSUMER,
95
101
  AsyncKurrentDBClient.read_subscription_to_all.__qualname__: SpanKind.CONSUMER,
@@ -346,6 +352,30 @@ class AsyncAppendToStreamMethod(Protocol):
346
352
  pass # pragma: no cover
347
353
 
348
354
 
355
+ class MultiAppendToStreamMethod(Protocol):
356
+ def __call__(
357
+ self,
358
+ /,
359
+ events: NewEvents | Iterable[NewEvents],
360
+ *,
361
+ timeout: float | None = None,
362
+ credentials: grpc.CallCredentials | None = None,
363
+ ) -> int:
364
+ pass # pragma: no cover
365
+
366
+
367
+ class AsyncMultiAppendToStreamMethod(Protocol):
368
+ async def __call__(
369
+ self,
370
+ /,
371
+ events: NewEvents | Iterable[NewEvents],
372
+ *,
373
+ timeout: float | None = None,
374
+ credentials: grpc.CallCredentials | None = None,
375
+ ) -> int:
376
+ pass # pragma: no cover
377
+
378
+
349
379
  @overload
350
380
  def span_append_to_stream(
351
381
  tracer: Tracer,
@@ -401,7 +431,7 @@ def span_append_to_stream(
401
431
  db_operation_name=span_name,
402
432
  stream_name=stream_name,
403
433
  )
404
- events = _set_context_in_events(span.get_span_context(), events)
434
+ events = _set_context_in_new_event_objects(span.get_span_context(), events)
405
435
  yield spanned_func(
406
436
  stream_name,
407
437
  current_version=current_version,
@@ -416,6 +446,67 @@ def span_append_to_stream(
416
446
  _set_span_ok(span)
417
447
 
418
448
 
449
+ @overload
450
+ def span_multi_append_to_stream(
451
+ tracer: Tracer,
452
+ instance: BaseKurrentDBClient,
453
+ spanned_func: AsyncMultiAppendToStreamMethod,
454
+ /,
455
+ events: NewEvents | Iterable[NewEvents],
456
+ *,
457
+ timeout: float | None = None,
458
+ credentials: grpc.CallCredentials | None = None,
459
+ ) -> AsyncSpannerResponse[int]:
460
+ pass # pragma: no cover
461
+
462
+
463
+ @overload
464
+ def span_multi_append_to_stream(
465
+ tracer: Tracer,
466
+ instance: BaseKurrentDBClient,
467
+ spanned_func: MultiAppendToStreamMethod,
468
+ /,
469
+ events: NewEvents | Iterable[NewEvents],
470
+ *,
471
+ timeout: float | None = None,
472
+ credentials: grpc.CallCredentials | None = None,
473
+ ) -> SpannerResponse[int]:
474
+ pass # pragma: no cover
475
+
476
+
477
+ def span_multi_append_to_stream(
478
+ tracer: Tracer,
479
+ instance: BaseKurrentDBClient,
480
+ spanned_func: MultiAppendToStreamMethod | AsyncMultiAppendToStreamMethod,
481
+ /,
482
+ events: NewEvents | Iterable[NewEvents],
483
+ *,
484
+ timeout: float | None = None,
485
+ credentials: grpc.CallCredentials | None = None,
486
+ ) -> OverloadedSpannerResponse[int, int]: # pragma: <25.1 no cover
487
+
488
+ span_name, span_kind = _get_span_name_and_kind(spanned_func)
489
+
490
+ with _start_span(tracer, span_name, span_kind) as span:
491
+ try:
492
+ _enrich_span(
493
+ span=span,
494
+ client=instance,
495
+ db_operation_name=span_name,
496
+ )
497
+ events = _set_context_in_new_events_objects(span.get_span_context(), events)
498
+ yield spanned_func(
499
+ events=events,
500
+ timeout=timeout,
501
+ credentials=credentials,
502
+ )
503
+ except Exception as e:
504
+ _set_span_error(span, e)
505
+ raise
506
+ else:
507
+ _set_span_ok(span)
508
+
509
+
419
510
  class CatchupSubscriptionMethod(Protocol):
420
511
  def __call__(
421
512
  self,
@@ -1035,7 +1126,7 @@ METADATA_TRACE_ID = "$traceId"
1035
1126
  METADATA_SPAN_ID = "$spanId"
1036
1127
 
1037
1128
 
1038
- def _set_context_in_events(
1129
+ def _set_context_in_new_event_objects(
1039
1130
  context: SpanContext, events: NewEvent | Iterable[NewEvent]
1040
1131
  ) -> Sequence[NewEvent]:
1041
1132
  # Kind of propagate OpenTelemetry context in "standard KurrentDB" style.
@@ -1063,6 +1154,25 @@ def _set_context_in_events(
1063
1154
  return reconstructed_events
1064
1155
 
1065
1156
 
1157
+ def _set_context_in_new_events_objects(
1158
+ context: SpanContext, events: NewEvents | Iterable[NewEvents]
1159
+ ) -> Sequence[NewEvents]: # pragma: <25.1 no cover
1160
+ # Kind of propagate OpenTelemetry context in "standard KurrentDB" style.
1161
+ if isinstance(events, NewEvents):
1162
+ events = [events]
1163
+ return [
1164
+ NewEvents(
1165
+ new_events_obj.stream_name,
1166
+ _set_context_in_new_event_objects(
1167
+ context,
1168
+ new_events_obj.events,
1169
+ ),
1170
+ current_version=new_events_obj.current_version,
1171
+ )
1172
+ for new_events_obj in events
1173
+ ]
1174
+
1175
+
1066
1176
  def _extract_context_from_event(
1067
1177
  recorded_event: NewEvent | RecordedEvent,
1068
1178
  ) -> Context | None:
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "kurrentdbclient"
7
- version = "1.2.1"
7
+ version = "1.2.2"
8
8
  description = "Python gRPC Client for KurrentDB"
9
9
  license = { text = "BSD-3-Clause" }
10
10
  readme = "README.md"
File without changes