21 lines
771 B
Python
21 lines
771 B
Python
"""Canonical partial matching for acceptance-claim expectations."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
|
|
def contains_expected(actual: Any, required: Any) -> bool:
|
|
"""Allow an actual claim to add provider-chosen optional fields only."""
|
|
if isinstance(required, dict):
|
|
return isinstance(actual, dict) and all(
|
|
key in actual and contains_expected(actual[key], value)
|
|
for key, value in required.items()
|
|
)
|
|
if isinstance(required, list):
|
|
return isinstance(actual, list) and len(actual) == len(required) and all(
|
|
contains_expected(actual_item, required_item)
|
|
for actual_item, required_item in zip(actual, required, strict=True)
|
|
)
|
|
return actual == required
|