From 5a548f1979cef1ee61dcb18f85f32d829a392701 Mon Sep 17 00:00:00 2001 From: Krateng Date: Fri, 4 Sep 2020 02:42:01 +0200 Subject: [PATCH] Moved utilities to submodule --- maloja/utilities/__init__.py | 3 + maloja/{utilities.py => utilities/images.py} | 163 ++----------------- maloja/utilities/maintenance.py | 95 +++++++++++ maloja/utilities/utils.py | 24 +++ 4 files changed, 134 insertions(+), 151 deletions(-) create mode 100644 maloja/utilities/__init__.py rename maloja/{utilities.py => utilities/images.py} (71%) create mode 100644 maloja/utilities/maintenance.py create mode 100644 maloja/utilities/utils.py diff --git a/maloja/utilities/__init__.py b/maloja/utilities/__init__.py new file mode 100644 index 0000000..5fc1c9a --- /dev/null +++ b/maloja/utilities/__init__.py @@ -0,0 +1,3 @@ +from .images import * +from .maintenance import * +from .utils import * diff --git a/maloja/utilities.py b/maloja/utilities/images.py similarity index 71% rename from maloja/utilities.py rename to maloja/utilities/images.py index bd56759..8e5f9b0 100644 --- a/maloja/utilities.py +++ b/maloja/utilities/images.py @@ -1,56 +1,17 @@ -import re -import os -import hashlib -from threading import Thread, Timer -import pickle -import json -import urllib -import datetime -import random -import itertools -import base64 -from doreah import settings -from doreah import caching +from .. import globalconf +from ..globalconf import datadir +from .. import thirdparty + +from doreah import settings, caching from doreah.logging import log -from doreah.regular import yearly, daily -#from .external import api_request_track, api_request_artist -from . import thirdparty -from .__pkginfo__ import version -from . import globalconf -from .globalconf import datadir - - - -##### -## SERIALIZE -##### - -def serialize(obj): - try: - return serialize(obj.hashable()) - except: - try: - return json.dumps(obj) - except: - if isinstance(obj,list) or isinstance(obj,tuple): - return "[" + ",".join(serialize(o) for o in obj) + "]" - elif isinstance(obj,dict): - return "{" + ",".join(serialize(o) + ":" + serialize(obj[o]) for o in obj) + "}" - return json.dumps(obj.hashable()) - - - #if isinstance(obj,list) or if isinstance(obj,tuple): - # return "[" + ",".join(dumps(o) for o in obj) + "]" - #if isinstance(obj,str) - - - - - -##### -## IMAGES -##### +import itertools +import os +import urllib +import random +import base64 +from threading import Thread, Timer +import re if globalconf.USE_THUMBOR: @@ -352,103 +313,3 @@ def set_image(b64,**keys): # set as current picture in rotation if track: local_track_cache.add((frozenset(keys["artists"]),keys["title"]),os.path.join(folder,filename)) else: local_artist_cache.add(keys["artist"],os.path.join(folder,filename)) - - - - - - - - - -##### -## PULSE MAINTENANCE -##### - - - -@yearly -def update_medals(): - - - from .database import MEDALS, MEDALS_TRACKS, STAMPS, get_charts_artists, get_charts_tracks - - currentyear = datetime.datetime.utcnow().year - try: - firstyear = datetime.datetime.utcfromtimestamp(STAMPS[0]).year - except: - firstyear = currentyear - - - MEDALS.clear() - for year in range(firstyear,currentyear): - - charts = get_charts_artists(within=[year]) - for a in charts: - - artist = a["artist"] - if a["rank"] == 1: MEDALS.setdefault(artist,{}).setdefault("gold",[]).append(year) - elif a["rank"] == 2: MEDALS.setdefault(artist,{}).setdefault("silver",[]).append(year) - elif a["rank"] == 3: MEDALS.setdefault(artist,{}).setdefault("bronze",[]).append(year) - else: break - - MEDALS_TRACKS.clear() - for year in range(firstyear,currentyear): - - charts = get_charts_tracks(within=[year]) - for t in charts: - - track = (frozenset(t["track"]["artists"]),t["track"]["title"]) - if t["rank"] == 1: MEDALS_TRACKS.setdefault(track,{}).setdefault("gold",[]).append(year) - elif t["rank"] == 2: MEDALS_TRACKS.setdefault(track,{}).setdefault("silver",[]).append(year) - elif t["rank"] == 3: MEDALS_TRACKS.setdefault(track,{}).setdefault("bronze",[]).append(year) - else: break - -@daily -def update_weekly(): - - from .database import WEEKLY_TOPTRACKS, WEEKLY_TOPARTISTS, get_charts_artists, get_charts_tracks - from .malojatime import ranges, thisweek - - - WEEKLY_TOPARTISTS.clear() - WEEKLY_TOPTRACKS.clear() - - for week in ranges(step="week"): - if week == thisweek(): break - for a in get_charts_artists(timerange=week): - artist = a["artist"] - if a["rank"] == 1: WEEKLY_TOPARTISTS[artist] = WEEKLY_TOPARTISTS.setdefault(artist,0) + 1 - - for t in get_charts_tracks(timerange=week): - track = (frozenset(t["track"]["artists"]),t["track"]["title"]) - if t["rank"] == 1: WEEKLY_TOPTRACKS[track] = WEEKLY_TOPTRACKS.setdefault(track,0) + 1 - - -@daily -def send_stats(): - if settings.get_settings("SEND_STATS"): - - log("Sending daily stats report...") - - from .database import ARTISTS, TRACKS, SCROBBLES - - keys = { - "url":"https://myrcella.krateng.ch/malojastats", - "method":"POST", - "headers":{"Content-Type": "application/json"}, - "data":json.dumps({ - "name":settings.get_settings("NAME"), - "url":settings.get_settings("PUBLIC_URL"), - "version":".".join(str(d) for d in version), - "artists":len(ARTISTS), - "tracks":len(TRACKS), - "scrobbles":len(SCROBBLES) - }).encode("utf-8") - } - try: - req = urllib.request.Request(**keys) - response = urllib.request.urlopen(req) - log("Sent daily report!") - except: - log("Could not send daily report!") diff --git a/maloja/utilities/maintenance.py b/maloja/utilities/maintenance.py new file mode 100644 index 0000000..e43c2a5 --- /dev/null +++ b/maloja/utilities/maintenance.py @@ -0,0 +1,95 @@ +from ..__pkginfo__ import version + +from doreah.regular import yearly, daily +from doreah import settings +from doreah.logging import log + +import datetime +import json +import urllib + +@yearly +def update_medals(): + + + from ..database import MEDALS, MEDALS_TRACKS, STAMPS, get_charts_artists, get_charts_tracks + + currentyear = datetime.datetime.utcnow().year + try: + firstyear = datetime.datetime.utcfromtimestamp(STAMPS[0]).year + except: + firstyear = currentyear + + + MEDALS.clear() + for year in range(firstyear,currentyear): + + charts = get_charts_artists(within=[year]) + for a in charts: + + artist = a["artist"] + if a["rank"] == 1: MEDALS.setdefault(artist,{}).setdefault("gold",[]).append(year) + elif a["rank"] == 2: MEDALS.setdefault(artist,{}).setdefault("silver",[]).append(year) + elif a["rank"] == 3: MEDALS.setdefault(artist,{}).setdefault("bronze",[]).append(year) + else: break + + MEDALS_TRACKS.clear() + for year in range(firstyear,currentyear): + + charts = get_charts_tracks(within=[year]) + for t in charts: + + track = (frozenset(t["track"]["artists"]),t["track"]["title"]) + if t["rank"] == 1: MEDALS_TRACKS.setdefault(track,{}).setdefault("gold",[]).append(year) + elif t["rank"] == 2: MEDALS_TRACKS.setdefault(track,{}).setdefault("silver",[]).append(year) + elif t["rank"] == 3: MEDALS_TRACKS.setdefault(track,{}).setdefault("bronze",[]).append(year) + else: break + +@daily +def update_weekly(): + + from ..database import WEEKLY_TOPTRACKS, WEEKLY_TOPARTISTS, get_charts_artists, get_charts_tracks + from ..malojatime import ranges, thisweek + + + WEEKLY_TOPARTISTS.clear() + WEEKLY_TOPTRACKS.clear() + + for week in ranges(step="week"): + if week == thisweek(): break + for a in get_charts_artists(timerange=week): + artist = a["artist"] + if a["rank"] == 1: WEEKLY_TOPARTISTS[artist] = WEEKLY_TOPARTISTS.setdefault(artist,0) + 1 + + for t in get_charts_tracks(timerange=week): + track = (frozenset(t["track"]["artists"]),t["track"]["title"]) + if t["rank"] == 1: WEEKLY_TOPTRACKS[track] = WEEKLY_TOPTRACKS.setdefault(track,0) + 1 + + +@daily +def send_stats(): + if settings.get_settings("SEND_STATS"): + + log("Sending daily stats report...") + + from ..database import ARTISTS, TRACKS, SCROBBLES + + keys = { + "url":"https://myrcella.krateng.ch/malojastats", + "method":"POST", + "headers":{"Content-Type": "application/json"}, + "data":json.dumps({ + "name":settings.get_settings("NAME"), + "url":settings.get_settings("PUBLIC_URL"), + "version":".".join(str(d) for d in version), + "artists":len(ARTISTS), + "tracks":len(TRACKS), + "scrobbles":len(SCROBBLES) + }).encode("utf-8") + } + try: + req = urllib.request.Request(**keys) + response = urllib.request.urlopen(req) + log("Sent daily report!") + except: + log("Could not send daily report!") diff --git a/maloja/utilities/utils.py b/maloja/utilities/utils.py new file mode 100644 index 0000000..e26d42b --- /dev/null +++ b/maloja/utilities/utils.py @@ -0,0 +1,24 @@ +import json + + +##### +## SERIALIZE +##### + +def serialize(obj): + try: + return serialize(obj.hashable()) + except: + try: + return json.dumps(obj) + except: + if isinstance(obj,list) or isinstance(obj,tuple): + return "[" + ",".join(serialize(o) for o in obj) + "]" + elif isinstance(obj,dict): + return "{" + ",".join(serialize(o) + ":" + serialize(obj[o]) for o in obj) + "}" + return json.dumps(obj.hashable()) + + + #if isinstance(obj,list) or if isinstance(obj,tuple): + # return "[" + ",".join(dumps(o) for o in obj) + "]" + #if isinstance(obj,str)