|
38 | 38 | SER_PARAM_ITEM_SEPARATOR = '{%s}item-separator' % XSLT_XQUERY_SERIALIZATION_NAMESPACE |
39 | 39 |
|
40 | 40 |
|
| 41 | +class MapEncodingDict(dict[AnyAtomicType | None, Any]): |
| 42 | + """ |
| 43 | + A bridge dict-type for encoding XPath maps to JSON. |
| 44 | + """ |
| 45 | + def __init__(self, items: Any) -> None: |
| 46 | + self[None] = None |
| 47 | + self._items = items |
| 48 | + |
| 49 | + def __getitem__(self, key: AnyAtomicType | None, /) -> Any: |
| 50 | + for k, v in self._items: |
| 51 | + if key == k: |
| 52 | + return v |
| 53 | + raise KeyError(key) |
| 54 | + |
| 55 | + def __iter__(self) -> Iterator[AnyAtomicType | None]: |
| 56 | + for k, _ in self._items: |
| 57 | + yield k |
| 58 | + |
| 59 | + def __len__(self) -> int: |
| 60 | + return len(self._items) |
| 61 | + |
| 62 | + def items(self) -> Any: |
| 63 | + return self._items |
| 64 | + |
| 65 | + |
41 | 66 | def get_serialization_params(params: Union[None, ElementNode, XPathMap] = None, |
42 | 67 | token: Optional[XPathToken] = None) -> dict['str', Any]: |
43 | 68 |
|
@@ -337,14 +362,6 @@ def serialize_to_json(elements: Iterable[Any], |
337 | 362 | if etree_module is None: |
338 | 363 | etree_module = ElementTree |
339 | 364 |
|
340 | | - class MapEncodingDict(dict): # type: ignore[type-arg] |
341 | | - def __init__(self, items: Any) -> None: |
342 | | - self[None] = None |
343 | | - self._items = items |
344 | | - |
345 | | - def items(self) -> Any: |
346 | | - return self._items |
347 | | - |
348 | 365 | class XPathEncoder(json.JSONEncoder): |
349 | 366 |
|
350 | 367 | def default(self, obj: Any) -> Any: |
|
0 commit comments