buz 2.16.0__py3-none-any.whl → 2.17.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.
@@ -1,10 +1,13 @@
1
1
  from abc import ABC, abstractmethod
2
+ from typing import Generic, TypeVar
2
3
 
3
- from buz.event import Event
4
+ from buz.event.event import Event
4
5
  from buz.event.meta_subscriber import MetaSubscriber
5
6
 
7
+ TEvent = TypeVar("TEvent", bound=Event)
6
8
 
7
- class AsyncSubscriber(MetaSubscriber, ABC):
9
+
10
+ class AsyncSubscriber(Generic[TEvent], MetaSubscriber[TEvent], ABC):
8
11
  @abstractmethod
9
- async def consume(self, event: Event) -> None:
12
+ async def consume(self, event: TEvent) -> None:
10
13
  pass
@@ -1,8 +1,12 @@
1
1
  from abc import ABC
2
+ from typing import Generic, TypeVar
2
3
 
4
+ from buz.event.event import Event
3
5
  from buz.event.async_subscriber import AsyncSubscriber
4
6
  from buz.event.meta_base_subscriber import MetaBaseSubscriber
5
7
 
8
+ TEvent = TypeVar("TEvent", bound=Event)
6
9
 
7
- class BaseAsyncSubscriber(AsyncSubscriber, MetaBaseSubscriber, ABC):
10
+
11
+ class BaseAsyncSubscriber(Generic[TEvent], AsyncSubscriber[TEvent], MetaBaseSubscriber[TEvent], ABC):
8
12
  pass
@@ -1,7 +1,12 @@
1
1
  from abc import ABC
2
- from buz.event import Subscriber
2
+ from typing import Generic, TypeVar
3
+
4
+ from buz.event.event import Event
5
+ from buz.event.subscriber import Subscriber
3
6
  from buz.event.meta_base_subscriber import MetaBaseSubscriber
4
7
 
8
+ TEvent = TypeVar("TEvent", bound=Event)
9
+
5
10
 
6
- class BaseSubscriber(Subscriber, MetaBaseSubscriber, ABC):
11
+ class BaseSubscriber(Generic[TEvent], Subscriber[TEvent], MetaBaseSubscriber[TEvent], ABC):
7
12
  pass
@@ -1,23 +1,26 @@
1
1
  from abc import ABC
2
- from typing import Type, get_type_hints
2
+ from typing import Generic, Type, TypeVar, cast, get_type_hints
3
3
 
4
- from buz.event import Event
4
+ from buz.event.event import Event
5
5
  from buz.event.meta_subscriber import MetaSubscriber
6
6
 
7
+ TEvent = TypeVar("TEvent", bound=Event)
7
8
 
8
- class MetaBaseSubscriber(MetaSubscriber, ABC):
9
+
10
+ class MetaBaseSubscriber(Generic[TEvent], MetaSubscriber[TEvent], ABC):
9
11
  @classmethod
10
12
  def fqn(cls) -> str:
11
13
  return f"subscriber.{cls.__module__}.{cls.__name__}"
12
14
 
13
15
  @classmethod
14
- def handles(cls) -> Type[Event]:
16
+ def handles(cls) -> Type[TEvent]:
15
17
  consume_types = get_type_hints(cls.consume)
16
18
 
17
- if "event" not in consume_types:
19
+ t_event = consume_types.get("event")
20
+ if t_event is None:
18
21
  raise TypeError("event parameter not found in consume method")
19
22
 
20
- if not issubclass(consume_types["event"], Event):
23
+ if not issubclass(t_event, Event):
21
24
  raise TypeError("event parameter is not an buz.event.Event subclass")
22
25
 
23
- return consume_types["event"]
26
+ return cast(Type[TEvent], t_event)
@@ -1,16 +1,18 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Awaitable, Type, Union
2
+ from typing import Awaitable, Generic, Type, TypeVar, Union
3
3
 
4
4
  from buz import Handler
5
- from buz.event import Event
5
+ from buz.event.event import Event
6
6
 
7
+ TEvent = TypeVar("TEvent", bound=Event)
7
8
 
8
- class MetaSubscriber(Handler, ABC):
9
+
10
+ class MetaSubscriber(Generic[TEvent], Handler[TEvent], ABC):
9
11
  @abstractmethod
10
- def consume(self, event: Event) -> Union[None, Awaitable[None]]:
12
+ def consume(self, event: TEvent) -> Union[None, Awaitable[None]]:
11
13
  pass
12
14
 
13
15
  @classmethod
14
16
  @abstractmethod
15
- def handles(cls) -> Type[Event]:
17
+ def handles(cls) -> Type[TEvent]:
16
18
  pass
buz/event/subscriber.py CHANGED
@@ -1,10 +1,13 @@
1
1
  from abc import ABC, abstractmethod
2
+ from typing import Generic, TypeVar
2
3
 
3
- from buz.event import Event
4
+ from buz.event.event import Event
4
5
  from buz.event.meta_subscriber import MetaSubscriber
5
6
 
7
+ TEvent = TypeVar("TEvent", bound=Event)
6
8
 
7
- class Subscriber(MetaSubscriber, ABC):
9
+
10
+ class Subscriber(Generic[TEvent], MetaSubscriber[TEvent], ABC):
8
11
  @abstractmethod
9
- def consume(self, event: Event) -> None:
12
+ def consume(self, event: TEvent) -> None:
10
13
  pass
@@ -10,9 +10,11 @@ class EventToOutboxRecordTranslator:
10
10
  payload = dataclasses.asdict(event)
11
11
  payload.pop("id")
12
12
  payload.pop("created_at")
13
+ payload.pop("metadata")
13
14
  return OutboxRecord(
14
15
  event_id=UUID(event.id),
15
16
  event_fqn=event.fqn(),
16
17
  created_at=event.parsed_created_at(),
17
18
  event_payload=payload,
19
+ event_metadata=dict(event.metadata),
18
20
  )
@@ -12,6 +12,7 @@ class OutboxRecord: # type: ignore[misc]
12
12
  event_fqn: str
13
13
  event_payload: dict[str, Any] # type: ignore[misc]
14
14
  created_at: datetime
15
+ event_metadata: Optional[dict[str, Any]] = None
15
16
  delivered_at: Optional[datetime] = None
16
17
  delivery_errors: int = 0
17
18
  delivery_paused_at: Optional[datetime] = None
@@ -16,6 +16,7 @@ class OutboxRecordToEventTranslator:
16
16
  event_klass.restore(
17
17
  id=str(outbox_record.event_id),
18
18
  created_at=outbox_record.parsed_created_at(),
19
+ metadata=outbox_record.event_metadata,
19
20
  **outbox_record.event_payload,
20
21
  ),
21
22
  )
@@ -20,7 +20,8 @@ class TransactionalOutboxEventBus(EventBus):
20
20
  self.__outbox_repository = outbox_repository
21
21
  self.__event_to_outbox_record_translator = event_to_outbox_record_translator
22
22
  self.__outbox_record_validator = outbox_record_validator
23
- self.__publish_middleware_chain_resolver = PublishMiddlewareChainResolver(publish_middlewares or [])
23
+ self.__publish_middleware = publish_middlewares
24
+ self.__publish_middleware_chain_resolver = PublishMiddlewareChainResolver(self.__publish_middleware or [])
24
25
 
25
26
  def publish(self, event: Event) -> None:
26
27
  self.__publish_middleware_chain_resolver.resolve(event, self.__perform_publish)
@@ -30,11 +31,12 @@ class TransactionalOutboxEventBus(EventBus):
30
31
  self.__outbox_repository.save(outbox_record)
31
32
 
32
33
  def bulk_publish(self, events: Iterable[Event]) -> None:
34
+ publish_middleware_chain_resolver = PublishMiddlewareChainResolver(self.__publish_middleware or [])
33
35
  outbox_records: list[OutboxRecord] = []
36
+
34
37
  for event in events:
35
- self.__publish_middleware_chain_resolver.resolve(
36
- event, lambda resolved_event: outbox_records.append(self.__process_event(resolved_event))
37
- )
38
+ publish_middleware_chain_resolver.resolve(event, lambda resolved_event: None)
39
+ outbox_records.append(self.__process_event(event))
38
40
 
39
41
  if len(outbox_records) == 0:
40
42
  return None
@@ -1,4 +1,5 @@
1
1
  from dataclasses import dataclass
2
+ from typing import Optional
2
3
 
3
4
 
4
5
  @dataclass(frozen=True)
@@ -9,6 +10,7 @@ class CDCPayload:
9
10
  event_id: str # uuid
10
11
  created_at: str
11
12
  event_fqn: str
13
+ metadata: Optional[str] = None # json encoded
12
14
 
13
15
  def validate(self) -> None:
14
16
  if not isinstance(self.payload, str):
@@ -19,6 +21,8 @@ class CDCPayload:
19
21
  raise ValueError("The created_at value is not a value")
20
22
  if not isinstance(self.event_fqn, str):
21
23
  raise ValueError("The event_fqn value is not a valid value")
24
+ if self.metadata is not None and not isinstance(self.metadata, str):
25
+ raise ValueError("The metadata value is not a valid value")
22
26
 
23
27
  def __post_init__(self) -> None:
24
28
  self.validate()
@@ -22,6 +22,13 @@ def generate_cdc_schema(message: Message) -> dict:
22
22
  "optional": False,
23
23
  "field": "event_fqn",
24
24
  },
25
+ {
26
+ "type": "string",
27
+ "optional": True,
28
+ "name": "io.debezium.data.Json",
29
+ "version": 1,
30
+ "field": "metadata",
31
+ },
25
32
  {
26
33
  "type": "string",
27
34
  "optional": False,
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from datetime import datetime
4
- from typing import TypeVar, Type, Generic
4
+ from typing import Optional, TypeVar, Type, Generic
5
5
 
6
6
  import orjson
7
7
  from dacite import from_dict
@@ -29,6 +29,7 @@ class CDCRecordBytesToEventDeserializer(BytesToMessageDeserializer[Event], Gener
29
29
  return self.__event_class.restore(
30
30
  id=cdc_payload.event_id,
31
31
  created_at=self.__get_created_at_in_event_format(cdc_payload.created_at),
32
+ metadata=self.__deserialize_metadata(cdc_payload.metadata),
32
33
  **orjson.loads(cdc_payload.payload),
33
34
  )
34
35
  except Exception as exception:
@@ -47,3 +48,8 @@ class CDCRecordBytesToEventDeserializer(BytesToMessageDeserializer[Event], Gener
47
48
  raise ValueError("The provided payload value is not valid")
48
49
 
49
50
  return from_dict(CDCPayload, payload)
51
+
52
+ def __deserialize_metadata(self, metadata: Optional[str]) -> dict:
53
+ if metadata is None:
54
+ return {}
55
+ return orjson.loads(metadata)
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import asdict
4
4
  from datetime import datetime
5
+ from typing import Optional
5
6
 
6
7
  from buz.event import Event
7
8
  from buz.kafka.infrastructure.cdc.cdc_message import CDCMessage, CDCPayload
@@ -21,6 +22,7 @@ class CDCRecordBytesToEventSerializer(ByteSerializer):
21
22
  created_at=self.__adapt_created_to_cdc_format(data.created_at),
22
23
  event_fqn=data.fqn(),
23
24
  payload=self.__serialize_payload(data),
25
+ metadata=self.__serialize_metadata(data),
24
26
  ),
25
27
  schema=generate_cdc_schema(data),
26
28
  )
@@ -31,8 +33,11 @@ class CDCRecordBytesToEventSerializer(ByteSerializer):
31
33
  return created_at_datetime.strftime(CDCPayload.DATE_TIME_FORMAT)
32
34
 
33
35
  def __serialize_payload(self, event: Event) -> str:
34
- # Remove id and created at, because Transactional outbox is not adding them
35
36
  payload = asdict(event)
36
37
  del payload["id"]
37
38
  del payload["created_at"]
39
+ del payload["metadata"]
38
40
  return self.__json_serializer.serialize_as_json(payload)
41
+
42
+ def __serialize_metadata(self, event: Event) -> Optional[str]:
43
+ return self.__json_serializer.serialize_as_json(event.metadata) # type: ignore[arg-type]
@@ -15,7 +15,9 @@ ALLOWED_SERIALIZABLE_DICTIONARY_KEYS = str
15
15
 
16
16
  JSON_SERIALIZABLE_VALUE = Union[PRIMITIVES, list[PRIMITIVES], dict[ALLOWED_SERIALIZABLE_DICTIONARY_KEYS, PRIMITIVES]]
17
17
 
18
- JSON_SERIALIZABLE = dict[ALLOWED_SERIALIZABLE_DICTIONARY_KEYS, Union[JSON_SERIALIZABLE_VALUE, "JSON_SERIALIZABLE"]]
18
+ JSON_SERIALIZABLE = Union[
19
+ dict[ALLOWED_SERIALIZABLE_DICTIONARY_KEYS, Union[JSON_SERIALIZABLE_VALUE, "JSON_SERIALIZABLE"]]
20
+ ]
19
21
 
20
22
 
21
23
  class JSONByteSerializer(ByteSerializer[JSON_SERIALIZABLE]):
buz/message.py CHANGED
@@ -8,6 +8,8 @@ from typing_extensions import Self
8
8
 
9
9
  from uuid_utils.compat import uuid7
10
10
 
11
+ from buz.metadata import Metadata
12
+
11
13
 
12
14
  @dataclass(frozen=True)
13
15
  class Message(ABC):
@@ -17,6 +19,7 @@ class Message(ABC):
17
19
  created_at: str = field(
18
20
  init=False, default_factory=lambda: datetime.strftime(datetime.now(), Message.DATE_TIME_FORMAT)
19
21
  )
22
+ metadata: Metadata = field(init=False, default_factory=lambda: Metadata())
20
23
 
21
24
  @classmethod
22
25
  def fqn(cls) -> str:
@@ -26,11 +29,14 @@ class Message(ABC):
26
29
  def restore(cls, **kwargs: Any) -> Self:
27
30
  message_id = kwargs.pop("id")
28
31
  created_at = kwargs.pop("created_at")
32
+ metadata_kwargs = kwargs.pop("metadata", None) or {}
33
+ metadata = Metadata(**metadata_kwargs)
29
34
 
30
35
  instance = cls.__from_dict(kwargs) # type: ignore
31
36
 
32
37
  object.__setattr__(instance, "id", message_id)
33
38
  object.__setattr__(instance, "created_at", created_at)
39
+ object.__setattr__(instance, "metadata", metadata)
34
40
  return instance
35
41
 
36
42
  @classmethod
@@ -61,3 +67,6 @@ class Message(ABC):
61
67
 
62
68
  def parsed_created_at(self) -> datetime:
63
69
  return datetime.strptime(self.created_at, self.DATE_TIME_FORMAT)
70
+
71
+ def add_metadata(self, metadata: Metadata) -> None:
72
+ self.metadata.update(metadata)
buz/metadata.py ADDED
@@ -0,0 +1,8 @@
1
+ from typing import Any, TypedDict
2
+
3
+
4
+ class Metadata(TypedDict):
5
+ def __init__(self, **kwargs: dict[str, Any]) -> None: # type: ignore[misc]
6
+ super().__init__()
7
+ for key, value in kwargs.items():
8
+ setattr(self, key, value)
@@ -1,20 +1,19 @@
1
- from abc import abstractmethod
1
+ from abc import ABC, abstractmethod
2
2
  from typing import Generic, Type, TypeVar
3
3
 
4
4
  from buz import Handler
5
5
  from buz.query import Query, QueryResponse
6
6
 
7
-
8
7
  TQuery = TypeVar("TQuery", bound=Query)
9
8
  TQueryResponse = TypeVar("TQueryResponse", bound=QueryResponse)
10
9
 
11
10
 
12
- class QueryHandler(Generic[TQuery, TQueryResponse], Handler[TQuery]):
11
+ class QueryHandler(Generic[TQuery, TQueryResponse], Handler[TQuery], ABC):
13
12
  @classmethod
14
13
  @abstractmethod
15
14
  def handles(cls) -> Type[TQuery]:
16
15
  pass
17
16
 
18
17
  @abstractmethod
19
- async def handle(self, query: Query) -> TQueryResponse:
18
+ async def handle(self, query: TQuery) -> TQueryResponse:
20
19
  pass
@@ -1,22 +1,20 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buz
3
- Version: 2.16.0
3
+ Version: 2.17.0
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
7
7
  Author-email: luis.pintado.lozano@gmail.com
8
8
  Maintainer: Fever - Platform Squad
9
9
  Maintainer-email: platform@feverup.com
10
- Requires-Python: >=3.9
10
+ Requires-Python: >=3.10
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Operating System :: OS Independent
14
14
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
- Classifier: Programming Language :: Python :: 3.8
20
18
  Classifier: Topic :: Software Development :: Libraries
21
19
  Classifier: Typing :: Typed
22
20
  Provides-Extra: aiokafka
@@ -27,10 +27,10 @@ buz/command/synchronous/synced_async/synced_async_command_bus.py,sha256=8tvD1zR8
27
27
  buz/event/__init__.py,sha256=ey3c3fY85XpcWFlmIlbpanJfxv1BZI42Ia1njAtjcEs,588
28
28
  buz/event/async_consumer.py,sha256=k6v_WqQ8A8vWJzO_sMcjU75mroA_Il9D-rE-E-pu_lM,200
29
29
  buz/event/async_event_bus.py,sha256=l627YtPplBprVO0Ccepgt4hkwtMJyI8uaqx6TzCQ9Lw,430
30
- buz/event/async_subscriber.py,sha256=GNenWsj1CZj1F1nJV0KQ_7L1elYToyT9K8sY7O4Gayk,248
30
+ buz/event/async_subscriber.py,sha256=FNW5qtPlImcw2i7Ic1VcSpeai0RyPFAx4yRUn_NmpwQ,357
31
31
  buz/event/async_worker.py,sha256=OR7g6cYWOWTh9DbfAfWwS6U6bZ1CDzScJHfH52PYj_k,881
32
- buz/event/base_async_subscriber.py,sha256=QCVSD36lR_FuX_B4R32nOZrGmq_Y24otb_GCrH_fL8k,218
33
- buz/event/base_subscriber.py,sha256=nQ3fXdpFmU0S0Vpg-0ozH6_IG5zFe1B-Lsn4CNdfsds,185
32
+ buz/event/base_async_subscriber.py,sha256=66qxsFgBSSc4-dG0YsjkvYFFKOOIDA9nP8NuZ7kN2tw,362
33
+ buz/event/base_subscriber.py,sha256=78gCjxcCBpPTvnr9NJOERz4YwGGMaBDC2YElwKDlrAk,341
34
34
  buz/event/consumer.py,sha256=Rf3ZtodM_637ifk5Y2CmEVQ7caYhBgXQ9gm7D57raP0,181
35
35
  buz/event/dead_letter_queue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  buz/event/dead_letter_queue/dlq_criteria.py,sha256=hxcV-BMayKTEc5suEfQZhEYkc14H7kZo_4YfDzcJTTY,290
@@ -85,8 +85,8 @@ buz/event/infrastructure/models/consuming_task.py,sha256=GJvn6fGTN5ZQJaOuQCX17JP
85
85
  buz/event/infrastructure/models/delivery_context.py,sha256=D6_wppbYEkfoBgDaPeUaQPWFUMvZiHn-4QaAxDmWUZo,92
86
86
  buz/event/infrastructure/models/execution_context.py,sha256=tohrJMSHWA5U7WByGE47LSjteAN8_IMyHoXtjyrHJMM,200
87
87
  buz/event/infrastructure/queue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
- buz/event/meta_base_subscriber.py,sha256=IP2Siol98OmoeCoOISiaCJxgxJG2SCrhmbAN4t01aWg,698
89
- buz/event/meta_subscriber.py,sha256=JPhhRqHkDOBWhuqtPmseUtAoYde1OmTBViqVbLBhvME,359
88
+ buz/event/meta_base_subscriber.py,sha256=cqB-iDtN4iuAVBZs2UwrrrAVB2t-u1VvzZw1aSClkwg,817
89
+ buz/event/meta_subscriber.py,sha256=yH2_2OGqionoC86a3xc4K9kewiuNJs5UtiXdRAMViNM,451
90
90
  buz/event/middleware/__init__.py,sha256=vbmskMeXurTSgwXqPsRQBydHhNAYnbEoqFc1pqemI7Y,897
91
91
  buz/event/middleware/async_consume_middleware.py,sha256=n_EsDMNFgOIu7UVPGRC0iaxCIfGL-p_3xo5Avq43zYA,640
92
92
  buz/event/middleware/async_consume_middleware_chain_resolver.py,sha256=dIiyob5TYavjcD5QL31_Yqya9x3ujWtL7cUZK4bEVvk,1459
@@ -115,24 +115,24 @@ buz/event/strategies/retry/consumed_event_retry_repository.py,sha256=Udls0pJEEXu
115
115
  buz/event/strategies/retry/max_retries_consume_retrier.py,sha256=hY-DrAI8MRZKDUHraY2nSsQHcUo50jzLwBZrmvN3L5I,1743
116
116
  buz/event/strategies/retry/max_retries_negative_exception.py,sha256=UdM5T4cxRv_at9GmNZXaE7Lcf6zX6jd7uaUAkBD9qvU,230
117
117
  buz/event/strategies/retry/reject_callback.py,sha256=TnmUt0AkB2DEQMieec9TtB7IAkRHdFAFepAclbiCRns,316
118
- buz/event/subscriber.py,sha256=WxppO8PFP5zO-gwLZNg1DKSY_uFdsF8JgWIJa6nTTds,237
118
+ buz/event/subscriber.py,sha256=gY43QIaNCXm8vcNbtkgWJs_I8F7oMkGaC3HiawHPi70,346
119
119
  buz/event/sync/__init__.py,sha256=uJmU80PGVNNL2HoRFXp4loQTn1VK8gLo-hMEvgVPpBQ,91
120
120
  buz/event/sync/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
121
  buz/event/sync/models/sync_delivery_context.py,sha256=LHjrS6gV-19NEKwtAXVmefjPd-Dsp_Ym8RZb84T3lm8,190
122
122
  buz/event/sync/sync_event_bus.py,sha256=LTJHNKy8LrbygO343AA4Zt_hmgTP9uY6TLdjKs8LuHM,1821
123
123
  buz/event/transactional_outbox/__init__.py,sha256=k8ZBWCi12pWKXchHfgW_Raw4sVR8XkBLuPNW9jB9X2k,1381
124
- buz/event/transactional_outbox/event_to_outbox_record_translator.py,sha256=oSn1iQuW-cZLvlXYIJPnSwm3JYUwGMm9f1pqnlF0cJI,534
124
+ buz/event/transactional_outbox/event_to_outbox_record_translator.py,sha256=d20JOeKIrCcpPEV66TzWiQmYqoyZGyL7J1ys0dUfHFs,615
125
125
  buz/event/transactional_outbox/fqn_to_event_mapper.py,sha256=ujcq6CfYqRJtM8f3SEEltbWN0Ru7NM5JfrbNdh4nvhQ,773
126
126
  buz/event/transactional_outbox/outbox_criteria/__init__.py,sha256=_9YjtbyYdqvDKEAwSQUyOn46Fc2pSNzTl2I7AqisEoc,594
127
127
  buz/event/transactional_outbox/outbox_criteria/deliverable_records_outbox_criteria_factory.py,sha256=vnaf6OPBAiw78RJZ8iOtaISbvuDIj4gN31aR-5k3BL8,347
128
128
  buz/event/transactional_outbox/outbox_criteria/outbox_criteria.py,sha256=HlD7tt3V-qVdPrq4H0idvyDnP7ncD0ZYQJ_XkwLNg-o,695
129
129
  buz/event/transactional_outbox/outbox_criteria/outbox_criteria_factory.py,sha256=XvqOfd7coi2veXyAvAthIBYRxS0Gpfb70nnkq9igvVM,220
130
130
  buz/event/transactional_outbox/outbox_criteria/outbox_sorting_criteria.py,sha256=-ckCLHvHlkuabI0TZ4Tw-qAQhU1hFLAgCOwuvIs_vpI,89
131
- buz/event/transactional_outbox/outbox_record.py,sha256=r8V8eQpuyS5UMS8r7viR2Z-mmEq-ZiakhO7f8TApd5E,1151
131
+ buz/event/transactional_outbox/outbox_record.py,sha256=0lK9cG0wmP-t9JD8erxtcFFH9VoqXclRox3VIp-iSo8,1203
132
132
  buz/event/transactional_outbox/outbox_record_finder/__init__.py,sha256=HdW8GTIaxYExlUWeXugFmkRDyHcBiOlAVwh17dpPOfQ,344
133
133
  buz/event/transactional_outbox/outbox_record_finder/outbox_record_stream_finder.py,sha256=RjCetETAggQ5arXI4Terpyvh7xfz0eXXZon2-C1gXgw,239
134
134
  buz/event/transactional_outbox/outbox_record_finder/polling_outbox_record_stream_finder.py,sha256=qdCsqPQaS6cJ7li0veA2bY17iUG7fd84MzIywG7cPHw,1078
135
- buz/event/transactional_outbox/outbox_record_to_event_translator.py,sha256=StGyBfJsvRP9nJGckxufO2zVAd8xNIjdLVlfCZ2WAd4,746
135
+ buz/event/transactional_outbox/outbox_record_to_event_translator.py,sha256=NIu4HpuRwA8-qW_qjTEIxNd681uRMtW-cueWNZL9oyI,801
136
136
  buz/event/transactional_outbox/outbox_record_validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  buz/event/transactional_outbox/outbox_record_validation/abstract_outbox_record_validator.py,sha256=brOrVum-1bOTU-mTXqQ1WdaPzoVJdQa58sSPQ3U0XcY,610
138
138
  buz/event/transactional_outbox/outbox_record_validation/outbox_record_size_not_allowed_exception.py,sha256=kHvQXgYwJbvF3ZW558NzbdydqsuggnDCcjgesi0G9W8,749
@@ -140,7 +140,7 @@ buz/event/transactional_outbox/outbox_record_validation/outbox_record_validation
140
140
  buz/event/transactional_outbox/outbox_record_validation/outbox_record_validator.py,sha256=XGHTT1dH2CJOqhYYnyPJHmZsAuVXuDOeqgJzK7mRidc,328
141
141
  buz/event/transactional_outbox/outbox_record_validation/size_outbox_record_validator.py,sha256=f8sQ5IHfO4J8m5l7rS3JYUoBvx0B1EAFMRsJ0HPQKG8,2436
142
142
  buz/event/transactional_outbox/outbox_repository.py,sha256=Sn7aWaq1G6uiKXcV09l9L1eVQ_bPUTqY-OSD12_H2jU,628
143
- buz/event/transactional_outbox/transactional_outbox_event_bus.py,sha256=9eUevDAKEwouKrSEhf5dpqFwI-FbB5z9R7gIxaFCLno,2551
143
+ buz/event/transactional_outbox/transactional_outbox_event_bus.py,sha256=Z9YTfixQ2gd0WRVkyK-rCi7EGJvLZqBYvfsFI8ZZEo8,2693
144
144
  buz/event/transactional_outbox/transactional_outbox_worker.py,sha256=x6kf-Oc4oYKu9S4MTcCqd3VqPNURScTReYJ3Ahx4rKA,2221
145
145
  buz/event/worker.py,sha256=BL9TXB_kyr0Avql9fIcFm3CDNnXPvZB6O6BxVwjtCdA,942
146
146
  buz/handler.py,sha256=W6jSTo5BNV9u9QKBaEMhLIa3tgQocd6oYEJf5K4EfEU,358
@@ -179,13 +179,13 @@ buz/kafka/infrastructure/aiokafka/translators/__init__.py,sha256=47DEQpj8HBSa-_T
179
179
  buz/kafka/infrastructure/aiokafka/translators/consumer_initial_offset_position_translator.py,sha256=WmxkQfoXeTy9mIJtGGhM0eDKeQxhcJczeVAGCbtonVI,617
180
180
  buz/kafka/infrastructure/cdc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
181
  buz/kafka/infrastructure/cdc/cdc_message.py,sha256=Cpv2nA19SG3HZGBLH-wIJbuokzTTZKT_HNFm1VwGSk4,585
182
- buz/kafka/infrastructure/cdc/cdc_payload.py,sha256=tQ_HdiREkORHlDoQQraj-KQj0x5MRuV8vP-C4x3cgHY,793
183
- buz/kafka/infrastructure/cdc/cdc_schema.py,sha256=JVSj6MSWNh2aaoWp1LL8UNJtjBvKggoBgMtOOT0vkQQ,940
182
+ buz/kafka/infrastructure/cdc/cdc_payload.py,sha256=_kC80bX0HBMPwjeJy5HpPe1EmHVmVEe2Slut7Ucrpfk,1021
183
+ buz/kafka/infrastructure/cdc/cdc_schema.py,sha256=mCG32kqJ045nThViM8zUjUzdIf0VtASIlqxCHA5SsGQ,1153
184
184
  buz/kafka/infrastructure/deserializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
185
185
  buz/kafka/infrastructure/deserializers/byte_deserializer.py,sha256=4fc6t-zvcFx6F5eoyEixH2uN0cM6aB0YRGwowIzz1RA,211
186
186
  buz/kafka/infrastructure/deserializers/bytes_to_message_deserializer.py,sha256=r40yq67DIElPi6ClmElbtR3VGrG2grNwgwuflXWOh20,345
187
187
  buz/kafka/infrastructure/deserializers/implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
- buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py,sha256=iMTx9zI_QzHcHvCbpfUkq6Hp67O_LXK5iYE1nzt_mqA,1913
188
+ buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py,sha256=zEP7mfJfZXapG7xyJj_BvGR-GtTOZEUYweHgvNRzEYE,2160
189
189
  buz/kafka/infrastructure/deserializers/implementations/cdc/not_valid_cdc_message_exception.py,sha256=hgLLwTcC-C2DuJSOWUhmQsrd1bO9I1469869IqfAPOk,414
190
190
  buz/kafka/infrastructure/deserializers/implementations/json_byte_deserializer.py,sha256=L4b164-KweiQUwyRONhTMIGnAz48UPk0btLqjGOTNdk,373
191
191
  buz/kafka/infrastructure/deserializers/implementations/json_bytes_to_message_deserializer.py,sha256=YwugXkmOudMNtkVfCC4BFe3pFVpbM8rAL9bT88bZMRk,756
@@ -200,8 +200,8 @@ buz/kafka/infrastructure/kafka_python/kafka_python_producer.py,sha256=DkqqLSSXHB
200
200
  buz/kafka/infrastructure/kafka_python/translators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
201
  buz/kafka/infrastructure/kafka_python/translators/consumer_initial_offset_position_translator.py,sha256=hJ48_eyMcnbFL_Y5TOiMbGXrQSryuKk9CvP59MdqNOY,620
202
202
  buz/kafka/infrastructure/serializers/byte_serializer.py,sha256=T83sLdX9V5Oh1mzjRwHi_1DsTFI7KefFj7kmnz7JVy4,207
203
- buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py,sha256=Cw6kbzCMHC2PwHf6DNCIKZB2H-WCEZ-HeIDNxQbkTow,1601
204
- buz/kafka/infrastructure/serializers/implementations/json_byte_serializer.py,sha256=KGkTQE7lq8VB048zCew_IlYgoWPozkmERYKg0t4DjOA,1510
203
+ buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py,sha256=c5VmnuTOIZJ_tjfOl_BQnPdr7D1OAOxGYVFE4O4X8Tk,1801
204
+ buz/kafka/infrastructure/serializers/implementations/json_byte_serializer.py,sha256=yCPlZ-TNoF5Jh0WUlhseC8rTnHk-IJgmAHmU58ninyA,1523
205
205
  buz/kafka/infrastructure/serializers/kafka_header_serializer.py,sha256=ws9xr5lsJF6J-uVIplPym7vboo00KtXHfLJf8JjG0lo,649
206
206
  buz/locator/__init__.py,sha256=my8qfHL5htIT9RFFjzV4zGIPVW72tu4SMQbKKqBeSKo,293
207
207
  buz/locator/handler_fqn_not_found_exception.py,sha256=HfQb8gwqEpG1YfOc_IQlSCjRg0Ete0Aj_z3s7GPC-RM,206
@@ -216,7 +216,8 @@ buz/locator/sync/__init__.py,sha256=OljGqPXBPuxHzWcn-tQ0P-ObLRHbhoCmmXhsSIgVxJM,
216
216
  buz/locator/sync/handler_already_registered_exception.py,sha256=7DAnkGD97OIC9gc7604dTMBtVUl8KereUvTMicK7FD0,245
217
217
  buz/locator/sync/handler_not_registered_exception.py,sha256=cYKtKET1fHXaMvbBFJNLtvNF6-yp8pixUV62_CdTS54,234
218
218
  buz/locator/sync/instance_locator.py,sha256=HGQ6uRIwrTruhax2i8L6clfJUywgHCHC3k2rwYqjApo,2076
219
- buz/message.py,sha256=HpcFeAcYPfhyXNS8T0VokAp6XW8nHYCAHm8d0dOk0_o,2402
219
+ buz/message.py,sha256=d9CMiVSlQVX7xXHi60NSHwqd9cLFoulKIlmlBqLqzaA,2779
220
+ buz/metadata.py,sha256=F0-zp_6Tplr2L3euZtuZR3jZ1qb2mW0X99I5ZvQE9Yg,250
220
221
  buz/middleware/__init__.py,sha256=ndg9oGa4p8zOYC3i0nikfmSe3Ny5ug9RBwb9vZ7YhKM,176
221
222
  buz/middleware/middleware.py,sha256=XNSlfSTyBAfHzvuFrjM0IOVtz35lP_f-xWbkfdMYltA,54
222
223
  buz/middleware/middleware_chain_builder.py,sha256=D9zl5XSF5P65QpnPcbtyFaaVHqBTb6hX75aKI7CtiPU,1010
@@ -229,7 +230,7 @@ buz/query/asynchronous/middleware/base_handle_middleware.py,sha256=51FliRBVrobao
229
230
  buz/query/asynchronous/middleware/handle_middleware.py,sha256=LfQLKc4jIlUegbGbnMXqCSXgAl6NaRGqvKDN0GuvgY4,462
230
231
  buz/query/asynchronous/middleware/handle_middleware_chain_resolver.py,sha256=iA2faVRvNkuS5S4dB1buP25JGSqfBKBQIKg14hWis2U,1123
231
232
  buz/query/asynchronous/query_bus.py,sha256=L3VIw6VofJzJYH2oie5uFKH-dQ-M6a2VECTd6Seos_o,195
232
- buz/query/asynchronous/query_handler.py,sha256=Me80YBdGP368WYUhEY7n5AmwacFmdqFYyiM6TyDrqKE,501
233
+ buz/query/asynchronous/query_handler.py,sha256=70SbvY_vfFvEl2q3nzXUPQeVYkfcd7x1tJIIycto4sc,511
233
234
  buz/query/asynchronous/self_process/__init__.py,sha256=5y0dGgeDq0ZPCrexVjvJWT6gix8lKd-7Iw7Z3H8dirc,126
234
235
  buz/query/asynchronous/self_process/self_process_query_bus.py,sha256=2PqbJGrjv7ULEAl0yIj-Gn4ylVc3_EvJ0VXIlzUlhNc,1217
235
236
  buz/query/more_than_one_query_handler_related_exception.py,sha256=sEfShwCB1VHdUbf02NSEAyv6pXx4GO9ram0AenBF_dE,516
@@ -257,7 +258,7 @@ buz/serializer/message_to_json_bytes_serializer.py,sha256=RGZJ64t4t4Pz2FCASZZCv-
257
258
  buz/wrapper/__init__.py,sha256=GnRdJFcncn-qp0hzDG9dBHLmTJSbHFVjE_yr-MdW_n4,77
258
259
  buz/wrapper/async_to_sync.py,sha256=OfK-vrVUhuN-LLLvekLdMbQYtH0ue5lfbvuasj6ovMI,698
259
260
  buz/wrapper/event_loop.py,sha256=pfBJ1g-8A2a3YgW8Gf9Fg0kkewoh3-wgTy2KIFDyfHk,266
260
- buz-2.16.0.dist-info/LICENSE,sha256=jcLgcIIVaBqaZNwe0kzGWSU99YgwMcI0IGv142wkYSM,1062
261
- buz-2.16.0.dist-info/METADATA,sha256=NUJDqpVmTFd9vDNXIhjiaN1N9jKAiUOisQfBFUB6q_Y,12679
262
- buz-2.16.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
263
- buz-2.16.0.dist-info/RECORD,,
261
+ buz-2.17.0.dist-info/LICENSE,sha256=jcLgcIIVaBqaZNwe0kzGWSU99YgwMcI0IGv142wkYSM,1062
262
+ buz-2.17.0.dist-info/METADATA,sha256=vm8M2IwJBQqGMAbLyG-4BBeSBC_2a7mcllqkWw-t-QQ,12580
263
+ buz-2.17.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
264
+ buz-2.17.0.dist-info/RECORD,,
File without changes
File without changes