diff --git a/bin/process_BOM.py b/bin/process_BOM.py index cb3c685..775cea7 100644 --- a/bin/process_BOM.py +++ b/bin/process_BOM.py @@ -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!") diff --git a/bin/process_board.py b/bin/process_board.py index d44cd00..2a0df4d 100644 --- a/bin/process_board.py +++ b/bin/process_board.py @@ -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)