diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2017-09-15 18:30:42 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2017-09-15 18:30:42 +0200 |
commit | fcb613a618e4dbb6e06dc1e4910337fbc52e3467 (patch) | |
tree | 3f3a35a476a426a103cbc1c473004ab4862c3dca /src/ee/kicad/model.py | |
parent | 86cf3fcb5eec2c148d60f53cf88b2ca6c3c96552 (diff) | |
download | ee-python-fcb613a618e4dbb6e06dc1e4910337fbc52e3467.tar.gz ee-python-fcb613a618e4dbb6e06dc1e4910337fbc52e3467.tar.bz2 ee-python-fcb613a618e4dbb6e06dc1e4910337fbc52e3467.tar.xz ee-python-fcb613a618e4dbb6e06dc1e4910337fbc52e3467.zip |
o Make ee.kicad.Component implement @total_ordering.
o Adding ref_type and ref_num that is a split of ref.
o Ignore #PWR components when exporting BOM.
Diffstat (limited to 'src/ee/kicad/model.py')
-rw-r--r-- | src/ee/kicad/model.py | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/src/ee/kicad/model.py b/src/ee/kicad/model.py index f44868b..7baa4a0 100644 --- a/src/ee/kicad/model.py +++ b/src/ee/kicad/model.py @@ -1,5 +1,8 @@ +import re from typing import List +from functools import total_ordering + class Position(object): def __init__(self, x, y): @@ -8,11 +11,11 @@ class Position(object): @property def x(self): - return _x + return self._x @property def y(self): - return _y + return self._y class ComponentField(object): @@ -41,6 +44,7 @@ class ComponentField(object): return self._position +@total_ordering class Component(object): def __init__(self, position, timestamp, library, name, unit, ref, fields): self._position = position @@ -51,6 +55,25 @@ class Component(object): self._ref = ref self._fields = fields # type List[ComponentField] + def __eq__(self, o: object) -> bool: + other = o # type Component + return isinstance(o, Component) and self.ref == other.ref + + def __lt__(self, o: object) -> bool: + if not isinstance(o, Component): + return True + + other = o # type Component + + if self.has_ref_num and other.has_ref_num: + return (self.ref_type, self.ref_num) < (other.ref_type, other.ref_num) + else: + # raise Exception("fail, ref={}".format(self.ref)) + return self.ref < other.ref + + def __hash__(self) -> int: + return self._ref.__hash__() + @property def unit(self): return self._unit @@ -60,6 +83,20 @@ class Component(object): return self._ref @property + def has_ref_num(self): + return not self._ref.endswith("?") + + @property + def ref_type(self) -> str: + r = re.compile("([^0-9]+)(.+)") + return r.split(self._ref)[1] + + @property + def ref_num(self) -> int: + r = re.compile("([^0-9]+)(.+)") + return int(r.split(self._ref)[2]) + + @property def value(self): return self._fields[1].value @@ -113,7 +150,7 @@ class Schematic(object): # Getters @property - def components(self): + def components(self) -> List[Component]: a = [] for s in self._sheets: for c in s.components: |