import copy
import hashlib
+import os
import os.path
import types
import xml.dom.minidom
def items(self, reverse=False):
"""Iterate through `self` calling `_setup_item` on each item
before yielding.
+
+ Notes
+ -----
+ Updates :attr:`_index` during the iteration so
+ :func:`~hooke.plugin.curve.current_curve_callback` works as
+ expected in :class:`~hooke.command.Command`\s called from
+ :class:`~hooke.plugin.playlist.ApplyCommandStack`. After the
+ iteration completes, :attr:`_index` is restored to its
+ original value.
"""
+ index = self._index
items = self
if reverse == True:
- items = reversed(self)
- for item in items:
+ items = reversed(enumerate(self))
+ else:
+ items = enumerate(self)
+ for i,item in items:
+ self._index = i
self._setup_item(item)
yield item
+ self._index = index
def filter(self, keeper_fn=lambda item:True, *args, **kwargs):
c = copy.deepcopy(self)
class FilePlaylist (Playlist):
+ """A file-backed :class:`Playlist`.
+ """
version = '0.1'
def __init__(self, drivers, name=None, path=None):
Relative paths are interpreted relative to the location of the
playlist file.
-
+
Examples
--------
self._digest = self.digest()
for curve in self:
curve.set_hooke(hooke)
-
- def save(self, path=None):
+
+ def save(self, path=None, makedirs=True):
"""Saves the playlist in a XML file.
"""
self.set_path(path)
+ dirname = os.path.dirname(self.path)
+ if makedirs == True and not os.path.isdir(dirname):
+ os.makedirs(dirname)
with open(self.path, 'w') as f:
f.write(self.flatten())
self._digest = self.digest()