2222from collections .abc import Mapping as _Mapping
2323from collections .abc import Sequence as _Sequence
2424from enum import Enum as _Enum
25+ from zoneinfo import ZoneInfo as _ZoneInfo
2526
2627import typing_extensions as _typing_extensions
2728
4041)
4142
4243SpecValue : _typing .TypeAlias = (
43- str
44- | int
45- | float
46- | bool
47- | _util .Sentinel
48- | list ["SpecValue" ]
49- | dict [str , "SpecValue" ]
50- | None
44+ str | int | float | bool | _util .Sentinel | list ["SpecValue" ] | dict [str , "SpecValue" ] | None
5145)
5246
5347
@@ -176,7 +170,7 @@ class ManifestEndpoint:
176170 """A definition of a function as appears in the Manifest."""
177171
178172 entryPoint : str | None = None
179- region : list [str ] | None = _dataclasses .field (default_factory = list [ str ] )
173+ region : list [str ] | None = _dataclasses .field (default_factory = list )
180174 platform : str | None = "gcfv2"
181175 availableMemoryMb : int | _params .Expression [int ] | _util .Sentinel | None = None
182176 maxInstances : int | _params .Expression [int ] | _util .Sentinel | None = None
@@ -189,7 +183,7 @@ class ManifestEndpoint:
189183 labels : dict [str , str ] | None = None
190184 ingressSettings : str | None | _util .Sentinel = None
191185 secretEnvironmentVariables : list [SecretEnvironmentVariable ] | _util .Sentinel | None = (
192- _dataclasses .field (default_factory = list [ SecretEnvironmentVariable ] )
186+ _dataclasses .field (default_factory = list )
193187 )
194188 httpsTrigger : HttpsTrigger | None = None
195189 callableTrigger : CallableTrigger | None = None
@@ -208,10 +202,8 @@ class ManifestRequiredApi(_typing.TypedDict):
208202class ManifestStack :
209203 endpoints : dict [str , ManifestEndpoint ]
210204 specVersion : str = "v1alpha1"
211- params : _Sequence [ManifestParamBase ] | None = _dataclasses .field (default_factory = list [ManifestParamBase ])
212- requiredAPIs : list [ManifestRequiredApi ] = _dataclasses .field (
213- default_factory = list [ManifestRequiredApi ]
214- )
205+ params : _Sequence [ManifestParamBase ] | None = _dataclasses .field (default_factory = list )
206+ requiredAPIs : list [ManifestRequiredApi ] = _dataclasses .field (default_factory = list )
215207
216208
217209def _param_input_to_spec (
@@ -296,23 +288,26 @@ def _param_to_spec(param: ManifestParamBase) -> dict[str, SpecValue]:
296288
297289def _object_to_spec (data : object ) -> SpecValue :
298290 if isinstance (data , _Enum ):
299- return data .value
291+ result : SpecValue = data .value
300292 elif isinstance (data , _params .Expression ):
301- return f"{ data } "
293+ result = f"{ data } "
294+ elif isinstance (data , _ZoneInfo ):
295+ result = data .key
302296 elif _dataclasses .is_dataclass (data ):
303- return _dataclass_to_spec (_typing .cast (_DataclassInstance , data ))
304- elif isinstance (data , list ):
305- return list ( map ( _object_to_spec , data ) )
306- elif isinstance (data , dict ):
307- return _dict_to_spec ( data )
297+ result = _dataclass_to_spec (_typing .cast (_DataclassInstance , data ))
298+ elif isinstance (data , _Mapping ):
299+ result = _dict_to_spec ( data )
300+ elif isinstance (data , _Sequence ) and not isinstance ( data , str | bytes | bytearray ):
301+ result = list ( map ( _object_to_spec , data ) )
308302 elif data is None :
309- return None
303+ result = None
310304 elif isinstance (data , _util .Sentinel ):
311- return data
312- elif isinstance (data , ( str , int , float , bool ) ):
313- return data
305+ result = data
306+ elif isinstance (data , str | int | float | bool ):
307+ result = data
314308 else :
315309 raise TypeError (f"Unsupported manifest spec value: { type (data )!r} " )
310+ return result
316311
317312
318313def _dict_factory (data : list [tuple [str , object ]]) -> dict [str , SpecValue ]:
0 commit comments