@@ -101,6 +101,27 @@ def __init__(self, config: $1T | None = None, plugins: list[$2T] | None = None):
101101 self._retry_strategy_resolver = RetryStrategyResolver()
102102 """ , configSymbol , pluginSymbol , writer .consumer (w -> writeDefaultPlugins (w , defaultPlugins )));
103103
104+ writer .addImport ("smithy_core.retries" , "RetryStrategyOptions" );
105+ writer .addImport ("smithy_core.interfaces.retries" , "RetryStrategy" );
106+ writer .write ("""
107+ async def _resolve_retry_strategy(self, retry_strategy: RetryStrategy | RetryStrategyOptions | None) -> RetryStrategy:
108+ if isinstance(retry_strategy, RetryStrategy):
109+ return retry_strategy
110+ elif isinstance(retry_strategy, RetryStrategyOptions):
111+ return await self._retry_strategy_resolver.resolve_retry_strategy(
112+ options=retry_strategy
113+ )
114+ elif retry_strategy is None:
115+ return await self._retry_strategy_resolver.resolve_retry_strategy(
116+ options=RetryStrategyOptions()
117+ )
118+ else:
119+ raise TypeError(
120+ f"retry_strategy must be RetryStrategy, RetryStrategyOptions, or None, "
121+ f"got {type(retry_strategy).__name__}"
122+ )
123+ """ );
124+
104125 var topDownIndex = TopDownIndex .of (model );
105126 var eventStreamIndex = EventStreamIndex .of (model );
106127 for (OperationShape operation : topDownIndex .getContainedOperations (service )) {
@@ -207,22 +228,7 @@ private void writeSharedOperationInit(PythonWriter writer, OperationShape operat
207228 if config.protocol is None or config.transport is None:
208229 raise ExpectationNotMetError("protocol and transport MUST be set on the config to make calls.")
209230
210- # Resolve retry strategy from config
211- if isinstance(config.retry_strategy, RetryStrategy):
212- retry_strategy = config.retry_strategy
213- elif isinstance(config.retry_strategy, RetryStrategyOptions):
214- retry_strategy = await self._retry_strategy_resolver.resolve_retry_strategy(
215- options=config.retry_strategy
216- )
217- elif config.retry_strategy is None:
218- retry_strategy = await self._retry_strategy_resolver.resolve_retry_strategy(
219- options=RetryStrategyOptions()
220- )
221- else:
222- raise TypeError(
223- f"retry_strategy must be RetryStrategy, RetryStrategyOptions, or None, "
224- f"got {type(config.retry_strategy).__name__}"
225- )
231+ retry_strategy = await self._resolve_retry_strategy(config.retry_strategy)
226232
227233 pipeline = RequestPipeline(
228234 protocol=config.protocol,
0 commit comments