def __init__(self, drivers, name=None):
super(Playlist, self).__init__(name=name)
self.drivers = drivers
- self._max_loaded = 100 # curves to hold in memory simultaneously.
def _set_default_attrs(self):
super(Playlist, self)._set_default_attrs()
self._default_attrs['drivers'] = []
# List of loaded curves, see :meth:`._setup_item`.
self._default_attrs['_loaded'] = []
- self._default_attrs['_max_loaded'] = 100
+ self._default_attrs['_max_loaded'] = 100 # curves to hold in memory simultaneously.
def __setstate__(self, state):
super(Playlist, self).__setstate__(state)
oldest = self._loaded.pop(0)
oldest.unload()
+ def unload(self, curve):
+ "Inverse of .`_setup_item`."
+ curve.unload()
+ self._loaded.remove(curve)
+
+
+def playlist_path(path):
+ """Normalize playlist path extensions.
+
+ Examples
+ --------
+ >>> print playlist_path('playlist')
+ playlist.hkp
+ >>> print playlist_path('playlist.hkp')
+ playlist.hkp
+ >>> print playlist_path(None)
+ None
+ """
+ if path == None:
+ return None
+ if not path.endswith('.hkp'):
+ path += '.hkp'
+ return path
+
class FilePlaylist (Playlist):
"""A file-backed :class:`Playlist`.
if self._base_path == None:
self._base_path = os.getcwd()
else:
- if not path.endswith('.hkp'):
- path += '.hkp'
+ path = playlist_path(path)
self.path = path
self._base_path = os.path.dirname(os.path.abspath(
os.path.expanduser(self.path)))
"""
return yaml.load(string)
-def load(path=None, identify=True, hooke=None):
+def load(path=None, drivers=None, identify=True, hooke=None):
"""Load a playlist from a file.
"""
- with open(self.path, 'r') as f:
+ path = playlist_path(path)
+ with open(path, 'r') as f:
text = f.read()
playlist = from_string(text)
+ playlist.set_path(path)
playlist._digest = playlist.digest()
+ if drivers != None:
+ playlist.drivers = drivers
+ playlist.set_path(path)
for curve in playlist:
curve.set_hooke(hooke)
if identify == True: