KiBot/KiBOM/bom_writer.py

75 lines
2.1 KiB
Python

from csv_writer import WriteCSV
from xml_writer import WriteXML
from html_writer import WriteHTML
import columns
from component import *
from xml.etree import ElementTree
from preferences import BomPref
import os, shutil
#make a tmp copy of a given file
def TmpFileCopy(filename):
filename = os.path.abspath(filename)
if os.path.exists(filename) and os.path.isfile(filename):
shutil.copyfile(filename, filename + ".tmp")
"""
Write BoM to file
filename = output file path
groups = [list of ComponentGroup groups]
headings = [list of headings to display in the BoM file]
prefs = BomPref object
"""
def WriteBoM(filename, groups, net, headings = columns.ColumnList._COLUMNS_DEFAULT, prefs=None):
filename = os.path.abspath(filename)
#no preferences supplied, use defaults
if not prefs:
prefs = BomPref()
#remove any headings that appear in the ignore[] list
headings = [h for h in headings if not h.lower() in [i.lower() for i in prefs.ignore]]
#make a temporary copy of the output file
TmpFileCopy(filename)
#if no extension is given, assume .csv (and append!)
if len(filename.split('.')) < 2:
filename += ".csv"
ext = filename.split('.')[-1].lower()
result = False
#CSV file writing
if ext in ["csv","csv","txt"]:
if WriteCSV(filename, groups, net, headings, prefs):
print("CSV Output -> {fn}".format(fn=filename))
result = True
else:
print("Error writing CSV output")
elif ext in ["htm","html"]:
if WriteHTML(filename, groups, net, headings, prefs):
print("HTML Output -> {fn}".format(fn=filename))
result = True
else:
print("Error writing HTML output")
elif ext in ["xml"]:
if WriteXML(filename, groups, net, headings, prefs):
print("XML Output -> {fn}".format(fn=filename))
result = True
else:
print("Error writing XML output")
else:
print("Unsupported file extension: {ext}".format(ext=ext))
return result