diff --git a/src/automerge/core/__init__.py b/src/automerge/core/__init__.py index fa61a26..14482eb 100644 --- a/src/automerge/core/__init__.py +++ b/src/automerge/core/__init__.py @@ -7,25 +7,25 @@ Value = ObjType | tuple[ScalarType, ScalarValue] def extract(doc: Document, obj_id: bytes = ROOT) -> Thing: - match doc.object_type(obj_id): - case ObjType.Map: - d: dict[str, Thing] = {} - for k in doc.keys(obj_id): - x = doc.get(obj_id, k) - assert x is not None - v, id = x - d[k] = extract(doc, id) if isinstance(v, ObjType) else v[1] - return d - case ObjType.List: - l: list[Thing] = [] - for k2 in range(0, doc.length(obj_id)): - x = doc.get(obj_id, k2) - assert x is not None - v, id = x - l.append(extract(doc, id) if isinstance(v, ObjType) else v[1]) - return l - case ObjType.Text: - return doc.text(obj_id) + ot = doc.object_type(obj_id) + if ot == ObjType.Map: + d: dict[str, Thing] = {} + for k in doc.keys(obj_id): + x = doc.get(obj_id, k) + assert x is not None + v, id = x + d[k] = extract(doc, id) if isinstance(v, ObjType) else v[1] + return d + elif ot == ObjType.List: + l: list[Thing] = [] + for k2 in range(0, doc.length(obj_id)): + x = doc.get(obj_id, k2) + assert x is not None + v, id = x + l.append(extract(doc, id) if isinstance(v, ObjType) else v[1]) + return l + elif ot == ObjType.Text: + return doc.text(obj_id) raise Exception("unexpected result from doc.object_type") __doc__ = _automerge.__doc__ diff --git a/src/automerge/document.py b/src/automerge/document.py index 69adb28..350fde3 100644 --- a/src/automerge/document.py +++ b/src/automerge/document.py @@ -40,11 +40,10 @@ def to_py(self) -> core.Thing: def _maybe_wrap(self, x: tuple[core.Value, bytes]) -> 'MapReadProxy | ListReadProxy | core.ScalarValue': value, obj_id = x if isinstance(value, core.ObjType): - match value: - case core.ObjType.List: - return ListReadProxy(self._doc, obj_id, self._heads) - case core.ObjType.Map: - return MapReadProxy(self._doc, obj_id, self._heads) + if value == core.ObjType.List: + return ListReadProxy(self._doc, obj_id, self._heads) + elif value == core.ObjType.Map: + return MapReadProxy(self._doc, obj_id, self._heads) raise Exception("unknown obj type") _, v = value return v @@ -142,11 +141,10 @@ def __getitem__(self, key: int | slice) -> MutableProxyThing | MutableSequence[M if x is None: return None value, obj_id = x if isinstance(value, core.ObjType): - match value: - case core.ObjType.Map: - return MapWriteProxy(self._tx, obj_id, self._heads) - case core.ObjType.List: - return ListWriteProxy(self._tx, obj_id, self._heads) + if value == core.ObjType.Map: + return MapWriteProxy(self._tx, obj_id, self._heads) + elif value == core.ObjType.List: + return ListWriteProxy(self._tx, obj_id, self._heads) raise Exception("unknown ObjType") _, v = value return v