mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
Implemented additional album functions
This commit is contained in:
parent
4d1f810e92
commit
dc2a8a54f9
@ -867,6 +867,83 @@ def count_scrobbles_by_album(since,to,resolve_ids=True,dbconn=None):
|
|||||||
result = rank(result,key='scrobbles')
|
result = rank(result,key='scrobbles')
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@cached_wrapper
|
||||||
|
@connection_provider
|
||||||
|
# this ranks the albums of that artist, not albums the artist appears on - even scrobbles
|
||||||
|
# of tracks the artist is not part of!
|
||||||
|
def count_scrobbles_by_album_of_artist(since,to,artist,resolve_ids=True,dbconn=None):
|
||||||
|
|
||||||
|
artist_id = get_artist_id(artist,dbconn=dbconn)
|
||||||
|
|
||||||
|
jointable = sql.join(
|
||||||
|
DB['scrobbles'],
|
||||||
|
DB['tracks'],
|
||||||
|
DB['scrobbles'].c.track_id == DB['tracks'].c.id
|
||||||
|
)
|
||||||
|
jointable2 = sql.join(
|
||||||
|
jointable,
|
||||||
|
DB['albumartists'],
|
||||||
|
DB['tracks'].c.album_id == DB['albumartists'].c.album_id
|
||||||
|
)
|
||||||
|
|
||||||
|
op = sql.select(
|
||||||
|
sql.func.count(sql.func.distinct(DB['scrobbles'].c.timestamp)).label('count'),
|
||||||
|
DB['tracks'].c.album_id
|
||||||
|
).select_from(jointable2).where(
|
||||||
|
DB['scrobbles'].c.timestamp<=to,
|
||||||
|
DB['scrobbles'].c.timestamp>=since,
|
||||||
|
DB['albumartists'].c.artist_id == artist_id
|
||||||
|
).group_by(DB['tracks'].c.album_id).order_by(sql.desc('count'))
|
||||||
|
result = dbconn.execute(op).all()
|
||||||
|
|
||||||
|
if resolve_ids:
|
||||||
|
counts = [row.count for row in result]
|
||||||
|
albums = get_albums_map([row.album_id for row in result],dbconn=dbconn)
|
||||||
|
result = [{'scrobbles':row.count,'album':albums[row.album_id]} for row in result]
|
||||||
|
else:
|
||||||
|
result = [{'scrobbles':row.count,'album_id':row.album_id} for row in result]
|
||||||
|
result = rank(result,key='scrobbles')
|
||||||
|
return result
|
||||||
|
|
||||||
|
@cached_wrapper
|
||||||
|
@connection_provider
|
||||||
|
# this ranks the tracks of that artist by the album they appear on - even when the album
|
||||||
|
# is not the artist's
|
||||||
|
def count_scrobbles_of_artist_by_album(since,to,artist,resolve_ids=True,dbconn=None):
|
||||||
|
|
||||||
|
artist_id = get_artist_id(artist,dbconn=dbconn)
|
||||||
|
|
||||||
|
jointable = sql.join(
|
||||||
|
DB['scrobbles'],
|
||||||
|
DB['trackartists'],
|
||||||
|
DB['scrobbles'].c.track_id == DB['trackartists'].c.track_id
|
||||||
|
)
|
||||||
|
jointable2 = sql.join(
|
||||||
|
jointable,
|
||||||
|
DB['tracks'],
|
||||||
|
DB['scrobbles'].c.track_id == DB['tracks'].c.id
|
||||||
|
)
|
||||||
|
|
||||||
|
op = sql.select(
|
||||||
|
sql.func.count(sql.func.distinct(DB['scrobbles'].c.timestamp)).label('count'),
|
||||||
|
DB['tracks'].c.album_id
|
||||||
|
).select_from(jointable2).where(
|
||||||
|
DB['scrobbles'].c.timestamp<=to,
|
||||||
|
DB['scrobbles'].c.timestamp>=since,
|
||||||
|
DB['trackartists'].c.artist_id == artist_id
|
||||||
|
).group_by(DB['tracks'].c.album_id).order_by(sql.desc('count'))
|
||||||
|
result = dbconn.execute(op).all()
|
||||||
|
|
||||||
|
if resolve_ids:
|
||||||
|
counts = [row.count for row in result]
|
||||||
|
albums = get_albums_map([row.album_id for row in result],dbconn=dbconn)
|
||||||
|
result = [{'scrobbles':row.count,'album':albums[row.album_id]} for row in result]
|
||||||
|
else:
|
||||||
|
result = [{'scrobbles':row.count,'album_id':row.album_id} for row in result]
|
||||||
|
result = rank(result,key='scrobbles')
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
@cached_wrapper
|
@cached_wrapper
|
||||||
@connection_provider
|
@connection_provider
|
||||||
def count_scrobbles_by_track_of_artist(since,to,artist,dbconn=None):
|
def count_scrobbles_by_track_of_artist(since,to,artist,dbconn=None):
|
||||||
|
Loading…
Reference in New Issue
Block a user