From 08bd352641cd5a4749db4f282253d960d3e59a9f Mon Sep 17 00:00:00 2001 From: krateng <git.noreply@krateng.ch> Date: Wed, 6 Apr 2022 22:05:41 +0200 Subject: [PATCH] Adapted listenbrainz API to new architecture --- maloja/apis/_apikeys.py | 5 +++-- maloja/apis/_base.py | 6 ++---- maloja/apis/listenbrainz.py | 12 +++++++++--- maloja/apis/native_v1.py | 5 ++++- maloja/database/__init__.py | 4 ++-- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/maloja/apis/_apikeys.py b/maloja/apis/_apikeys.py index 95fc053..02c9e09 100644 --- a/maloja/apis/_apikeys.py +++ b/maloja/apis/_apikeys.py @@ -20,8 +20,9 @@ def api_key_correct(request,args,kwargs): elif "apikey" in kwargs: apikey = kwargs.pop("apikey") else: return False - if checkAPIkey(apikey): - client = [c for c in apikeystore if apikeystore[c]==apikey][0] + + client = apikeystore.check_and_identify_key(apikey) + if client: return {'client':client} else: return False diff --git a/maloja/apis/_base.py b/maloja/apis/_base.py index 4177ce3..938c701 100644 --- a/maloja/apis/_base.py +++ b/maloja/apis/_base.py @@ -89,12 +89,10 @@ class APIHandler: return method(path,keys) - def scrobble(self,artiststr,titlestr,time=None,duration=None,album=None): - logmsg = f"API {self.__apiname__} receiving scrobble: ARTISTS: {artiststr}, TRACK: {titlestr}" - log(logmsg) + def scrobble(self,rawscrobble,client=None): # fixing etc is handled by the main scrobble function try: - database.incoming_scrobble(artists=[artiststr],title=titlestr,time=time,duration=duration,album=album) + return database.incoming_scrobble(rawscrobble,api=self.__apiname__,client=client) except: raise ScrobblingException() diff --git a/maloja/apis/listenbrainz.py b/maloja/apis/listenbrainz.py index 7447bb9..6896b6a 100644 --- a/maloja/apis/listenbrainz.py +++ b/maloja/apis/listenbrainz.py @@ -2,7 +2,7 @@ from ._base import APIHandler from ._exceptions import * from .. import database import datetime -from ._apikeys import checkAPIkey +from ._apikeys import apikeystore from ..globalconf import malojaconfig @@ -37,7 +37,9 @@ class Listenbrainz(APIHandler): except: raise BadAuthException() - if not checkAPIkey(token): + client = apikeystore.check_and_identify_key(token) + + if not client: raise InvalidAuthException() try: @@ -60,7 +62,11 @@ class Listenbrainz(APIHandler): except: raise MalformedJSONException() - self.scrobble(artiststr,titlestr,timestamp) + self.scrobble({ + 'track_artists':[artiststr], + 'track_title':titlestr, + 'scrobble_time':timestamp + },client=client) return 200,{"status":"ok"} diff --git a/maloja/apis/native_v1.py b/maloja/apis/native_v1.py index d2011c2..4e930c4 100644 --- a/maloja/apis/native_v1.py +++ b/maloja/apis/native_v1.py @@ -248,12 +248,15 @@ def post_scrobble(artist:Multi=None,auth_result=None,**keys): 'scrobble_time':int(keys.get('time')) if (keys.get('time') is not None) else None } + # for logging purposes, don't pass values that we didn't actually supply + rawscrobble = {k:rawscrobble[k] for k in rawscrobble if rawscrobble[k]} + return database.incoming_scrobble( rawscrobble, client='browser' if auth_result.get('doreah_native_auth_check') else auth_result.get('client'), + api='native/v1', fix=(keys.get("nofix") is None) ) - # TODO: malojaclient needs to be converted to proper argument in doreah diff --git a/maloja/database/__init__.py b/maloja/database/__init__.py index 66972fd..ea0eebe 100644 --- a/maloja/database/__init__.py +++ b/maloja/database/__init__.py @@ -86,13 +86,13 @@ coa = CollectorAgent() ## ## -def incoming_scrobble(rawscrobble,fix=True,client=None,dbconn=None): +def incoming_scrobble(rawscrobble,fix=True,client=None,api=None,dbconn=None): if (not "track_artists" in rawscrobble) or (len(rawscrobble['track_artists']) == 0) or (not "track_title" in rawscrobble): log(f"Incoming scrobble {rawscrobble} [Source: {client}] is not valid") return {"status":"failure"} - log(f"Incoming scrobble [{client}]: {rawscrobble}") + log(f"Incoming scrobble [Client: {client} | API: {api}]: {rawscrobble}") # raw scrobble to processed info scrobbleinfo = {**rawscrobble}