-# Copyright (C) 2010 W. Trevor King <wking@drexel.edu>
+# Copyright (C) 2010-2012 W. Trevor King <wking@tremily.us>
#
# This file is part of Hooke.
#
-# Hooke is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
+# Hooke is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
#
-# Hooke is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
-# Public License for more details.
+# Hooke is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
#
-# You should have received a copy of the GNU Lesser General Public
-# License along with Hooke. If not, see
-# <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with Hooke. If not, see <http://www.gnu.org/licenses/>.
"""The `playlist` module provides a :class:`Playlist` and its subclass
:class:`FilePlaylist` for manipulating lists of
try:
self.__dict__.update(state)
except TypeError, e:
- print state, type(state), e
+ print(' '.join(str(x) for x in [state, type(state), e]))
if self.info in [None, {}]:
self.info = {}
is `None`.
"""
if value == None:
+ if self._index >= len(self): # perhaps items have been popped
+ self._index = len(self) - 1
return self._index
return super(NoteIndexList, self).index(value, *args, **kwargs)
index = self._index
items = self
if reverse == True:
+ # could iterate through `c` if current_curve_callback()
+ # would work, but `c` is not bound to the local `hooke`,
+ # so curent_playlist_callback cannot point to it.
items = reverse_enumerate(self)
else:
items = enumerate(self)
pass
-def playlist_path(path):
+def playlist_path(path, expand=False):
"""Normalize playlist path extensions.
Examples
--------
- >>> print playlist_path('playlist')
+ >>> print(playlist_path('playlist'))
playlist.hkp
- >>> print playlist_path('playlist.hkp')
+ >>> print(playlist_path('playlist.hkp'))
playlist.hkp
- >>> print playlist_path(None)
+ >>> print(playlist_path(None))
None
"""
if path == None:
return None
if not path.endswith('.hkp'):
path += '.hkp'
+ if expand:
+ path = os.path.abspath(os.path.expanduser(path))
return path
>>> s = pickle.dumps(p)
>>> z = pickle.loads(s)
>>> for curve in z:
- ... print curve
+ ... print(curve)
<Curve A>
<Curve B>
- >>> print z.drivers
+ >>> print(z.drivers)
['Driver A', 'Driver B']
The data-type is also YAMLable (see :mod:`hooke.util.yaml`).
>>> s = yaml.dump(p)
>>> z = yaml.load(s)
>>> for curve in z:
- ... print curve
+ ... print(curve)
<Curve A>
<Curve B>
- >>> print z.drivers
+ >>> print(z.drivers)
['Driver A', 'Driver B']
"""
version = '0.2'
if self._base_path == None:
self._base_path = os.getcwd()
else:
- path = playlist_path(path)
+ path = playlist_path(path, expand=True)
self.path = path
- self._base_path = os.path.dirname(os.path.abspath(
- os.path.expanduser(self.path)))
+ self._base_path = os.path.dirname(self.path)
if self.name == None:
self.name = os.path.basename(path)
if self._base_path != orig_base_path:
... CommandMessage('command B', {'arg 0':1, 'curve':c}),
... ])
>>> p.append_curve(c)
- >>> print p.flatten() # doctest: +REPORT_UDIFF
+ >>> print(p.flatten()) # doctest: +REPORT_UDIFF
# Hooke playlist version 0.2
!!python/object/new:hooke.playlist.FilePlaylist
listitems:
version: '0.2'
<BLANKLINE>
>>> p.relative_curve_paths = False
- >>> print p.flatten() # doctest: +REPORT_UDIFF
+ >>> print(p.flatten()) # doctest: +REPORT_UDIFF
# Hooke playlist version 0.2
!!python/object/new:hooke.playlist.FilePlaylist
listitems:
>>> p = from_string(string)
>>> p.set_path('/path/to/playlist')
>>> for curve in p:
- ... print curve.name, curve.path
+ ... print('{} {}'.format(curve.name, curve.path))
one /path/to/curve/one
two /path/to/curve/two
>>> p.info
{'note': 'An example playlist'}
>>> for curve in p:
- ... print curve.name, curve.path
+ ... print('{} {}'.format(curve.name, curve.path))
one /path/to/curve/one
two /path/to/curve/two
>>> p[-1].info['attr with spaces']
def load(path=None, drivers=None, identify=True, hooke=None):
"""Load a playlist from a file.
"""
- path = os.path.expanduser(playlist_path(path))
+ path = playlist_path(path, expand=True)
with open(path, 'r') as f:
text = f.read()
playlist = from_string(text)