Source code for solidipes.loaders.sequence

from ..utils import solidipes_logging as logging
from .data_container import DataContainer

logger = logging.getLogger()


[docs] class Sequence(DataContainer): """Sequence of any subclass of DataContainer""" def __init__(self, _selected_element=0, **kwargs): self._elements = {} self._selected_element = _selected_element super().__init__(**kwargs) @property def _current_element(self): element = self._elements.get(self._selected_element, None) # Load element if not already loaded if element is None: element = self._load_element(self._selected_element) self._elements[self._selected_element] = element return element @property def sequence_type(self): return type(self._load_element(0))
[docs] def select_element(self, n: int, update_default_viewer=False): self._selected_element = n if update_default_viewer: if isinstance(self._current_element, DataContainer): self.default_viewer = self._current_element.default_viewer else: self.default_viewer = None
[docs] def _load_element(self, n: int): """Must raise KeyError if element does not exist Override this method in subclasses. """ raise NotImplementedError
def __getattr__(self, key): logger.debug(f"__getattr__({type(self)}, {key})") try: return self.get(key) except KeyError: pass return getattr(self._current_element, key)