Skip to content

Commit 7513eee

Browse files
author
Izaak Gough
committed
fix: use standard list and widen type to allow tuples etc.
1 parent f1aeb7d commit 7513eee

1 file changed

Lines changed: 20 additions & 25 deletions

File tree

src/firebase_functions/private/manifest.py

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from collections.abc import Mapping as _Mapping
2323
from collections.abc import Sequence as _Sequence
2424
from enum import Enum as _Enum
25+
from zoneinfo import ZoneInfo as _ZoneInfo
2526

2627
import typing_extensions as _typing_extensions
2728

@@ -40,14 +41,7 @@
4041
)
4142

4243
SpecValue: _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):
208202
class 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

217209
def _param_input_to_spec(
@@ -296,23 +288,26 @@ def _param_to_spec(param: ManifestParamBase) -> dict[str, SpecValue]:
296288

297289
def _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

318313
def _dict_factory(data: list[tuple[str, object]]) -> dict[str, SpecValue]:

0 commit comments

Comments
 (0)