Skip to content

Commit cd6a1cd

Browse files
author
Hareem Adderley
committed
refactor: enhance OrderedSet to support IndefiniteList for improved serialization
1 parent cde7bfe commit cd6a1cd

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

pycardano/serialization.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,12 +1128,18 @@ def list_hook(
11281128
return lambda vals: [cls.from_primitive(v) for v in vals]
11291129

11301130

1131-
class OrderedSet(list, Generic[T], CBORSerializable):
1132-
def __init__(self, iterable: Optional[List[T]] = None, use_tag: bool = True):
1131+
class OrderedSet(list, IndefiniteList, Generic[T], CBORSerializable): # type: ignore
1132+
def __init__(
1133+
self,
1134+
iterable: Optional[Union[List[T], IndefiniteList]] = None,
1135+
use_tag: bool = True,
1136+
):
11331137
super().__init__()
11341138
self._set: Set[str] = set()
11351139
self._use_tag = use_tag
1140+
self._is_indefinite_list = False
11361141
if iterable:
1142+
self._is_indefinite_list = isinstance(iterable, IndefiniteList)
11371143
self.extend(iterable)
11381144

11391145
def append(self, item: T) -> None:
@@ -1143,6 +1149,7 @@ def append(self, item: T) -> None:
11431149
self._set.add(item_key)
11441150

11451151
def extend(self, items: Iterable[T]) -> None:
1152+
self._is_indefinite_list = isinstance(items, IndefiniteList)
11461153
for item in items:
11471154
self.append(item)
11481155

@@ -1159,10 +1166,13 @@ def __eq__(self, other: object) -> bool:
11591166
def __repr__(self) -> str:
11601167
return f"{self.__class__.__name__}({list(self)})"
11611168

1162-
def to_shallow_primitive(self) -> Union[CBORTag, List[T]]:
1169+
def to_shallow_primitive(self) -> Union[CBORTag, Union[List[T], IndefiniteList]]:
11631170
if self._use_tag:
1164-
return CBORTag(258, list(self))
1165-
return list(self)
1171+
return CBORTag(
1172+
258,
1173+
IndefiniteList(list(self)) if self._is_indefinite_list else list(self),
1174+
)
1175+
return IndefiniteList(list(self)) if self._is_indefinite_list else list(self)
11661176

11671177
@classmethod
11681178
def from_primitive(
@@ -1195,7 +1205,11 @@ def __deepcopy__(self, memo):
11951205

11961206

11971207
class NonEmptyOrderedSet(OrderedSet[T]):
1198-
def __init__(self, iterable: Optional[List[T]] = None, use_tag: bool = True):
1208+
def __init__(
1209+
self,
1210+
iterable: Optional[Union[List[T], IndefiniteList]] = None,
1211+
use_tag: bool = True,
1212+
):
11991213
super().__init__(iterable, use_tag)
12001214

12011215
def validate(self):

0 commit comments

Comments
 (0)