From: W. Trevor King Date: Wed, 2 Jun 2010 03:00:19 +0000 (-0400) Subject: Add hooke.playlist.NoteIndexList._setup_item X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=cd768c9704dcb751b43e019bb137924fbd5b8e15;p=hooke.git Add hooke.playlist.NoteIndexList._setup_item This allows item initialization to occur in both .current() and .filter(). Renamed Playlist._load -> ._setup_item for consistency. --- diff --git a/hooke/playlist.py b/hooke/playlist.py index 963d935..59daa46 100644 --- a/hooke/playlist.py +++ b/hooke/playlist.py @@ -45,10 +45,17 @@ class NoteIndexList (list): 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: @@ -65,6 +72,7 @@ class NoteIndexList (list): 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 @@ -81,7 +89,7 @@ class Playlist (NoteIndexList): 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): @@ -94,12 +102,7 @@ class Playlist (NoteIndexList): 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)