@@ -188,9 +188,7 @@ def _print_as_class(self, output, base: str, doc=True, quote_types=False):
188188 if member in self .shape .required_members :
189189 output .write (f" { member } : IO[{ q } { to_valid_python_name (shape .name )} { q } ]\n " )
190190 else :
191- output .write (
192- f" { member } : Optional[IO[{ q } { to_valid_python_name (shape .name )} { q } ]]\n "
193- )
191+ output .write (f" { member } : { q } IO[{ to_valid_python_name (shape .name )} ] | None{ q } \n " )
194192 del remaining_members [member ]
195193 # render the streaming payload first
196194 if self .is_response and self .response_operation .has_streaming_output :
@@ -199,25 +197,26 @@ def _print_as_class(self, output, base: str, doc=True, quote_types=False):
199197 shape_name = to_valid_python_name (shape .name )
200198 if member in self .shape .required_members :
201199 output .write (
202- f" { member } : Union[ { q } { shape_name } { q } , IO[{ q } { shape_name } { q } ], Iterable[{ q } { shape_name } { q } ]] \n "
200+ f" { member } : { q } { shape_name } | IO[{ shape_name } ] | Iterable[{ shape_name } ] { q } \n "
203201 )
204202 else :
205203 output .write (
206- f" { member } : Optional[Union[ { q } { shape_name } { q } , IO[{ q } { shape_name } { q } ], Iterable[{ q } { shape_name } { q } ]]] \n "
204+ f" { member } : { q } { shape_name } | IO[{ shape_name } ] | Iterable[{ shape_name } ] | None { q } \n "
207205 )
208206 del remaining_members [member ]
209207
210208 for k , v in remaining_members .items ():
209+ shape_name = to_valid_python_name (v .name )
211210 if k in self .shape .required_members :
212211 if v .serialization .get ("eventstream" ):
213- output .write (f" { k } : Iterator[{ q } { to_valid_python_name ( v . name ) } { q } ]\n " )
212+ output .write (f" { k } : Iterator[{ q } { shape_name } { q } ]\n " )
214213 else :
215- output .write (f" { k } : { q } { to_valid_python_name ( v . name ) } { q } \n " )
214+ output .write (f" { k } : { q } { shape_name } { q } \n " )
216215 else :
217216 if v .serialization .get ("eventstream" ):
218- output .write (f" { k } : Iterator[{ q } { to_valid_python_name ( v . name ) } { q } ]\n " )
217+ output .write (f" { k } : Iterator[{ q } { shape_name } { q } ]\n " )
219218 else :
220- output .write (f" { k } : Optional[ { q } { to_valid_python_name ( v . name ) } { q } ] \n " )
219+ output .write (f" { k } : { q } { shape_name } | None { q } \n " )
221220
222221 def _print_as_typed_dict (self , output , doc = True , quote_types = False ):
223222 name = to_valid_python_name (self .shape .name )
@@ -236,7 +235,7 @@ def _print_as_typed_dict(self, output, doc=True, quote_types=False):
236235 if v .serialization .get ("eventstream" ):
237236 output .write (f' "{ k } ": Iterator[{ q } { member_name } { q } ],\n ' )
238237 else :
239- output .write (f' "{ k } ": Optional[ { q } { member_name } { q } ] ,\n ' )
238+ output .write (f' "{ k } ": { q } { member_name } | None { q } ,\n ' )
240239 output .write ("}, total=False)" )
241240
242241 def print_shape_doc (self , output , shape ):
@@ -256,11 +255,11 @@ def print_declaration(self, output, doc=True, quote_types=False):
256255 self ._print_structure_declaration (output , doc , quote_types )
257256 elif isinstance (shape , ListShape ):
258257 output .write (
259- f"{ to_valid_python_name (shape .name )} = List [{ q } { to_valid_python_name (shape .member .name )} { q } ]"
258+ f"{ to_valid_python_name (shape .name )} = list [{ q } { to_valid_python_name (shape .member .name )} { q } ]"
260259 )
261260 elif isinstance (shape , MapShape ):
262261 output .write (
263- f"{ to_valid_python_name (shape .name )} = Dict [{ q } { to_valid_python_name (shape .key .name )} { q } , { q } { to_valid_python_name (shape .value .name )} { q } ]"
262+ f"{ to_valid_python_name (shape .name )} = dict [{ q } { to_valid_python_name (shape .key .name )} { q } , { q } { to_valid_python_name (shape .value .name )} { q } ]"
264263 )
265264 elif isinstance (shape , StringShape ):
266265 if shape .enum :
@@ -316,9 +315,8 @@ def get_order(self):
316315def generate_service_types (output , service : ServiceModel , doc = True ):
317316 output .write ("from datetime import datetime\n " )
318317 output .write ("from enum import StrEnum\n " )
319- output .write (
320- "from typing import Dict, List, Optional, Iterator, Iterable, IO, Union, TypedDict\n "
321- )
318+ output .write ("from typing import IO, TypedDict\n " )
319+ output .write ("from collections.abc import Iterable, Iterator\n " )
322320 output .write ("\n " )
323321 output .write (
324322 "from localstack.aws.api import handler, RequestContext, ServiceException, ServiceRequest"
@@ -372,8 +370,8 @@ def generate_service_api(output, service: ServiceModel, doc=True):
372370
373371 output .write (f"class { class_name } :\n " )
374372 output .write ("\n " )
375- output .write (f' service = "{ service .service_name } "\n ' )
376- output .write (f' version = "{ service .api_version } "\n ' )
373+ output .write (f' service: str = "{ service .service_name } "\n ' )
374+ output .write (f' version: str = "{ service .api_version } "\n ' )
377375 for op_name in service .operation_names :
378376 operation : OperationModel = service .operation_model (op_name )
379377
0 commit comments