library: add function to link structure references
This commit is contained in:
parent
73af3adb34
commit
06bc11fb17
@ -1,4 +1,6 @@
|
||||
from datetime import datetime
|
||||
from .elements import SRef
|
||||
from .reader import ProgressGetter
|
||||
|
||||
class Library(object):
|
||||
version = 0
|
||||
@ -12,3 +14,45 @@ class Library(object):
|
||||
meters_per_unit = 1
|
||||
|
||||
structures = {}
|
||||
|
||||
class LinkError(Exception):
|
||||
element = None
|
||||
pass
|
||||
|
||||
def link_srefs(self, progress_callback=None):
|
||||
class Progress(ProgressGetter):
|
||||
total = 0
|
||||
current = 0
|
||||
|
||||
def __init__(self, lib):
|
||||
for key, value in lib.structures.items():
|
||||
self.total += len(value.references)
|
||||
|
||||
def progress(self):
|
||||
return float(self.current) / self.total
|
||||
|
||||
def inc(self):
|
||||
self.current += 1
|
||||
|
||||
count = Progress(self)
|
||||
|
||||
for key, value in self.structures.items():
|
||||
|
||||
for element in value.references:
|
||||
if isinstance(element, SRef) and isinstance(element.structure, str):
|
||||
# try to resolve link
|
||||
try:
|
||||
ref = self.structures[element.structure]
|
||||
element.structure = ref
|
||||
except KeyError:
|
||||
err = LinkError("dangeling sref (structure {} is not defined in library)".format(element.structure))
|
||||
err.element = element
|
||||
|
||||
raise err
|
||||
|
||||
count.inc()
|
||||
|
||||
if progress_callback:
|
||||
progress_callback(count)
|
||||
|
||||
|
@ -6,5 +6,7 @@ class Structure(object):
|
||||
last_mod = datetime.now()
|
||||
name = "NONAME"
|
||||
|
||||
# contains all the elements
|
||||
# contains all the low level elements
|
||||
elements = []
|
||||
# contains all sref and aref elements
|
||||
references = []
|
Loading…
Reference in New Issue
Block a user