buz 2.14.3__py3-none-any.whl → 2.15.1__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.
@@ -1,11 +1,15 @@
1
1
  from typing import Optional, Sequence
2
2
 
3
- from buz.event import Event, Subscriber
3
+ from buz.event import Event
4
+ from buz.event.meta_subscriber import MetaSubscriber
4
5
 
5
6
 
6
7
  class SubscribersNotFoundException(Exception):
7
8
  def __init__(
8
- self, event: Event, allowed_subscriber_fqns: set[str], event_subscribers: Optional[Sequence[Subscriber]] = None
9
+ self,
10
+ event: Event,
11
+ allowed_subscriber_fqns: set[str],
12
+ event_subscribers: Optional[Sequence[MetaSubscriber]] = None,
9
13
  ) -> None:
10
14
  self.event = event
11
15
  self.allowed_subscriber_fqns = allowed_subscriber_fqns
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  from logging import Logger
2
3
  from typing import Optional, Callable, cast
3
4
 
@@ -5,11 +6,14 @@ from kombu import Connection, Queue, Consumer as MessageConsumer, Message
5
6
  from kombu.mixins import ConsumerMixin
6
7
  from kombu.transport.pyamqp import Channel
7
8
 
8
- from buz.event import Event, Subscriber
9
+ from buz.event import Event
10
+ from buz.event.async_subscriber import AsyncSubscriber
9
11
  from buz.event.infrastructure.kombu.allowed_kombu_serializer import AllowedKombuSerializer
10
12
  from buz.event.exceptions.term_signal_interruption_exception import TermSignalInterruptionException
13
+ from buz.event.meta_subscriber import MetaSubscriber
11
14
  from buz.event.middleware import ConsumeMiddleware, ConsumeMiddlewareChainResolver
12
15
  from buz.event.middleware.exceptions.event_already_in_progress_exception import EventAlreadyInProgressException
16
+ from buz.event.subscriber import Subscriber
13
17
  from buz.locator import Locator
14
18
  from buz.event.consumer import Consumer
15
19
  from buz.event.exceptions.event_restore_exception import EventRestoreException
@@ -27,7 +31,7 @@ class KombuConsumer(ConsumerMixin, Consumer):
27
31
  queues_mapping: QueueToSubscriberFqnMapping,
28
32
  serializer: AllowedKombuSerializer,
29
33
  prefetch_count: int,
30
- locator: Locator[Event, Subscriber],
34
+ locator: Locator[Event, MetaSubscriber],
31
35
  logger: Logger,
32
36
  consume_retrier: Optional[ConsumeRetrier] = None,
33
37
  reject_callback: Optional[RejectCallback] = None,
@@ -83,7 +87,7 @@ class KombuConsumer(ConsumerMixin, Consumer):
83
87
  except Exception as exc:
84
88
  raise EventRestoreException(body, str(message)) from exc
85
89
 
86
- def __subscribers(self, event: Event, allowed_subscriber_fqns: set[str]) -> list[Subscriber]:
90
+ def __subscribers(self, event: Event, allowed_subscriber_fqns: set[str]) -> list[MetaSubscriber]:
87
91
  event_subscribers = None
88
92
  try:
89
93
  event_subscribers = self.__locator.get(event)
@@ -97,22 +101,41 @@ class KombuConsumer(ConsumerMixin, Consumer):
97
101
  except Exception as exc:
98
102
  raise SubscribersNotFoundException(event, allowed_subscriber_fqns, event_subscribers) from exc
99
103
 
100
- def __consume_event(self, message: Message, event: Event, subscribers: list[Subscriber]) -> None:
104
+ def __consume_event(self, message: Message, event: Event, meta_subscribers: list[MetaSubscriber]) -> None:
101
105
  try:
102
106
  if self.should_stop is True:
103
107
  raise TermSignalInterruptionException()
104
108
 
105
- for subscriber in subscribers:
109
+ for meta_subscriber in meta_subscribers:
110
+ # The problem here is that the chain resolver works with syncsubscribers, an asyncsubscriber would require of a async function,
111
+ # but we are using run-until-complete to run the async function, so we are not really using the async function, we are just running it as a sync function, so we can cast the asyncsubscriber to a subscriber
112
+ subscriber = cast(Subscriber, meta_subscriber)
106
113
  self.__consume_middleware_chain_resolver.resolve(event, subscriber, self.__perform_consume)
107
114
  message.ack()
108
115
  except Exception as exc:
109
- self.__on_consume_exception(message, event, subscribers, exc)
116
+ self.__on_consume_exception(message, event, meta_subscribers, exc)
110
117
 
111
- def __perform_consume(self, event: Event, subscriber: Subscriber) -> None:
112
- subscriber.consume(event)
118
+ def __perform_consume(self, event: Event, subscriber: MetaSubscriber) -> None:
119
+ if isinstance(subscriber, AsyncSubscriber):
120
+ self.__get_or_create_event_loop().run_until_complete(subscriber.consume(event))
121
+ return
122
+
123
+ if isinstance(subscriber, Subscriber):
124
+ return subscriber.consume(event)
125
+
126
+ raise TypeError(f"Subscriber {subscriber} is not an instance of Subscriber or AsyncSubscriber")
127
+
128
+ def __get_or_create_event_loop(self) -> asyncio.AbstractEventLoop:
129
+ try:
130
+ return asyncio.get_event_loop()
131
+ except RuntimeError:
132
+ self.__logger.warning("The current thread does not have an event loop attached. Creating new event loop.")
133
+ event_loop = asyncio.new_event_loop()
134
+ asyncio.set_event_loop(event_loop)
135
+ return event_loop
113
136
 
114
137
  def __on_consume_exception(
115
- self, message: Message, event: Event, subscribers: list[Subscriber], exception: Exception
138
+ self, message: Message, event: Event, subscribers: list[MetaSubscriber], exception: Exception
116
139
  ) -> None:
117
140
  if isinstance(exception, EventAlreadyInProgressException) or isinstance(
118
141
  exception, TermSignalInterruptionException
@@ -139,7 +162,7 @@ class KombuConsumer(ConsumerMixin, Consumer):
139
162
  self.__reject_message(message, event, subscribers, exception)
140
163
 
141
164
  def __reject_message(
142
- self, message: Message, event: Event, subscribers: list[Subscriber], exception: Exception
165
+ self, message: Message, event: Event, subscribers: list[MetaSubscriber], exception: Exception
143
166
  ) -> None:
144
167
  message.reject()
145
168
  if self.__reject_callback is not None:
@@ -1,3 +1,4 @@
1
+ from buz.event.middleware.base_async_consume_middleware import BaseAsyncConsumeMiddleware
1
2
  from buz.event.middleware.publish_middleware import PublishMiddleware, PublishCallable
2
3
  from buz.event.middleware.base_publish_middleware import BasePublishMiddleware
3
4
  from buz.event.middleware.publish_middleware_chain_resolver import PublishMiddlewareChainResolver
@@ -14,4 +15,5 @@ __all__ = [
14
15
  "ConsumeCallable",
15
16
  "BaseConsumeMiddleware",
16
17
  "ConsumeMiddlewareChainResolver",
18
+ "BaseAsyncConsumeMiddleware",
17
19
  ]
@@ -0,0 +1,20 @@
1
+ from abc import abstractmethod
2
+
3
+ from buz.event import Event
4
+ from buz.event.async_subscriber import AsyncSubscriber
5
+ from buz.event.middleware.async_consume_middleware import AsyncConsumeMiddleware, AsyncConsumeCallable
6
+
7
+
8
+ class BaseAsyncConsumeMiddleware(AsyncConsumeMiddleware):
9
+ async def on_consume(self, event: Event, subscriber: AsyncSubscriber, consume: AsyncConsumeCallable) -> None:
10
+ await self._before_on_consume(event, subscriber)
11
+ await consume(event, subscriber)
12
+ await self._after_on_consume(event, subscriber)
13
+
14
+ @abstractmethod
15
+ async def _before_on_consume(self, event: Event, subscriber: AsyncSubscriber) -> None:
16
+ pass
17
+
18
+ @abstractmethod
19
+ async def _after_on_consume(self, event: Event, subscriber: AsyncSubscriber) -> None:
20
+ pass
File without changes
@@ -1,36 +1,19 @@
1
1
  from dataclasses import dataclass
2
+ from typing import Optional
2
3
 
3
-
4
- @dataclass(frozen=True)
5
- class CDCPayload:
6
- DATE_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
7
-
8
- payload: str # json encoded
9
- event_id: str # uuid
10
- created_at: str
11
- event_fqn: str
12
-
13
- def validate(self) -> None:
14
- if not isinstance(self.payload, str):
15
- raise ValueError("The payload value is not a valid value")
16
- if not isinstance(self.event_id, str):
17
- raise ValueError("The event_id value is not a valid value")
18
- if not isinstance(self.created_at, str):
19
- raise ValueError("The created_at value is not a value")
20
- if not isinstance(self.event_fqn, str):
21
- raise ValueError("The event_fqn value is not a valid value")
22
-
23
- def __post_init__(self) -> None:
24
- self.validate()
4
+ from buz.kafka.infrastructure.cdc.cdc_payload import CDCPayload
25
5
 
26
6
 
27
7
  @dataclass(frozen=True)
28
8
  class CDCMessage:
29
9
  payload: CDCPayload
10
+ schema: Optional[dict]
30
11
 
31
12
  def validate(self) -> None:
32
13
  if not isinstance(self.payload, CDCPayload):
33
14
  raise ValueError("The payload value is not a valid value")
15
+ if self.schema is not None and not isinstance(self.schema, dict):
16
+ raise ValueError("The schema value is not a valid value")
34
17
 
35
18
  def __post_init__(self) -> None:
36
19
  self.validate()
@@ -0,0 +1,24 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass(frozen=True)
5
+ class CDCPayload:
6
+ DATE_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
7
+
8
+ payload: str # json encoded
9
+ event_id: str # uuid
10
+ created_at: str
11
+ event_fqn: str
12
+
13
+ def validate(self) -> None:
14
+ if not isinstance(self.payload, str):
15
+ raise ValueError("The payload value is not a valid value")
16
+ if not isinstance(self.event_id, str):
17
+ raise ValueError("The event_id value is not a valid value")
18
+ if not isinstance(self.created_at, str):
19
+ raise ValueError("The created_at value is not a value")
20
+ if not isinstance(self.event_fqn, str):
21
+ raise ValueError("The event_fqn value is not a valid value")
22
+
23
+ def __post_init__(self) -> None:
24
+ self.validate()
@@ -0,0 +1,35 @@
1
+ from buz.message import Message
2
+
3
+
4
+ def generate_cdc_schema(message: Message) -> dict:
5
+ return {
6
+ "type": "struct",
7
+ "fields": [
8
+ {
9
+ "type": "string",
10
+ "optional": False,
11
+ "field": "payload",
12
+ },
13
+ {
14
+ "type": "string",
15
+ "optional": False,
16
+ "name": "io.debezium.data.Uuid",
17
+ "version": 1,
18
+ "field": "event_id",
19
+ },
20
+ {
21
+ "type": "string",
22
+ "optional": False,
23
+ "field": "event_fqn",
24
+ },
25
+ {
26
+ "type": "string",
27
+ "optional": False,
28
+ "name": "io.debezium.time.ZonedTimestamp",
29
+ "version": 1,
30
+ "field": "created_at",
31
+ },
32
+ ],
33
+ "optional": False,
34
+ "name": f"{message.fqn()}.Value",
35
+ }
@@ -7,7 +7,7 @@ import orjson
7
7
  from dacite import from_dict
8
8
 
9
9
  from buz.event import Event
10
- from buz.kafka.infrastructure.cdc.cdc_message import CDCMessage, CDCPayload
10
+ from buz.kafka.infrastructure.cdc.cdc_message import CDCPayload
11
11
  from buz.kafka.infrastructure.deserializers.bytes_to_message_deserializer import BytesToMessageDeserializer
12
12
  from buz.kafka.infrastructure.deserializers.implementations.cdc.not_valid_cdc_message_exception import (
13
13
  NotValidCDCMessageException,
@@ -25,11 +25,11 @@ class CDCRecordBytesToEventDeserializer(BytesToMessageDeserializer[Event], Gener
25
25
  def deserialize(self, data: bytes) -> T:
26
26
  decoded_string = data.decode(self.__STRING_ENCODING)
27
27
  try:
28
- cdc_message = self.__get_outbox_record_as_dict(decoded_string)
28
+ cdc_payload = self.__get_outbox_record_as_dict(decoded_string)
29
29
  return self.__event_class.restore(
30
- id=cdc_message.payload.event_id,
31
- created_at=self.__get_created_at_in_event_format(cdc_message.payload.created_at),
32
- **orjson.loads(cdc_message.payload.payload),
30
+ id=cdc_payload.event_id,
31
+ created_at=self.__get_created_at_in_event_format(cdc_payload.created_at),
32
+ **orjson.loads(cdc_payload.payload),
33
33
  )
34
34
  except Exception as exception:
35
35
  raise NotValidCDCMessageException(decoded_string, exception) from exception
@@ -38,12 +38,12 @@ class CDCRecordBytesToEventDeserializer(BytesToMessageDeserializer[Event], Gener
38
38
  created_at_datetime = datetime.strptime(cdc_payload_created_at, CDCPayload.DATE_TIME_FORMAT)
39
39
  return created_at_datetime.strftime(Event.DATE_TIME_FORMAT)
40
40
 
41
- def __get_outbox_record_as_dict(self, decoded_string: str) -> CDCMessage:
41
+ def __get_outbox_record_as_dict(self, decoded_string: str) -> CDCPayload:
42
42
  decoded_record: dict = orjson.loads(decoded_string)
43
43
 
44
44
  payload = decoded_record.get("payload")
45
+
45
46
  if not isinstance(payload, dict):
46
47
  raise ValueError("The provided payload value is not valid")
47
48
 
48
- cdc_message = CDCMessage(payload=from_dict(CDCPayload, payload))
49
- return cdc_message
49
+ return from_dict(CDCPayload, payload)
@@ -5,6 +5,7 @@ from datetime import datetime
5
5
 
6
6
  from buz.event import Event
7
7
  from buz.kafka.infrastructure.cdc.cdc_message import CDCMessage, CDCPayload
8
+ from buz.kafka.infrastructure.cdc.cdc_schema import generate_cdc_schema
8
9
  from buz.kafka.infrastructure.serializers.byte_serializer import ByteSerializer
9
10
  from buz.kafka.infrastructure.serializers.implementations.json_byte_serializer import JSONByteSerializer
10
11
 
@@ -20,7 +21,8 @@ class CDCRecordBytesToEventSerializer(ByteSerializer):
20
21
  created_at=self.__adapt_created_to_cdc_format(data.created_at),
21
22
  event_fqn=data.fqn(),
22
23
  payload=self.__serialize_payload(data),
23
- )
24
+ ),
25
+ schema=generate_cdc_schema(data),
24
26
  )
25
27
  return self.__json_serializer.serialize(asdict(cdc_message))
26
28
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buz
3
- Version: 2.14.3
3
+ Version: 2.15.1
4
4
  Summary: Buz is a set of light, simple and extensible implementations of event, command and query buses.
5
5
  License: MIT
6
6
  Author: Luis Pintado Lozano
@@ -41,7 +41,7 @@ buz/event/event_bus.py,sha256=QnvZD_bKsv628TZ58s5uLntLJCA9Ngir_YHOwb4_UaU,289
41
41
  buz/event/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  buz/event/exceptions/event_not_published_exception.py,sha256=gGEiRFGdKIS-VTKg8SN54vSS10WeSkgBhlO2Gpcll_0,215
43
43
  buz/event/exceptions/event_restore_exception.py,sha256=dYHp5i1E-VCUYYhOAVYR-eJfZ3CqPpR9gm1bZ1EFXfE,245
44
- buz/event/exceptions/subscribers_not_found_exception.py,sha256=eD1DGzLB22bEPnxZGZd5U0geTfBooB0LiIosEg5HzTo,690
44
+ buz/event/exceptions/subscribers_not_found_exception.py,sha256=tTaAJaVZXJ-8CwDq_Jru0FYhFDkdprFp3itauv9XJ4k,760
45
45
  buz/event/exceptions/term_signal_interruption_exception.py,sha256=RkRRF0v_K9Hg48bMeCHlyvAsqCpSYTA5Wcdbz3BpjOQ,265
46
46
  buz/event/exceptions/worker_execution_exception.py,sha256=6mgztvXOCG_9VZ_Jptkk72kZtNWQ2CPuQ3TjXEWFE14,123
47
47
  buz/event/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -69,7 +69,7 @@ buz/event/infrastructure/kombu/allowed_kombu_serializer.py,sha256=LQ6futYsInawTC
69
69
  buz/event/infrastructure/kombu/consume_strategy/__init__.py,sha256=6dnAv-bOxoDL31gQD1dErRocdJvkLHTgdqeb4S33eWc,302
70
70
  buz/event/infrastructure/kombu/consume_strategy/consume_strategy.py,sha256=Zsv7QVpZXRLYvlV2nRbSdSwT_FgEELLyzUxdT6DyX8Q,179
71
71
  buz/event/infrastructure/kombu/consume_strategy/queue_per_subscriber_consume_strategy.py,sha256=Vsa1uC7dwS3jJ-dp_lvrE-hVWnN91-ma8oVqdLuXHMo,786
72
- buz/event/infrastructure/kombu/kombu_consumer.py,sha256=7EhNo_YZdXNpoVIuSm7Thk-Kv-wh3LtFP256g-IzljA,6483
72
+ buz/event/infrastructure/kombu/kombu_consumer.py,sha256=cCTlbGM3LomTsNu6YmWvXrA3Gsn8_LkM4USbmQ8uYDk,7842
73
73
  buz/event/infrastructure/kombu/kombu_event_bus.py,sha256=VSLBtamp-YOta4KyqmfXvDurvPiHZSL9QPCozMK3Qyw,4017
74
74
  buz/event/infrastructure/kombu/publish_strategy/__init__.py,sha256=96ssn7ydJwLXYoVyrhfGcwCpXr4_5Sl0DbN6UCoeNc8,315
75
75
  buz/event/infrastructure/kombu/publish_strategy/fanout_exchange_per_event_publish_strategy.py,sha256=Pw85A1oI-cPtzHCQTr0XHQjb7-u9LVmKR3eBIonHsUU,397
@@ -81,11 +81,12 @@ buz/event/infrastructure/models/consuming_task.py,sha256=GJvn6fGTN5ZQJaOuQCX17JP
81
81
  buz/event/infrastructure/queue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  buz/event/meta_base_subscriber.py,sha256=IP2Siol98OmoeCoOISiaCJxgxJG2SCrhmbAN4t01aWg,698
83
83
  buz/event/meta_subscriber.py,sha256=JPhhRqHkDOBWhuqtPmseUtAoYde1OmTBViqVbLBhvME,359
84
- buz/event/middleware/__init__.py,sha256=1_33sdvRejCF4mHuKVkbldeJde6Y2jYtSrB5vMs0Rfo,773
84
+ buz/event/middleware/__init__.py,sha256=vbmskMeXurTSgwXqPsRQBydHhNAYnbEoqFc1pqemI7Y,897
85
85
  buz/event/middleware/async_consume_middleware.py,sha256=314z7ZyhvQIvi90kEO0t-FlnHSyRjArk3RqKOdDE6bM,459
86
86
  buz/event/middleware/async_consume_middleware_chain_resolver.py,sha256=Hw75JAs5pyZVDi7-nD4I1nbUXjwYpHQW9PctafGS4ks,1193
87
87
  buz/event/middleware/async_publish_middleware.py,sha256=JIxbRx7HVf_Q1iEziN_5RKGVJ-Oen_f1c3OL9QLmoxE,358
88
88
  buz/event/middleware/async_publish_middleware_chain_resolver.py,sha256=Hqj8CRZXJD6h9KuJaKl88iToOFN7BijoatoDo66En8w,1016
89
+ buz/event/middleware/base_async_consume_middleware.py,sha256=7yncBDiAJYgAhKvXVqkY0jf-dH4Ug-qwqzd_DQESmjg,795
89
90
  buz/event/middleware/base_consume_middleware.py,sha256=9G1jsr_Wm-avsTfWAndi5_tf4WW6dSLwQ3rN0-jc7AE,651
90
91
  buz/event/middleware/base_publish_middleware.py,sha256=vtM8oA4LZjbZn4omPy-cIAUxQQwL-_Xb4ScU85DwjMU,531
91
92
  buz/event/middleware/consume_middleware.py,sha256=BCcs1LgIc5YZx5nf7nE_bMuiiXxscqBE4LqD-nd4JS0,363
@@ -168,12 +169,15 @@ buz/kafka/infrastructure/aiokafka/rebalance/__init__.py,sha256=47DEQpj8HBSa-_TIm
168
169
  buz/kafka/infrastructure/aiokafka/rebalance/kafka_callback_rebalancer.py,sha256=3l7NkTrCt3rBktVIS73cTmCOvv6eFguoCbGMYIUfCFc,1774
169
170
  buz/kafka/infrastructure/aiokafka/translators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
171
  buz/kafka/infrastructure/aiokafka/translators/consumer_initial_offset_position_translator.py,sha256=WmxkQfoXeTy9mIJtGGhM0eDKeQxhcJczeVAGCbtonVI,617
171
- buz/kafka/infrastructure/cdc/cdc_message.py,sha256=zLWUbQ2-fLsh_fei-sF8oQse2w30z25JnaJGZDq5f0E,1080
172
+ buz/kafka/infrastructure/cdc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
+ buz/kafka/infrastructure/cdc/cdc_message.py,sha256=Cpv2nA19SG3HZGBLH-wIJbuokzTTZKT_HNFm1VwGSk4,585
174
+ buz/kafka/infrastructure/cdc/cdc_payload.py,sha256=tQ_HdiREkORHlDoQQraj-KQj0x5MRuV8vP-C4x3cgHY,793
175
+ buz/kafka/infrastructure/cdc/cdc_schema.py,sha256=JVSj6MSWNh2aaoWp1LL8UNJtjBvKggoBgMtOOT0vkQQ,940
172
176
  buz/kafka/infrastructure/deserializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
177
  buz/kafka/infrastructure/deserializers/byte_deserializer.py,sha256=4fc6t-zvcFx6F5eoyEixH2uN0cM6aB0YRGwowIzz1RA,211
174
178
  buz/kafka/infrastructure/deserializers/bytes_to_message_deserializer.py,sha256=r40yq67DIElPi6ClmElbtR3VGrG2grNwgwuflXWOh20,345
175
179
  buz/kafka/infrastructure/deserializers/implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
- buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py,sha256=JSXHYNdikMnFf0mSEeaWfsxzcYZphTdfR732-RrCQW0,2002
180
+ buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py,sha256=iMTx9zI_QzHcHvCbpfUkq6Hp67O_LXK5iYE1nzt_mqA,1913
177
181
  buz/kafka/infrastructure/deserializers/implementations/cdc/not_valid_cdc_message_exception.py,sha256=hgLLwTcC-C2DuJSOWUhmQsrd1bO9I1469869IqfAPOk,414
178
182
  buz/kafka/infrastructure/deserializers/implementations/json_byte_deserializer.py,sha256=L4b164-KweiQUwyRONhTMIGnAz48UPk0btLqjGOTNdk,373
179
183
  buz/kafka/infrastructure/deserializers/implementations/json_bytes_to_message_deserializer.py,sha256=YwugXkmOudMNtkVfCC4BFe3pFVpbM8rAL9bT88bZMRk,756
@@ -188,7 +192,7 @@ buz/kafka/infrastructure/kafka_python/kafka_python_producer.py,sha256=DkqqLSSXHB
188
192
  buz/kafka/infrastructure/kafka_python/translators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
193
  buz/kafka/infrastructure/kafka_python/translators/consumer_initial_offset_position_translator.py,sha256=hJ48_eyMcnbFL_Y5TOiMbGXrQSryuKk9CvP59MdqNOY,620
190
194
  buz/kafka/infrastructure/serializers/byte_serializer.py,sha256=T83sLdX9V5Oh1mzjRwHi_1DsTFI7KefFj7kmnz7JVy4,207
191
- buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py,sha256=rWIHE91COwrmo61GV9SyIE6CODOPzpYrdaKbMfPCSJc,1482
195
+ buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py,sha256=Cw6kbzCMHC2PwHf6DNCIKZB2H-WCEZ-HeIDNxQbkTow,1601
192
196
  buz/kafka/infrastructure/serializers/implementations/json_byte_serializer.py,sha256=KGkTQE7lq8VB048zCew_IlYgoWPozkmERYKg0t4DjOA,1510
193
197
  buz/kafka/infrastructure/serializers/kafka_header_serializer.py,sha256=ws9xr5lsJF6J-uVIplPym7vboo00KtXHfLJf8JjG0lo,649
194
198
  buz/locator/__init__.py,sha256=my8qfHL5htIT9RFFjzV4zGIPVW72tu4SMQbKKqBeSKo,293
@@ -245,7 +249,7 @@ buz/serializer/message_to_json_bytes_serializer.py,sha256=RGZJ64t4t4Pz2FCASZZCv-
245
249
  buz/wrapper/__init__.py,sha256=GnRdJFcncn-qp0hzDG9dBHLmTJSbHFVjE_yr-MdW_n4,77
246
250
  buz/wrapper/async_to_sync.py,sha256=OfK-vrVUhuN-LLLvekLdMbQYtH0ue5lfbvuasj6ovMI,698
247
251
  buz/wrapper/event_loop.py,sha256=pfBJ1g-8A2a3YgW8Gf9Fg0kkewoh3-wgTy2KIFDyfHk,266
248
- buz-2.14.3.dist-info/LICENSE,sha256=Jytu2S-2SPEgsB0y6BF-_LUxIWY7402fl0JSh36TLZE,1062
249
- buz-2.14.3.dist-info/METADATA,sha256=mIxvjnK8YV9oyOgKXUnEoF_1OfXv1DuzTguIlFX6z_g,1659
250
- buz-2.14.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
251
- buz-2.14.3.dist-info/RECORD,,
252
+ buz-2.15.1.dist-info/LICENSE,sha256=Jytu2S-2SPEgsB0y6BF-_LUxIWY7402fl0JSh36TLZE,1062
253
+ buz-2.15.1.dist-info/METADATA,sha256=l97q8FugUX3QM1sBfMPtE0quiE4aIyEMgHkewN6k0NA,1659
254
+ buz-2.15.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
255
+ buz-2.15.1.dist-info/RECORD,,
File without changes
File without changes