def get_distinct(self, field, query=None): if field == 'track': def distinct(track): return {track.name} elif field == 'artist': def distinct(track): return {a.name for a in track.artists} elif field == 'albumartist': def distinct(track): album = track.album or models.Album() return {a.name for a in album.artists} elif field == 'album': def distinct(track): album = track.album or models.Album() return {album.name} elif field == 'composer': def distinct(track): return {a.name for a in track.composers} elif field == 'performer': def distinct(track): return {a.name for a in track.performers} elif field == 'date': def distinct(track): return {track.date} elif field == 'genre': def distinct(track): return {track.genre} else: return set() distinct_result = set() search_result = search.search(self._tracks.values(), query, limit=None) for track in search_result.tracks: distinct_result.update(distinct(track)) return distinct_result - {None}
def search(self, query=None, limit=100, offset=0, uris=None, exact=False): tracks = self._tracks.values() # TODO: pass limit and offset into search helpers if exact: return search.find_exact(tracks, query=query, uris=uris) else: return search.search(tracks, query=query, uris=uris)
def get_distinct(self, field, query=None): if field == 'artist': def distinct(track): return {a.name for a in track.artists} elif field == 'albumartist': def distinct(track): album = track.album or models.Album() return {a.name for a in album.artists} elif field == 'album': def distinct(track): album = track.album or models.Album() return {album.name} elif field == 'composer': def distinct(track): return {a.name for a in track.composers} elif field == 'performer': def distinct(track): return {a.name for a in track.performers} elif field == 'date': def distinct(track): return {track.date} elif field == 'genre': def distinct(track): return {track.genre} else: return set() distinct_result = set() search_result = search.search(self._tracks.values(), query, limit=None) for track in search_result.tracks: distinct_result.update(distinct(track)) return distinct_result
def search(self, query=None, limit=100, offset=0, uris=None, exact=False): tracks = self._tracks.values() if exact: return search.find_exact( tracks, query=query, limit=limit, offset=offset, uris=uris) else: return search.search( tracks, query=query, limit=limit, offset=offset, uris=uris)