import xml.etree.ElementTree as ElementTree from ee.kicad.bom import * def read_bom(path): def child_text(e, child_tag): child = e.find(child_tag) return child.text if child is not None else None def add_comp(b, comp): ref = comp.get("ref") value = child_text(comp, "value") footprint = child_text(comp, "footprint") libsource = comp.find("libsource") l, p = (None, None) if libsource is not None: lib = libsource.get("lib") part = libsource.get("part") if lib is not None and part is not None: l = b.find_library(lib) p = l.add_part(part) c = Comp(ref, value, l, p, footprint) fields = comp.find("fields") if fields is not None: for f in fields.findall("field"): key = f.get("name") value = f.text c.add_field(key, value) b.add_component(c) return c with open(path) as f: tree = ElementTree.parse(path) root = tree.getroot() b = Bom() comp = root.find("components").findall("comp") for c in comp: add_comp(b, c) return b