aboutsummaryrefslogtreecommitdiff
path: root/src/ee/kicad/to_bom.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ee/kicad/to_bom.py')
-rw-r--r--src/ee/kicad/to_bom.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/ee/kicad/to_bom.py b/src/ee/kicad/to_bom.py
new file mode 100644
index 0000000..ca2221e
--- /dev/null
+++ b/src/ee/kicad/to_bom.py
@@ -0,0 +1,47 @@
+from xml.etree.ElementTree import Element, ElementTree
+from ee.kicad.model import *
+
+__all__ = ["to_bom"]
+
+def simple_element(parent, e, text):
+ if len(text) == 0:
+ return
+ element = Element(e)
+ element.text = text
+ parent.append(element)
+
+
+def field(f: ComponentField) -> Element:
+ field = Element("field", {"name": f.name})
+ field.text = f.value
+ return field
+
+
+def comp(c: Component) -> Element:
+ comp = Element("comp", {"ref": c.ref})
+
+ simple_element(comp, "value", c.value)
+ simple_element(comp, "footprint", c.footprint)
+ # <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
+ # <sheetpath names="/" tstamps="/"/>
+ # <tstamp>561E4EAA</tstamp>
+ fields = Element("fields")
+ [fields.append(field(f)) for f in c.fields if f.index > 3]
+ if len(fields) > 0:
+ comp.append(fields)
+
+ return comp
+
+
+def to_bom(schematic: Schematic) -> Element:
+ root = Element("export")
+ root.attrib["version"] = "D"
+ design = Element("design")
+ root.append(design)
+
+ components = Element("components")
+ root.append(components)
+ [components.append(comp(c)) for c in schematic.components]
+
+
+ return root