|
33 | 33 | from warnings import warn
|
34 | 34 | from xml.etree.ElementTree import Element as XmlElement # nosec B405
|
35 | 35 |
|
36 |
| -import serializable |
| 36 | +import py_serializable as serializable |
37 | 37 | from sortedcontainers import SortedSet
|
38 | 38 |
|
39 | 39 | from .._internal.compare import ComparableTuple as _ComparableTuple
|
@@ -128,22 +128,23 @@ def classification(self) -> str:
|
128 | 128 | def classification(self, classification: str) -> None:
|
129 | 129 | self._classification = classification
|
130 | 130 |
|
| 131 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 132 | + return _ComparableTuple(( |
| 133 | + self.flow, self.classification |
| 134 | + )) |
| 135 | + |
131 | 136 | def __eq__(self, other: object) -> bool:
|
132 | 137 | if isinstance(other, DataClassification):
|
133 |
| - return hash(other) == hash(self) |
| 138 | + return self.__comparable_tuple() == other.__comparable_tuple() |
134 | 139 | return False
|
135 | 140 |
|
136 | 141 | def __lt__(self, other: object) -> bool:
|
137 | 142 | if isinstance(other, DataClassification):
|
138 |
| - return _ComparableTuple(( |
139 |
| - self.flow, self.classification |
140 |
| - )) < _ComparableTuple(( |
141 |
| - other.flow, other.classification |
142 |
| - )) |
| 143 | + return self.__comparable_tuple() < other.__comparable_tuple() |
143 | 144 | return NotImplemented
|
144 | 145 |
|
145 | 146 | def __hash__(self) -> int:
|
146 |
| - return hash((self.flow, self.classification)) |
| 147 | + return hash(self.__comparable_tuple()) |
147 | 148 |
|
148 | 149 | def __repr__(self) -> str:
|
149 | 150 | return f'<DataClassification flow={self.flow}>'
|
@@ -231,22 +232,23 @@ def content(self) -> str:
|
231 | 232 | def content(self, content: str) -> None:
|
232 | 233 | self._content = content
|
233 | 234 |
|
| 235 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 236 | + return _ComparableTuple(( |
| 237 | + self.content_type, self.encoding, self.content, |
| 238 | + )) |
| 239 | + |
234 | 240 | def __eq__(self, other: object) -> bool:
|
235 | 241 | if isinstance(other, AttachedText):
|
236 |
| - return hash(other) == hash(self) |
| 242 | + return self.__comparable_tuple() == other.__comparable_tuple() |
237 | 243 | return False
|
238 | 244 |
|
239 | 245 | def __lt__(self, other: Any) -> bool:
|
240 | 246 | if isinstance(other, AttachedText):
|
241 |
| - return _ComparableTuple(( |
242 |
| - self.content_type, self.content, self.encoding |
243 |
| - )) < _ComparableTuple(( |
244 |
| - other.content_type, other.content, other.encoding |
245 |
| - )) |
| 247 | + return self.__comparable_tuple() < other.__comparable_tuple() |
246 | 248 | return NotImplemented
|
247 | 249 |
|
248 | 250 | def __hash__(self) -> int:
|
249 |
| - return hash((self.content, self.content_type, self.encoding)) |
| 251 | + return hash(self.__comparable_tuple()) |
250 | 252 |
|
251 | 253 | def __repr__(self) -> str:
|
252 | 254 | return f'<AttachedText content-type={self.content_type}, encoding={self.encoding}>'
|
@@ -510,22 +512,23 @@ def content(self) -> str:
|
510 | 512 | def content(self, content: str) -> None:
|
511 | 513 | self._content = content
|
512 | 514 |
|
| 515 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 516 | + return _ComparableTuple(( |
| 517 | + self.alg, self.content |
| 518 | + )) |
| 519 | + |
513 | 520 | def __eq__(self, other: object) -> bool:
|
514 | 521 | if isinstance(other, HashType):
|
515 |
| - return hash(other) == hash(self) |
| 522 | + return self.__comparable_tuple() == other.__comparable_tuple() |
516 | 523 | return False
|
517 | 524 |
|
518 | 525 | def __lt__(self, other: Any) -> bool:
|
519 | 526 | if isinstance(other, HashType):
|
520 |
| - return _ComparableTuple(( |
521 |
| - self.alg, self.content |
522 |
| - )) < _ComparableTuple(( |
523 |
| - other.alg, other.content |
524 |
| - )) |
| 527 | + return self.__comparable_tuple() < other.__comparable_tuple() |
525 | 528 | return NotImplemented
|
526 | 529 |
|
527 | 530 | def __hash__(self) -> int:
|
528 |
| - return hash((self.alg, self.content)) |
| 531 | + return hash(self.__comparable_tuple()) |
529 | 532 |
|
530 | 533 | def __repr__(self) -> str:
|
531 | 534 | return f'<HashType {self.alg.name}:{self.content}>'
|
@@ -728,7 +731,7 @@ def __init__(self, uri: str) -> None:
|
728 | 731 |
|
729 | 732 | def __eq__(self, other: Any) -> bool:
|
730 | 733 | if isinstance(other, XsUri):
|
731 |
| - return hash(other) == hash(self) |
| 734 | + return self._uri == other._uri |
732 | 735 | return False
|
733 | 736 |
|
734 | 737 | def __lt__(self, other: Any) -> bool:
|
@@ -887,25 +890,24 @@ def hashes(self) -> 'SortedSet[HashType]':
|
887 | 890 | def hashes(self, hashes: Iterable[HashType]) -> None:
|
888 | 891 | self._hashes = SortedSet(hashes)
|
889 | 892 |
|
| 893 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 894 | + return _ComparableTuple(( |
| 895 | + self._type, self._url, self._comment, |
| 896 | + _ComparableTuple(self._hashes) |
| 897 | + )) |
| 898 | + |
890 | 899 | def __eq__(self, other: object) -> bool:
|
891 | 900 | if isinstance(other, ExternalReference):
|
892 |
| - return hash(other) == hash(self) |
| 901 | + return self.__comparable_tuple() == other.__comparable_tuple() |
893 | 902 | return False
|
894 | 903 |
|
895 | 904 | def __lt__(self, other: Any) -> bool:
|
896 | 905 | if isinstance(other, ExternalReference):
|
897 |
| - return _ComparableTuple(( |
898 |
| - self._type, self._url, self._comment |
899 |
| - )) < _ComparableTuple(( |
900 |
| - other._type, other._url, other._comment |
901 |
| - )) |
| 906 | + return self.__comparable_tuple() < other.__comparable_tuple() |
902 | 907 | return NotImplemented
|
903 | 908 |
|
904 | 909 | def __hash__(self) -> int:
|
905 |
| - return hash(( |
906 |
| - self._type, self._url, self._comment, |
907 |
| - tuple(sorted(self._hashes, key=hash)) |
908 |
| - )) |
| 910 | + return hash(self.__comparable_tuple()) |
909 | 911 |
|
910 | 912 | def __repr__(self) -> str:
|
911 | 913 | return f'<ExternalReference {self.type.name}, {self.url}>'
|
@@ -964,22 +966,23 @@ def value(self) -> Optional[str]:
|
964 | 966 | def value(self, value: Optional[str]) -> None:
|
965 | 967 | self._value = value
|
966 | 968 |
|
| 969 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 970 | + return _ComparableTuple(( |
| 971 | + self.name, self.value |
| 972 | + )) |
| 973 | + |
967 | 974 | def __eq__(self, other: object) -> bool:
|
968 | 975 | if isinstance(other, Property):
|
969 |
| - return hash(other) == hash(self) |
| 976 | + return self.__comparable_tuple() == other.__comparable_tuple() |
970 | 977 | return False
|
971 | 978 |
|
972 | 979 | def __lt__(self, other: Any) -> bool:
|
973 | 980 | if isinstance(other, Property):
|
974 |
| - return _ComparableTuple(( |
975 |
| - self.name, self.value |
976 |
| - )) < _ComparableTuple(( |
977 |
| - other.name, other.value |
978 |
| - )) |
| 981 | + return self.__comparable_tuple() < other.__comparable_tuple() |
979 | 982 | return NotImplemented
|
980 | 983 |
|
981 | 984 | def __hash__(self) -> int:
|
982 |
| - return hash((self.name, self.value)) |
| 985 | + return hash(self.__comparable_tuple()) |
983 | 986 |
|
984 | 987 | def __repr__(self) -> str:
|
985 | 988 | return f'<Property name={self.name}>'
|
@@ -1055,22 +1058,23 @@ def encoding(self) -> Optional[Encoding]:
|
1055 | 1058 | def encoding(self, encoding: Optional[Encoding]) -> None:
|
1056 | 1059 | self._encoding = encoding
|
1057 | 1060 |
|
| 1061 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 1062 | + return _ComparableTuple(( |
| 1063 | + self.content, self.content_type, self.encoding |
| 1064 | + )) |
| 1065 | + |
1058 | 1066 | def __eq__(self, other: object) -> bool:
|
1059 | 1067 | if isinstance(other, NoteText):
|
1060 |
| - return hash(other) == hash(self) |
| 1068 | + return self.__comparable_tuple() == other.__comparable_tuple() |
1061 | 1069 | return False
|
1062 | 1070 |
|
1063 | 1071 | def __lt__(self, other: Any) -> bool:
|
1064 | 1072 | if isinstance(other, NoteText):
|
1065 |
| - return _ComparableTuple(( |
1066 |
| - self.content, self.content_type, self.encoding |
1067 |
| - )) < _ComparableTuple(( |
1068 |
| - other.content, other.content_type, other.encoding |
1069 |
| - )) |
| 1073 | + return self.__comparable_tuple() < other.__comparable_tuple() |
1070 | 1074 | return NotImplemented
|
1071 | 1075 |
|
1072 | 1076 | def __hash__(self) -> int:
|
1073 |
| - return hash((self.content, self.content_type, self.encoding)) |
| 1077 | + return hash(self.__comparable_tuple()) |
1074 | 1078 |
|
1075 | 1079 | def __repr__(self) -> str:
|
1076 | 1080 | return f'<NoteText content_type={self.content_type}, encoding={self.encoding}>'
|
@@ -1139,22 +1143,23 @@ def locale(self, locale: Optional[str]) -> None:
|
1139 | 1143 | " ISO-3166 (or higher) country code. according to ISO-639 format. Examples include: 'en', 'en-US'."
|
1140 | 1144 | )
|
1141 | 1145 |
|
| 1146 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 1147 | + return _ComparableTuple(( |
| 1148 | + self.locale, self.text |
| 1149 | + )) |
| 1150 | + |
1142 | 1151 | def __eq__(self, other: object) -> bool:
|
1143 | 1152 | if isinstance(other, Note):
|
1144 |
| - return hash(other) == hash(self) |
| 1153 | + return self.__comparable_tuple() == other.__comparable_tuple() |
1145 | 1154 | return False
|
1146 | 1155 |
|
1147 | 1156 | def __lt__(self, other: Any) -> bool:
|
1148 | 1157 | if isinstance(other, Note):
|
1149 |
| - return _ComparableTuple(( |
1150 |
| - self.locale, self.text |
1151 |
| - )) < _ComparableTuple(( |
1152 |
| - other.locale, other.text |
1153 |
| - )) |
| 1158 | + return self.__comparable_tuple() < other.__comparable_tuple() |
1154 | 1159 | return NotImplemented
|
1155 | 1160 |
|
1156 | 1161 | def __hash__(self) -> int:
|
1157 |
| - return hash((self.text, self.locale)) |
| 1162 | + return hash(self.__comparable_tuple()) |
1158 | 1163 |
|
1159 | 1164 | def __repr__(self) -> str:
|
1160 | 1165 | return f'<Note id={id(self)}, locale={self.locale}>'
|
@@ -1224,22 +1229,23 @@ def email(self) -> Optional[str]:
|
1224 | 1229 | def email(self, email: Optional[str]) -> None:
|
1225 | 1230 | self._email = email
|
1226 | 1231 |
|
| 1232 | + def __comparable_tuple(self) -> _ComparableTuple: |
| 1233 | + return _ComparableTuple(( |
| 1234 | + self.timestamp, self.name, self.email |
| 1235 | + )) |
| 1236 | + |
1227 | 1237 | def __eq__(self, other: object) -> bool:
|
1228 | 1238 | if isinstance(other, IdentifiableAction):
|
1229 |
| - return hash(other) == hash(self) |
| 1239 | + return self.__comparable_tuple() == other.__comparable_tuple() |
1230 | 1240 | return False
|
1231 | 1241 |
|
1232 | 1242 | def __lt__(self, other: Any) -> bool:
|
1233 | 1243 | if isinstance(other, IdentifiableAction):
|
1234 |
| - return _ComparableTuple(( |
1235 |
| - self.timestamp, self.name, self.email |
1236 |
| - )) < _ComparableTuple(( |
1237 |
| - other.timestamp, other.name, other.email |
1238 |
| - )) |
| 1244 | + return self.__comparable_tuple() < other.__comparable_tuple() |
1239 | 1245 | return NotImplemented
|
1240 | 1246 |
|
1241 | 1247 | def __hash__(self) -> int:
|
1242 |
| - return hash((self.timestamp, self.name, self.email)) |
| 1248 | + return hash(self.__comparable_tuple()) |
1243 | 1249 |
|
1244 | 1250 | def __repr__(self) -> str:
|
1245 | 1251 | return f'<IdentifiableAction name={self.name}, email={self.email}>'
|
@@ -1277,16 +1283,16 @@ def text(self, text: str) -> None:
|
1277 | 1283 |
|
1278 | 1284 | def __eq__(self, other: object) -> bool:
|
1279 | 1285 | if isinstance(other, Copyright):
|
1280 |
| - return hash(other) == hash(self) |
| 1286 | + return self._text == other._text |
1281 | 1287 | return False
|
1282 | 1288 |
|
1283 | 1289 | def __lt__(self, other: Any) -> bool:
|
1284 | 1290 | if isinstance(other, Copyright):
|
1285 |
| - return self.text < other.text |
| 1291 | + return self._text < other._text |
1286 | 1292 | return NotImplemented
|
1287 | 1293 |
|
1288 | 1294 | def __hash__(self) -> int:
|
1289 |
| - return hash(self.text) |
| 1295 | + return hash(self._text) |
1290 | 1296 |
|
1291 | 1297 | def __repr__(self) -> str:
|
1292 | 1298 | return f'<Copyright text={self.text}>'
|
0 commit comments