diff --git a/database.py b/database.py index 9204ee0..33f2290 100644 --- a/database.py +++ b/database.py @@ -788,26 +788,10 @@ def build_db(): # load cached images #loadCache() - #medals - global MEDALS - firstyear = datetime.datetime.utcfromtimestamp(STAMPS[0]).year - currentyear = datetime.datetime.utcnow().year - for year in range(firstyear,currentyear): + #start regular tasks + startpulse() - charts = get_charts_artists(within=[year]) - scr = -1 - rank = 0 - for a in charts: - if a["scrobbles"] != scr: rank = charts.index(a) + 1 - if rank > 3: break - - artist = a["artist"] - if rank == 1: MEDALS.setdefault(artist,{}).setdefault("gold",[]).append(year) - if rank == 2: MEDALS.setdefault(artist,{}).setdefault("silver",[]).append(year) - if rank == 3: MEDALS.setdefault(artist,{}).setdefault("bronze",[]).append(year) - - - scr = a["scrobbles"] + log("Database fully built!") diff --git a/utilities.py b/utilities.py index 33c0ec6..be4221e 100644 --- a/utilities.py +++ b/utilities.py @@ -1,7 +1,7 @@ import re import os import hashlib -from threading import Thread +from threading import Thread, Timer import pickle import urllib import datetime @@ -12,6 +12,21 @@ from doreah import caching from doreah.logging import log + + + + + + + +##### +## RULESTATE VALIDATION +##### + + + + + def checksumTSV(folder): sums = "" @@ -74,7 +89,25 @@ def consistentRulestate(folder,checksums): -### Media info + + + + + + + + + + +##### +## IMAGES +##### + + + + + + def apirequest(artists=None,artist=None,title=None): @@ -421,3 +454,90 @@ def resolveImage(artist=None,track=None): return getTrackImage(track["artists"],track["title"]) elif artist is not None: return getArtistImage(artist) + + + + + + + + + + + + + + + + + + +##### +## PULSE MAINTENANCE +##### + +def startpulse(): + + # execute all actions for startup + # they will themselves trigger their next pass + yearly() + monthly() + daily() + + + + + +def yearly(): + + #medals + from database import MEDALS, STAMPS, get_charts_artists + MEDALS.clear() + firstyear = datetime.datetime.utcfromtimestamp(STAMPS[0]).year + currentyear = datetime.datetime.utcnow().year + for year in range(firstyear,currentyear): + + charts = get_charts_artists(within=[year]) + scr = -1 + rank = 0 + for a in charts: + if a["scrobbles"] != scr: rank = charts.index(a) + 1 + if rank > 3: break + + artist = a["artist"] + if rank == 1: MEDALS.setdefault(artist,{}).setdefault("gold",[]).append(year) + if rank == 2: MEDALS.setdefault(artist,{}).setdefault("silver",[]).append(year) + if rank == 3: MEDALS.setdefault(artist,{}).setdefault("bronze",[]).append(year) + + + scr = a["scrobbles"] + + + # schedule for next year + now = datetime.datetime.utcnow() + nextyear = datetime.datetime(now.year+1,1,1) + wait = nextyear.timestamp() - now.timestamp() + + Timer(wait,yearly).start() + +def monthly(): + + log("New month!",module="debug") + + # schedule for next month + now = datetime.datetime.utcnow() + nextmonth = datetime.datetime(now.year,now.month + 1,1) if now.month != 12 else datetime.datetime(now.year+1,1,1) + wait = nextmonth.timestamp() - now.timestamp() + + Timer(wait,monthly).start() + +def daily(): + + log("New day!",module="debug") + + # schedule for tomorrow + now = datetime.datetime.utcnow() + nextday = datetime.datetime(now.year,now.month,now.day) + datetime.timedelta(days=1) + wait = nextday.timestamp() - now.timestamp() + + Timer(wait,daily).start()