src: wv_dataclass: partnumberinfo supports comparisons
This commit is contained in:
parent
be17dedc61
commit
7b201eb320
@ -156,6 +156,9 @@ class PartNumberInfo:
|
|||||||
"spn": "SPN",
|
"spn": "SPN",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __bool__(self):
|
||||||
|
return bool(self.pn or self.manufacturer or self.mpn or self.supplier or self.spn)
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return hash((self.pn, self.manufacturer, self.mpn, self.supplier, self.spn))
|
return hash((self.pn, self.manufacturer, self.mpn, self.supplier, self.spn))
|
||||||
|
|
||||||
@ -217,21 +220,44 @@ class PartNumberInfo:
|
|||||||
spn=self.spn,
|
spn=self.spn,
|
||||||
)
|
)
|
||||||
|
|
||||||
def keep_only_eq(self, other):
|
def clear_per_field(self, op, other):
|
||||||
part = self.copy()
|
part = self.copy()
|
||||||
|
|
||||||
if other is None:
|
if other is None:
|
||||||
|
if op == '==':
|
||||||
|
return part
|
||||||
|
elif op == '!=':
|
||||||
return None
|
return None
|
||||||
|
else:
|
||||||
|
raise NotImplementedError(f'op {op} not supported')
|
||||||
|
|
||||||
if isinstance(other, list):
|
if isinstance(other, list):
|
||||||
for item in other:
|
for item in other:
|
||||||
part = part.keep_only_eq(item)
|
part = part.clear_per_field(op, item)
|
||||||
else:
|
else:
|
||||||
for k in ["pn", "manufacturer", "mpn", "supplier", "spn"]:
|
for k in ["pn", "manufacturer", "mpn", "supplier", "spn"]:
|
||||||
|
if op == '==':
|
||||||
|
if part[k] == other[k]:
|
||||||
|
part[k] = ""
|
||||||
|
elif op == '!=':
|
||||||
if part[k] != other[k]:
|
if part[k] != other[k]:
|
||||||
part[k] = ""
|
part[k] = ""
|
||||||
|
else:
|
||||||
|
raise NotImplementedError(f'op {op} not supported')
|
||||||
return part
|
return part
|
||||||
|
|
||||||
|
def keep_only_eq(self, other):
|
||||||
|
return self.clear_per_field('!=', other)
|
||||||
|
|
||||||
|
def remove_eq(self, other):
|
||||||
|
return self.clear_per_field('==', other)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def list_keep_only_eq(partnumbers):
|
||||||
|
pn = partnumbers[0]
|
||||||
|
for p in partnumbers:
|
||||||
|
pn = pn.keep_only_eq(p)
|
||||||
|
return pn
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class BomEntry:
|
class BomEntry:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user