mirror of
https://github.com/krateng/maloja.git
synced 2025-06-01 04:34:27 -04:00
Implement import for ghan CSV files, fix GH-382
This commit is contained in:
parent
7f774f03c4
commit
126d155208
@ -1,6 +1,8 @@
|
|||||||
# server
|
# server
|
||||||
from bottle import request, response, FormsDict
|
from bottle import request, response, FormsDict
|
||||||
|
|
||||||
|
from ..pkg_global import conf
|
||||||
|
|
||||||
|
|
||||||
# decorator that makes sure this function is only run in normal operation,
|
# decorator that makes sure this function is only run in normal operation,
|
||||||
# not when we run a task that needs to access the database
|
# not when we run a task that needs to access the database
|
||||||
@ -932,6 +934,9 @@ def get_predefined_rulesets(dbconn=None):
|
|||||||
|
|
||||||
|
|
||||||
def start_db():
|
def start_db():
|
||||||
|
|
||||||
|
conf.AUX_MODE = True # that is, without a doubt, the worst python code you have ever seen
|
||||||
|
|
||||||
# Upgrade database
|
# Upgrade database
|
||||||
from .. import upgrade
|
from .. import upgrade
|
||||||
upgrade.upgrade_db(sqldb.add_scrobbles)
|
upgrade.upgrade_db(sqldb.add_scrobbles)
|
||||||
@ -950,6 +955,8 @@ def start_db():
|
|||||||
|
|
||||||
dbstatus['healthy'] = True
|
dbstatus['healthy'] = True
|
||||||
|
|
||||||
|
conf.AUX_MODE = False # but you have seen it
|
||||||
|
|
||||||
# inform time module about begin of scrobbling
|
# inform time module about begin of scrobbling
|
||||||
try:
|
try:
|
||||||
firstscrobble = sqldb.get_scrobbles(limit=1)[0]
|
firstscrobble = sqldb.get_scrobbles(limit=1)[0]
|
||||||
|
@ -34,9 +34,12 @@ def import_scrobbles(inputf):
|
|||||||
filename = os.path.basename(inputf)
|
filename = os.path.basename(inputf)
|
||||||
importfunc = None
|
importfunc = None
|
||||||
|
|
||||||
|
if re.match(r"recenttracks-.*\.csv", filename):
|
||||||
|
typeid, typedesc = "lastfm", "Last.fm (ghan CSV)"
|
||||||
|
importfunc = parse_lastfm_ghan_csv
|
||||||
|
|
||||||
if re.match(r".*\.csv", filename):
|
elif re.match(r".*\.csv", filename):
|
||||||
typeid,typedesc = "lastfm", "Last.fm (benjaminbenben export)"
|
typeid,typedesc = "lastfm", "Last.fm (benjaminbenben CSV)"
|
||||||
importfunc = parse_lastfm
|
importfunc = parse_lastfm
|
||||||
|
|
||||||
elif re.match(r"Streaming_History_Audio.+\.json", filename):
|
elif re.match(r"Streaming_History_Audio.+\.json", filename):
|
||||||
@ -65,8 +68,8 @@ def import_scrobbles(inputf):
|
|||||||
importfunc = parse_rockbox
|
importfunc = parse_rockbox
|
||||||
|
|
||||||
elif re.match(r"recenttracks-.*\.json", filename):
|
elif re.match(r"recenttracks-.*\.json", filename):
|
||||||
typeid, typedesc = "lastfm", "Last.fm (ghan export)"
|
typeid, typedesc = "lastfm", "Last.fm (ghan JSON)"
|
||||||
importfunc = parse_lastfm_ghan
|
importfunc = parse_lastfm_ghan_json
|
||||||
|
|
||||||
elif re.match(r".*\.json",filename):
|
elif re.match(r".*\.json",filename):
|
||||||
try:
|
try:
|
||||||
@ -83,7 +86,8 @@ def import_scrobbles(inputf):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
print(f"Parsing {col['yellow'](inputf)} as {col['cyan'](typedesc)} export")
|
print(f"Parsing {col['yellow'](inputf)} as {col['cyan'](typedesc)} export.")
|
||||||
|
print(col['red']("Please double-check if this is correct - if the import fails, the file might have been interpreted as the wrong type."))
|
||||||
|
|
||||||
timestamps = set()
|
timestamps = set()
|
||||||
scrobblebuffer = []
|
scrobblebuffer = []
|
||||||
@ -410,7 +414,7 @@ def parse_lastfm(inputf):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
def parse_lastfm_ghan(inputf):
|
def parse_lastfm_ghan_json(inputf):
|
||||||
with open(inputf, 'r') as inputfd:
|
with open(inputf, 'r') as inputfd:
|
||||||
data = json.load(inputfd)
|
data = json.load(inputfd)
|
||||||
|
|
||||||
@ -432,6 +436,21 @@ def parse_lastfm_ghan(inputf):
|
|||||||
}, '')
|
}, '')
|
||||||
|
|
||||||
|
|
||||||
|
def parse_lastfm_ghan_csv(inputf):
|
||||||
|
with open(inputf, 'r') as inputfd:
|
||||||
|
reader = csv.DictReader(inputfd)
|
||||||
|
|
||||||
|
for row in reader:
|
||||||
|
yield ('CONFIDENT_IMPORT', {
|
||||||
|
'track_title': row['track'],
|
||||||
|
'track_artists': row['artist'],
|
||||||
|
'track_length': None,
|
||||||
|
'album_name': row['album'],
|
||||||
|
'scrobble_time': int(row['uts']),
|
||||||
|
'scrobble_duration': None
|
||||||
|
}, '')
|
||||||
|
|
||||||
|
|
||||||
def parse_listenbrainz(inputf):
|
def parse_listenbrainz(inputf):
|
||||||
|
|
||||||
with open(inputf,'r') as inputfd:
|
with open(inputf,'r') as inputfd:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user