33from __future__ import annotations
44
55import dataclasses
6- import warnings
76from collections .abc import Mapping , Sequence
87from dataclasses import dataclass
98from logging import getLogger
3029from temporalio .converter ._payload_converter import (
3130 PayloadConverter ,
3231)
33- from temporalio .converter ._payload_limits import (
34- PayloadLimitsConfig ,
35- PayloadSizeWarning ,
36- _PayloadSizeError ,
37- _ServerPayloadErrorLimits ,
38- )
3932from temporalio .converter ._serialization_context import (
4033 SerializationContext ,
4134 WithSerializationContext ,
@@ -86,9 +79,6 @@ class DataConverter(WithSerializationContext):
8679 failure_converter : FailureConverter = dataclasses .field (init = False )
8780 """Failure converter created from the :py:attr:`failure_converter_class`."""
8881
89- payload_limits : PayloadLimitsConfig = PayloadLimitsConfig ()
90- """Settings for payload size limits."""
91-
9282 external_storage : ExternalStorage | None = None
9383 """Options for external storage. If None, external storage is disabled.
9484
@@ -99,9 +89,6 @@ class DataConverter(WithSerializationContext):
9989 default : ClassVar [DataConverter ]
10090 """Singleton default data converter."""
10191
102- _payload_error_limits : _ServerPayloadErrorLimits | None = None
103- """Server-reported limits for payloads."""
104-
10592 def __post_init__ (self ) -> None : # noqa: D105
10693 object .__setattr__ (self , "payload_converter" , self .payload_converter_class ())
10794 object .__setattr__ (self , "failure_converter" , self .failure_converter_class ())
@@ -124,7 +111,6 @@ async def encode(
124111 payloads = self .payload_converter .to_payloads (values )
125112 payloads = await self ._encode_payload_sequence (payloads )
126113 payloads = await self ._external_store_payload_sequence (payloads )
127- self ._validate_payload_limits (payloads )
128114 return payloads
129115
130116 async def decode (
@@ -230,11 +216,6 @@ def _with_contexts(
230216 """Return an instance with both serialization and store contexts applied."""
231217 return self .with_context (serialization_ctx )._with_store_context (store_ctx )
232218
233- def _with_payload_error_limits (
234- self , limits : _ServerPayloadErrorLimits | None
235- ) -> DataConverter :
236- return dataclasses .replace (self , _payload_error_limits = limits )
237-
238219 async def _decode_memo (
239220 self ,
240221 source : temporalio .api .common .v1 .Memo ,
@@ -273,16 +254,6 @@ async def _encode_memo_existing(
273254 if not isinstance (v , temporalio .api .common .v1 .Payload ):
274255 payload = (await self .encode ([v ]))[0 ]
275256 memo .fields [k ].CopyFrom (payload )
276- # Memos have their field payloads validated all together in one unit
277- DataConverter ._validate_limits (
278- list (memo .fields .values ()),
279- self ._payload_error_limits .memo_size_error
280- if self ._payload_error_limits
281- else None ,
282- "[TMPRL1103] Attempted to upload memo with size that exceeded the error limit." ,
283- self .payload_limits .memo_size_warning ,
284- "[TMPRL1103] Attempted to upload memo with size that exceeded the warning limit." ,
285- )
286257
287258 async def _transform_outbound_payload (
288259 self , payload : temporalio .api .common .v1 .Payload
@@ -291,7 +262,6 @@ async def _transform_outbound_payload(
291262 payload = (await self .payload_codec .encode ([payload ]))[0 ]
292263 if self .external_storage :
293264 payload = await self .external_storage ._store_payload (payload )
294- self ._validate_payload_limits ([payload ])
295265 return payload
296266
297267 async def _transform_outbound_payloads (
@@ -301,7 +271,6 @@ async def _transform_outbound_payloads(
301271 await self .payload_codec .encode_wrapper (payloads )
302272 if self .external_storage :
303273 await self .external_storage ._store_payloads (payloads )
304- self ._validate_payload_limits (payloads .payloads )
305274
306275 async def _transform_inbound_payload (
307276 self , payload : temporalio .api .common .v1 .Payload
@@ -376,42 +345,6 @@ async def _decode_payload_sequence(
376345 def _decode_payload_has_effect (self ) -> bool :
377346 return self .payload_codec is not None or self .external_storage is not None
378347
379- def _validate_payload_limits (
380- self ,
381- payloads : Sequence [temporalio .api .common .v1 .Payload ],
382- ):
383- DataConverter ._validate_limits (
384- payloads ,
385- self ._payload_error_limits .payload_size_error
386- if self ._payload_error_limits
387- else None ,
388- "[TMPRL1103] Attempted to upload payloads with size that exceeded the error limit." ,
389- self .payload_limits .payload_size_warning ,
390- "[TMPRL1103] Attempted to upload payloads with size that exceeded the warning limit." ,
391- )
392-
393- @staticmethod
394- def _validate_limits (
395- payloads : Sequence [temporalio .api .common .v1 .Payload ],
396- error_limit : int | None ,
397- error_message : str ,
398- warning_limit : int ,
399- warning_message : str ,
400- ):
401- total_size = sum (payload .ByteSize () for payload in payloads )
402-
403- if error_limit and error_limit > 0 and total_size > error_limit :
404- raise _PayloadSizeError (
405- f"{ error_message } Size: { total_size } bytes, Limit: { error_limit } bytes"
406- )
407-
408- if warning_limit > 0 and total_size > warning_limit :
409- # TODO: Use a context aware logger to log extra information about workflow/activity/etc
410- warnings .warn (
411- f"{ warning_message } Size: { total_size } bytes, Limit: { warning_limit } bytes" ,
412- PayloadSizeWarning ,
413- )
414-
415348
416349def default () -> DataConverter :
417350 """Default data converter.
0 commit comments