Source code for sr.tools.bom.schem

"""Routines for extracting information from schematics."""
import re

from sr.tools.bom import geda, parts_db


GSCHEM = 1
UNKNOWN = 2


[docs]def schem_type(fname): """ Get the type of file. :returns: ``GSCHEM`` or ``UNKNOWN`` """ return GSCHEM
[docs]def open_schem(fname): """ Open a schematics file. :returns: The parsed schematic as an object. :raises ValueError: If the file is not a gschem file. """ s = schem_type(fname) if s == GSCHEM: schem = geda.GSchem(fname) else: raise ValueError("We don't yet support exporting BOMs from " "gschem things.") # New items to add to the schematic new_items = {} # Items to remove from the schematic rem_keys = [] # Expand all assemblies into their component parts: for des, srcode in schem.items(): num = 1 if srcode[0:len("sr-asm-")] == "sr-asm-": # TODO: Don't parse the Db again! db = parts_db.get_db() desc = db[srcode]["description"] for s in desc.split(): if s == "+": continue r = re.compile("([0-9]+)\(([^)]+)\)") m = r.match(s) if m: quantity = int(m.group(1)) code = m.group(2) for x in range(quantity): newdes = "%s.%i" % (des, num) new_items[newdes] = code num = num + 1 rem_keys.append(des) schem.update(new_items) for des in rem_keys: schem.pop(des) return schem