def __str__(self):
return '<%s %s>' % (self.__class__.__name__, self.name)
+ def _setup_item(self, item):
+ """Perform any required initialization before returning an item.
+ """
+ pass
+
def current(self):
if len(self) == 0:
return None
- return self[self._index]
+ item = self[self._index]
+ self._setup_item(item)
+ return item
def jump(self, index):
if len(self) == 0:
def filter(self, keeper_fn=lambda item:True, *args, **kwargs):
c = copy.deepcopy(self)
for item in reversed(c):
+ c._setup_item(item)
if keeper_fn(item, *args, **kwargs) != True:
c.remove(item)
try: # attempt to maintain the same current item
def __init__(self, drivers, name=None):
super(Playlist, self).__init__(name=name)
self.drivers = drivers
- self._loaded = [] # List of loaded curves, see :meth:`._load`.
+ self._loaded = [] # List of loaded curves, see :meth:`._setup_item`.
self._max_loaded = 100 # curves to hold in memory simultaneously.
def append_curve_by_path(self, path, info=None, identify=True):
self.append(c)
return c
- def current(self):
- curve = super(Playlist, self).current()
- self._load(curve)
- return curve
-
- def _load(self, curve):
+ def _setup_item(self, curve):
if curve != None and curve not in self._loaded:
if curve not in self:
self.append(curve)