import os.path
from ..command import Command, Argument, Failure
-from ..playlist import FilePlaylist
from ..curve import NotRecognized
+from ..playlist import load
+from ..util.itertools import reverse_enumerate
from . import Builtin
self._commands = [
NextCommand(self), PreviousCommand(self), JumpCommand(self),
GetCommand(self), IndexCommand(self), CurveListCommand(self),
- SaveCommand(self), LoadCommand(self),
+ NameCommand(self), SaveCommand(self), LoadCommand(self),
AddCommand(self), AddGlobCommand(self),
- RemoveCommand(self), ApplyCommandStack(self),
+ RemoveCommand(self), ApplyCommand(self),
FilterCommand(self),
]
outqueue.put(list(self._playlist(hooke, params)))
+class NameCommand (PlaylistCommand):
+ """(Re)name a playlist.
+ """
+ def __init__(self, plugin):
+ super(NameCommand, self).__init__(
+ name='name playlist',
+ arguments=[
+ Argument(name='name', type='string', optional=False,
+ help="""
+Name for the playlist.
+""".strip()),
+ ],
+ help=self.__doc__, plugin=plugin)
+
+ def _run(self, hooke, inqueue, outqueue, params):
+ p = self._playlist(hooke, params)
+ p.name = params['name']
+ outqueue.put(p)
+
+
class SaveCommand (PlaylistCommand):
"""Save a playlist.
"""
help=self.__doc__, plugin=plugin)
def _run(self, hooke, inqueue, outqueue, params):
- p = FilePlaylist(drivers=params['drivers'], path=params['input'])
- p.load(hooke=hooke)
+ p = load(path=params['input'], drivers=params['drivers'], hooke=hooke)
self._set_playlist(hooke, params, p)
outqueue.put(p)
self._playlist(hooke, params).jump(params.index())
-class ApplyCommandStack (PlaylistCommand):
+class ApplyCommand (PlaylistCommand):
"""Apply a :class:`~hooke.command_stack.CommandStack` to each
curve in a playlist.
TODO: discuss `evaluate`.
"""
def __init__(self, plugin):
- super(ApplyCommandStack, self).__init__(
- name='apply command stack',
+ super(ApplyCommand, self).__init__(
+ name='apply command stack to playlist',
arguments=[
- Argument(name='commands', type='command stack', optional=False,
+ Argument(name='commands', type='command stack',
help="""
-Command stack to apply to each curve.
+Command stack to apply to each curve. Defaults to the `command_stack`
+plugin's current stack.
""".strip()),
Argument(name='evaluate', type='bool', default=False,
help="""
help=self.__doc__, plugin=plugin)
def _run(self, hooke, inqueue, outqueue, params):
- if len(params['commands']) == 0:
- return
+ params = self.__setup_params(hooke=hooke, params=params)
p = self._playlist(hooke, params)
if params['evaluate'] == True:
+ exec_cmd = hooke.command_by_name['execute command stack']
for curve in p.items():
- for command in params['commands']:
- curve.command_stack.execute_command(hooke, command)
- curve.command_stack.append(command)
+ hooke.run_command(exec_cmd.name,
+ {'commands':params['commands'],
+ 'stack':True})
else:
for curve in p:
- curve.command_stack.extend(params['commands'])
- curve.unload() # force command stack execution on next access.
+ for command in params['commands']:
+ curve.command_stack.append(command)
+ curve.set_hooke(hooke)
+ p.unload(curve)
+
+ def __setup_params(self, hooke, params):
+ if params['commands'] == None:
+ cstack_plugin = [p for p in hooke.plugins
+ if p.name == 'command_stack'][0]
+ params['commands'] = cstack_plugin.command_stack
+ return params
class FilterCommand (PlaylistAddingCommand, PlaylistCommand):
method of their subclass. See, for example,
:meth:`NoteFilterCommand.filter`.
"""
- def __init__(self, plugin, name='filter playlist'):
+ def __init__(self, plugin, name='filter playlist', load_curves=True):
super(FilterCommand, self).__init__(
name=name, help=self.__doc__, plugin=plugin)
+ self._load_curves = load_curves
if not hasattr(self, 'filter'):
self.arguments.append(
Argument(name='filter', type='function', optional=False,
filter_fn = params['filter']
else:
filter_fn = self.filter
- p = self._playlist(hooke, params).filter(filter_fn,
+ p = self._playlist(hooke, params).filter(
+ filter_fn, load_curves=self._load_curves,
hooke=hooke, inqueue=inqueue, outqueue=outqueue, params=params)
- p.name = params['name']
+ self._set_playlist(hooke, params, p)
if hasattr(p, 'path') and p.path != None:
p.set_path(os.path.join(os.path.dirname(p.path), p.name))
- self._set_playlist(hooke, params, p)
outqueue.put(p)