'mfg_part_number', 'vendor', 'vendor_part_number', 'quantity')
value_pattern=r'([0-9]+)(\.[0-9]*)?([kmMupng]?)(F|H|Hz|V|screws)?([ _][0-9]+(\.[0-9]*))?'
+refdes_pattern=r'([a-zA-Z]+)([0-9]+)'
class Part():
"""
t = t + (i,)
return t
- # Compute a key value suitable for sorting
- def cmp_key(self, k):
+ # Compute a key value suitable for sorting CSV output files
+ def cmp_csv_key(self, k):
value = k[1]
m = re.fullmatch(value_pattern, value, flags=re.IGNORECASE)
if m:
n = 0
return (k[0], value, n, k[2])
+ # Compute a key value suitable for sorting tab output files
+ def cmp_tab_key(self, k):
+ part = self.get(k)
+ refdes = 'unknown'
+ if part is not None:
+ refdes = part.get_unknown('refdes')
+
+ mr = re.fullmatch(refdes_pattern, refdes)
+ if mr:
+ category = mr.group(1)
+ r = int(mr.group(2))
+ else:
+ category = "~"
+ r = refdes
+
+ value = k[1]
+ m = re.fullmatch(value_pattern, value, flags=re.IGNORECASE)
+ if m:
+ number = m.group(1)
+ if m.group(2):
+ number += m.group(2)
+ n = float(number)
+ scale = m.group(3)
+ if scale == 'G':
+ n *= 1000000000
+ elif scale == 'M':
+ n *= 1000000
+ elif scale == 'k':
+ n *= 1000
+ elif scale == 'm':
+ n /= 1000
+ elif scale == 'u' or scale == 'ยต':
+ n /= 1000000
+ elif scale == 'p':
+ n /= 1000000000
+ value = ""
+ else:
+ n = 0
+ return (category, r, k[0], value, n, k[2])
+
# Export to a CSV file object
def export_csv_file(self, outfile):
csvwriter = csv.writer(outfile, dialect='excel-nl')
attrs = self.attrs_tuple(pref_order_csv)
csvwriter.writerow(attrs)
- keys = sorted(list(self.parts), key=self.cmp_key)
+ keys = sorted(list(self.parts), key=self.cmp_csv_key)
for key in keys:
part = self.get(key)
csvwriter.writerow(tuple(map(part.get_unknown, attrs)))
def export_tab_file(self, outfile):
attrs = self.attrs_tuple(pref_order_tab)
print("\t".join(attrs), file=outfile)
- keys = sorted(list(self.parts), key=self.cmp_key)
+ keys = sorted(list(self.parts), key=self.cmp_tab_key)
for key in keys:
part = self.get(key)
print("\t".join(tuple(map(part.get_unknown, attrs))), file=outfile)