Module musar.scopes
Scopes for grouping album tracks over some criteria.
Expand source code
"""Scopes for grouping album tracks over some criteria.
"""
from . import accessors
class Scope:
"""Placeholder class for scopes.
"""
NAME: str = None
"""
Scope name for identification in the config.
"""
def iterate(self, folder):
"""Iterate over the groups of tracks in a folder.
Parameters
----------
folder : musar.folder.Folder
Target folder.
Returns
-------
Iterator[List[eyed3.mp3.Mp3AudioFile]]
Iterator over the grouped tracks.
"""
raise NotImplementedError()
class Album(Scope):
"""Album scope, all tracks are grouped together.
"""
NAME = "album"
def iterate(self, folder):
yield list(folder)
class Disc(Scope):
"""Disc scope, tracks are grouped by disc.
"""
NAME = "disc"
def iterate(self, folder):
disc_num_accessor = accessors.DiscNumber()
tracks = folder.tracks.values()
groups = dict()
for track in tracks:
disc_num = disc_num_accessor.get(track)
groups.setdefault(disc_num, list())
groups[disc_num].append(track)
for tracks in groups.values():
yield tracks
class Track(Scope):
"""Track scope, tracks are each in a single group.
"""
NAME = "track"
def iterate(self, folder):
for track in folder:
yield [track]
class Manager(dict):
"""Manager for accessing all the scopes.
Attributes
----------
Keys are scope names and values are scope instances.
"""
def __init__(self):
super(Manager, self).__init__()
classes = [Album, Disc, Track]
for cls in classes:
self[cls.NAME] = cls()
Classes
class Album
-
Album scope, all tracks are grouped together.
Expand source code
class Album(Scope): """Album scope, all tracks are grouped together. """ NAME = "album" def iterate(self, folder): yield list(folder)
Ancestors
Inherited members
class Disc
-
Disc scope, tracks are grouped by disc.
Expand source code
class Disc(Scope): """Disc scope, tracks are grouped by disc. """ NAME = "disc" def iterate(self, folder): disc_num_accessor = accessors.DiscNumber() tracks = folder.tracks.values() groups = dict() for track in tracks: disc_num = disc_num_accessor.get(track) groups.setdefault(disc_num, list()) groups[disc_num].append(track) for tracks in groups.values(): yield tracks
Ancestors
Inherited members
class Manager
-
Manager for accessing all the scopes.
Attributes
Keys are scope names and values are scope instances.
Expand source code
class Manager(dict): """Manager for accessing all the scopes. Attributes ---------- Keys are scope names and values are scope instances. """ def __init__(self): super(Manager, self).__init__() classes = [Album, Disc, Track] for cls in classes: self[cls.NAME] = cls()
Ancestors
- builtins.dict
class Scope
-
Placeholder class for scopes.
Expand source code
class Scope: """Placeholder class for scopes. """ NAME: str = None """ Scope name for identification in the config. """ def iterate(self, folder): """Iterate over the groups of tracks in a folder. Parameters ---------- folder : musar.folder.Folder Target folder. Returns ------- Iterator[List[eyed3.mp3.Mp3AudioFile]] Iterator over the grouped tracks. """ raise NotImplementedError()
Subclasses
Class variables
var NAME : str
-
Scope name for identification in the config.
Methods
def iterate(self, folder)
-
Iterate over the groups of tracks in a folder.
Parameters
folder
:Folder
- Target folder.
Returns
Iterator[List[eyed3.mp3.Mp3AudioFile]]
- Iterator over the grouped tracks.
Expand source code
def iterate(self, folder): """Iterate over the groups of tracks in a folder. Parameters ---------- folder : musar.folder.Folder Target folder. Returns ------- Iterator[List[eyed3.mp3.Mp3AudioFile]] Iterator over the grouped tracks. """ raise NotImplementedError()
class Track
-
Track scope, tracks are each in a single group.
Expand source code
class Track(Scope): """Track scope, tracks are each in a single group. """ NAME = "track" def iterate(self, folder): for track in folder: yield [track]
Ancestors
Inherited members