46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
# look it would be piss easy to just keep it as a CSV but we can post process to add cool things like cost to each of the parts
|
|
import csv
|
|
import sys
|
|
import chevron
|
|
import datetime
|
|
from pprint import pprint
|
|
|
|
file_path_delimter = "\\" if sys.platform == "win32" else "/"
|
|
|
|
def load_bom(filename : str) -> dict:
|
|
out_dict = {
|
|
"parts" : [],
|
|
"time" : str(datetime.datetime.now().time()),
|
|
"date" : str(datetime.datetime.now().date().strftime("%d-%m-%Y")),
|
|
"total_cost" : 0,
|
|
"total_parts" : 0,
|
|
"project_name" : filename.strip(".csv").strip("bom").split(file_path_delimter)[-1]
|
|
}
|
|
|
|
with open(filename, "r") as csv_file:
|
|
for row in csv.DictReader(csv_file):
|
|
part_cost = 0
|
|
out_dict["total_parts"] += 1
|
|
out_dict["parts"].append(
|
|
{
|
|
"Reference" : row["Refs"],
|
|
"Value" : row["Value"],
|
|
"Quantity" : row["Qty"],
|
|
"part_number" : row["Footprint"],
|
|
"cost" : part_cost, # add some API call somewhere here
|
|
}
|
|
)
|
|
return out_dict
|
|
|
|
def main():
|
|
report_hash = load_bom(sys.argv[1])
|
|
# pprint(report_hash)
|
|
with open(sys.argv[2], "r") as txt:
|
|
out = chevron.render(txt.read(), report_hash)
|
|
with open(sys.argv[3], "w") as md:
|
|
md.write(out)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |