Skip to content

Commit 8887f26

Browse files
committed
Fix JSON serialization with PyPy 3.11
- Need to extend implementation of bridge MapEncondingDict
1 parent 8e89086 commit 8887f26

1 file changed

Lines changed: 25 additions & 8 deletions

File tree

elementpath/serialization.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,31 @@
3838
SER_PARAM_ITEM_SEPARATOR = '{%s}item-separator' % XSLT_XQUERY_SERIALIZATION_NAMESPACE
3939

4040

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+
4166
def get_serialization_params(params: Union[None, ElementNode, XPathMap] = None,
4267
token: Optional[XPathToken] = None) -> dict['str', Any]:
4368

@@ -337,14 +362,6 @@ def serialize_to_json(elements: Iterable[Any],
337362
if etree_module is None:
338363
etree_module = ElementTree
339364

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-
348365
class XPathEncoder(json.JSONEncoder):
349366

350367
def default(self, obj: Any) -> Any:

0 commit comments

Comments
 (0)