mirror of https://github.com/rusefi/hellen-one.git
Move BOM replacements to a separate csv file https://github.com/rusefi/hellen121vag/issues/7
This commit is contained in:
parent
b4e5c36d2e
commit
045b380244
|
@ -8,21 +8,21 @@ from collections import OrderedDict
|
|||
import csv, sys, re
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print "Error! Please specify a BOM file name."
|
||||
print ("Error! Please specify a BOM file name.")
|
||||
sys.exit(1)
|
||||
fileName = sys.argv[1]
|
||||
|
||||
if len(sys.argv) > 2:
|
||||
repl = sys.argv[2]
|
||||
repl_csv = sys.argv[2]
|
||||
|
||||
print "Opening BOM file " + fileName + "..."
|
||||
print ("Opening BOM file " + fileName + "...")
|
||||
|
||||
rows = OrderedDict()
|
||||
emptyId = 1
|
||||
|
||||
with open(fileName, 'rb') as f:
|
||||
reader = csv.reader(f, delimiter=',')
|
||||
print "Searching for duplicates..."
|
||||
print ("Searching for duplicates...")
|
||||
for row in reader:
|
||||
rowName = row[3]
|
||||
# all empty names should be saved separately
|
||||
|
@ -34,45 +34,53 @@ with open(fileName, 'rb') as f:
|
|||
if rowName in rows:
|
||||
oldRow = rows[rowName]
|
||||
if oldRow[0] != row[0]:
|
||||
print "* Error! Comment mismatch for the part #" + rowName + ": " + oldRow[0] + " != " + row[0]
|
||||
print ("* Error! Comment mismatch for the part #" + rowName + ": " + oldRow[0] + " != " + row[0])
|
||||
sys.exit(2)
|
||||
if oldRow[2] != row[2]:
|
||||
print "* Warning! Footprint mismatch for the part #" + rowName + ": " + oldRow[2] + " != " + row[2]
|
||||
print ("* Warning! Footprint mismatch for the part #" + rowName + ": " + oldRow[2] + " != " + row[2])
|
||||
#sys.exit(3)
|
||||
print "* Duplicates found for " + rowName + " (" + row[0] + ")! Merging..."
|
||||
print ("* Duplicates found for " + rowName + " (" + row[0] + ")! Merging...")
|
||||
row[1] = oldRow[1] + row[1]
|
||||
rows[rowName] = row
|
||||
#for idx,item in enumerate(row):
|
||||
# print idx , ": ", item
|
||||
|
||||
print "Processing the board replacements..."
|
||||
replList = repl.split(";")
|
||||
replList = list()
|
||||
print ("Reading replacement list from the CSV file " + repl_csv + "...")
|
||||
with open(repl_csv, 'rb') as f:
|
||||
reader = csv.reader(f, delimiter=',')
|
||||
for row in reader:
|
||||
# skip empty lines and comments (this is not strictly CSV-compliant, but useful for our purposes)
|
||||
if (len(row) < 1 or row[0].startswith("#")):
|
||||
continue
|
||||
replList.append(row)
|
||||
|
||||
print ("Processing the board replacements...")
|
||||
for r in replList:
|
||||
rel = re.search("(\w+)=([\w\-]+)?,?([\w\-]+)?,?(\w+)?", r)
|
||||
if not rel:
|
||||
continue
|
||||
reDesignator = rel.group(1)
|
||||
reComment = rel.group(2)
|
||||
reFootprint = rel.group(3)
|
||||
rePartNumber = rel.group(4)
|
||||
reDesignator = r[0]
|
||||
for rowName in rows:
|
||||
row = rows[rowName]
|
||||
if reDesignator in row[1]:
|
||||
print "* Removing " + reDesignator + " from the old row..."
|
||||
print ("* Removing " + reDesignator + " from the old row...")
|
||||
row[1].remove(reDesignator)
|
||||
if not row[1]:
|
||||
print "* Deleting an empty row..."
|
||||
print ("* Deleting an empty row...")
|
||||
del rows[rowName]
|
||||
if len(r) < 4:
|
||||
continue
|
||||
reComment = r[1]
|
||||
reFootprint = r[2]
|
||||
rePartNumber = r[3]
|
||||
# find the matching row by partnumber (if set)
|
||||
if rePartNumber:
|
||||
if rePartNumber in rows:
|
||||
print "* Adding " + reDesignator + " to another existing row..."
|
||||
print ("* Adding " + reDesignator + " to another existing row...")
|
||||
rows[rePartNumber][1] += [reDesignator]
|
||||
else:
|
||||
print "* Appending a new row for " + reDesignator + "..."
|
||||
print ("* Appending a new row for " + reDesignator + "...")
|
||||
rows[rePartNumber] = [reComment, [reDesignator], reFootprint, rePartNumber]
|
||||
|
||||
print "Saving..."
|
||||
print ("Saving...")
|
||||
with open (fileName, 'wb') as new_f:
|
||||
rowIdx = 0
|
||||
for rowName in rows:
|
||||
|
@ -90,4 +98,4 @@ with open (fileName, 'wb') as new_f:
|
|||
row[1] = ", ".join(row[1])
|
||||
writer.writerow(row)
|
||||
rowIdx += 1
|
||||
print "Done!"
|
||||
print ("Done!")
|
||||
|
|
|
@ -11,16 +11,17 @@ import csv, re
|
|||
import subprocess
|
||||
|
||||
if len(sys.argv) < 4:
|
||||
print ("Error! Please specify the project base name, frame name, revision and optional BOM replacement list.")
|
||||
print ("Error! Please specify the project base name, frame name, revision and optional BOM replacement file.")
|
||||
sys.exit(1)
|
||||
|
||||
project_base = sys.argv[1]
|
||||
project_base_path = sys.argv[1]
|
||||
frame_name = sys.argv[2]
|
||||
frame_rev = sys.argv[3]
|
||||
|
||||
if len(sys.argv) > 3:
|
||||
bom_replace = sys.argv[4]
|
||||
bom_replace_csv = sys.argv[4]
|
||||
else:
|
||||
bom_replace = ""
|
||||
bom_replace_csv = ""
|
||||
|
||||
board_prefix = "hellen"
|
||||
|
||||
|
@ -29,7 +30,8 @@ imageDpi = "600"
|
|||
# these should match the definitions in the parent shell script (create_board.sh)!
|
||||
project_name = board_prefix + frame_name
|
||||
board_name = project_name + "-" + frame_rev
|
||||
project_path = project_base + "/" + project_name + "/boards/" + board_name
|
||||
project_path = project_base_path + "/boards/" + board_name
|
||||
bom_replace_csv_path = project_base_path + "/" + bom_replace_csv
|
||||
frame_path = project_path + "/frame"
|
||||
board_path = project_path + "/board"
|
||||
board_path_name = board_path + "/" + board_name
|
||||
|
@ -297,9 +299,10 @@ p.communicate(input='y\n')[0]
|
|||
|
||||
print ("Post-processing BOM...")
|
||||
try:
|
||||
subprocess.check_output([sys.executable, "bin/process_BOM.py",
|
||||
out = subprocess.check_output([sys.executable, "bin/process_BOM.py",
|
||||
board_bom,
|
||||
bom_replace])
|
||||
bom_replace_csv_path], stderr=subprocess.STDOUT)
|
||||
print (out)
|
||||
except subprocess.CalledProcessError, e:
|
||||
print ("BOM processing error:\n" + e.output)
|
||||
sys.exit(2)
|
||||
|
|
Loading…
Reference in New Issue