Skip to content

Commit 948d8fd

Browse files
committed
refactor(zarr-metadata): validators type an unread document as what it is
Five validators cast a document to `Mapping[str, object]` before any key was checked, then cast it again to `Mapping[object, object]` to check the keys. It is `Mapping[object, object]` until its keys are read, and `_missing_keys`, `_check_literal` and `_validate_dim_sequence` take it so, which removes the second casts. Assisted-by: ClaudeCode:claude-opus-5-5
1 parent b3045a2 commit 948d8fd

1 file changed

Lines changed: 13 additions & 24 deletions

File tree

‎packages/zarr-metadata/src/zarr_metadata/model/_validation.py‎

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ def parse_json(value: object) -> JSONValue:
242242

243243

244244
def _missing_keys(
245-
required: frozenset[str], doc: Mapping[str, object]
245+
required: frozenset[str], doc: Mapping[object, object]
246246
) -> tuple[ValidationProblem, ...]:
247247
"""One `missing_key` problem per required key absent from `doc`."""
248248
return tuple(
@@ -269,7 +269,7 @@ def _unexpected_keys(
269269

270270

271271
def _check_literal(
272-
doc: Mapping[str, object], key: str, expected: object
272+
doc: Mapping[object, object], key: str, expected: object
273273
) -> tuple[ValidationProblem, ...]:
274274
"""One `invalid_value` problem if `doc[key]` is present but not `expected`."""
275275
if key in doc and (type(doc[key]) is not type(expected) or doc[key] != expected):
@@ -397,7 +397,7 @@ def _is_int_sequence(value: object) -> bool:
397397
)
398398

399399

400-
def _validate_dim_sequence(doc: Mapping[str, object], key: str) -> tuple[ValidationProblem, ...]:
400+
def _validate_dim_sequence(doc: Mapping[object, object], key: str) -> tuple[ValidationProblem, ...]:
401401
"""Validate a dimension sequence (`shape` / `chunks`) if present in `doc`.
402402
403403
Dimension lengths are non-negative integers.
@@ -555,13 +555,9 @@ def validate_array_metadata_v3(value: object) -> tuple[ValidationProblem, ...]:
555555
"""
556556
if not isinstance(value, Mapping):
557557
return (ValidationProblem((), "expected a mapping", "invalid_type"),)
558-
doc = cast("Mapping[str, object]", value)
558+
doc = cast("Mapping[object, object]", value)
559559
problems: list[ValidationProblem] = list(_missing_keys(ARRAY_METADATA_REQUIRED_KEYS_V3, doc))
560-
problems.extend(
561-
_validate_extension_fields_v3(
562-
cast("Mapping[object, object]", value), ARRAY_METADATA_STANDARD_KEYS_V3
563-
)
564-
)
560+
problems.extend(_validate_extension_fields_v3(doc, ARRAY_METADATA_STANDARD_KEYS_V3))
565561
problems.extend(_check_literal(doc, "zarr_format", 3))
566562
problems.extend(_check_literal(doc, "node_type", "array"))
567563
problems.extend(_validate_dim_sequence(doc, "shape"))
@@ -649,7 +645,7 @@ def validate_array_metadata_v2(value: object) -> tuple[ValidationProblem, ...]:
649645
"""
650646
if not isinstance(value, Mapping):
651647
return (ValidationProblem((), "expected a mapping", "invalid_type"),)
652-
doc = cast("Mapping[str, object]", value)
648+
doc = cast("Mapping[object, object]", value)
653649
# Unlike the group document ("Other keys MUST NOT be present",
654650
# https://github.com/zarr-developers/zarr-specs/blob/fc7dd9c9beb5a50b87f9b08b00bf50fc0048482f/docs/v2/v2.0.rst#L313), the v2 array document is open: other keys "SHOULD NOT be
655651
# present within the metadata object and SHOULD be ignored by
@@ -757,18 +753,13 @@ def validate_consolidated_metadata_v3(value: object) -> tuple[ValidationProblem,
757753
"""
758754
if not isinstance(value, Mapping):
759755
return (ValidationProblem((), "expected a mapping", "invalid_type"),)
760-
env = cast("Mapping[str, object]", value)
756+
env = cast("Mapping[object, object]", value)
761757
problems: list[ValidationProblem] = [
762758
ValidationProblem((key,), "missing required key", "missing_key")
763759
for key in ("kind", "must_understand", "metadata")
764760
if key not in env
765761
]
766-
problems.extend(
767-
_unexpected_keys(
768-
frozenset({"kind", "must_understand", "metadata"}),
769-
cast("Mapping[object, object]", value),
770-
)
771-
)
762+
problems.extend(_unexpected_keys(frozenset({"kind", "must_understand", "metadata"}), env))
772763
problems.extend(_check_literal(env, "kind", "inline"))
773764
if "must_understand" in env and env["must_understand"] is not False:
774765
problems.append(ValidationProblem(("must_understand",), "expected False", "invalid_value"))
@@ -786,7 +777,7 @@ def validate_consolidated_metadata_v3(value: object) -> tuple[ValidationProblem,
786777
entry_obj: object = entry
787778
node_type: object = None
788779
if isinstance(entry, Mapping):
789-
node_type = cast("Mapping[str, object]", entry).get("node_type")
780+
node_type = cast("Mapping[object, object]", entry).get("node_type")
790781
if node_type == "array":
791782
problems.extend(
792783
_prefix("metadata", _prefix(key, validate_array_metadata_v3(entry_obj)))
@@ -816,11 +807,11 @@ def validate_group_metadata_v3(value: object) -> tuple[ValidationProblem, ...]:
816807
"""
817808
if not isinstance(value, Mapping):
818809
return (ValidationProblem((), "expected a mapping", "invalid_type"),)
819-
doc = cast("Mapping[str, object]", value)
810+
doc = cast("Mapping[object, object]", value)
820811
problems: list[ValidationProblem] = list(_missing_keys(GROUP_METADATA_REQUIRED_KEYS_V3, doc))
821812
problems.extend(
822813
_validate_extension_fields_v3(
823-
cast("Mapping[object, object]", value),
814+
doc,
824815
GROUP_METADATA_STANDARD_KEYS_V3,
825816
additional_reserved_keys=frozenset({"consolidated_metadata"}),
826817
)
@@ -864,11 +855,9 @@ def validate_group_metadata_v2(value: object) -> tuple[ValidationProblem, ...]:
864855
"""
865856
if not isinstance(value, Mapping):
866857
return (ValidationProblem((), "expected a mapping", "invalid_type"),)
867-
doc = cast("Mapping[str, object]", value)
858+
doc = cast("Mapping[object, object]", value)
868859
problems: list[ValidationProblem] = list(_missing_keys(GROUP_METADATA_REQUIRED_KEYS_V2, doc))
869-
problems.extend(
870-
_unexpected_keys(GROUP_METADATA_STANDARD_KEYS_V2, cast("Mapping[object, object]", value))
871-
)
860+
problems.extend(_unexpected_keys(GROUP_METADATA_STANDARD_KEYS_V2, doc))
872861
problems.extend(_check_literal(doc, "zarr_format", 2))
873862
if "attributes" in doc:
874863
problems.extend(_validate_attributes(doc["attributes"]))

0 commit comments

Comments
 (0)