Source code for tendril.conventions.motifs.base

# Copyright (C) 2015 Chintalagiri Shashank
#
# This file is part of Tendril.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
Base Primitives for Motifs
--------------------------
"""

from tendril.conventions.series import get_series


[docs]class MotifBase(object): columns = ['refdes', 'device', 'value', 'footprint', 'fillstatus', 'group', 'package', 'status'] def __init__(self, identifier): self._type = None self._ident = None self._elements = [] self.refdes = identifier self._configdict = None @property def refdes(self): return self._type + '.' + self._ident @refdes.setter def refdes(self, value): value = value.split(':')[0] self._type, self._ident = value.split('.') @property def desc(self): return self._configdict.get('desc', '') # Elements
[docs] def add_element(self, bomline): self._elements.append(bomline)
@property def elements(self): return sorted(self._elements, key=lambda x: x.motif)
[docs] def get_elem_by_idx(self, idx): for elem in self._elements: if elem.data['motif'].split(':')[1] == idx: return elem raise KeyError(self.refdes, idx)
[docs] def _line_generator(self): for elem in self._elements: yield elem
[docs] def get_line_gen(self): return self._line_generator()
# Configuration @property def configdict_base(self): raise NotImplementedError
[docs] def get_configdict_stub(self): stub = {} for parameter in self.configdict_base: stub[parameter[0]] = parameter[1] return stub
[docs] def configure(self, configdict): self._configdict = configdict
# Input Parameters @property def inputs(self): inputs = [] for parameter in self.configdict_base: if parameter[0] is not 'desc': inputs.append(( parameter[0], parameter[3](self._configdict[parameter[0]]), parameter[2] )) return inputs # Show your work Parameters @property def parameters_base(self): raise NotImplementedError @property def parameters(self): parameters = [] for group in self.parameters_base: parameters.append(([ (e[1], e[0], e[2], self.__getattribute__(e[0])) for e in group[0] ], group[1])) return parameters # Target Parameter Listing @property def listing(self): raise NotImplementedError # Component Series Control
[docs] def _get_component_series(self, idx, stype): if stype == 'capacitor': sstr = 'Cseries' smin = 'Cmin' smax = 'Cmax' elif stype == 'resistor': sstr = 'Rseries' smin = 'Rmin' smax = 'Rmax' else: raise NotImplementedError dev = self.get_elem_by_idx(idx).data['device'] fp = self.get_elem_by_idx(idx).data['footprint'] if fp[0:3] == "MY-": fp = fp[3:] return get_series(self._configdict[sstr], stype, start=self._configdict[smin], end=self._configdict[smax], device=dev, footprint=fp)
[docs] def _set_component(self, idx, target, series): value = series.get_closest_value(target) if not value: raise ValueError try: svalue = series.get_symbol(value).value except AttributeError: svalue = series.get_symbol(value) self.get_elem_by_idx(idx).data['value'] = svalue # noqa return series.get_type_value(svalue)
[docs] def validate(self): raise NotImplementedError
def __repr__(self): return "<{0} {1}>".format(self.__class__.__name__, self._ident)
[docs]def load(module): pass