mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
Moved utilities to submodule
This commit is contained in:
parent
785e6cfa17
commit
5a548f1979
3
maloja/utilities/__init__.py
Normal file
3
maloja/utilities/__init__.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from .images import *
|
||||||
|
from .maintenance import *
|
||||||
|
from .utils import *
|
@ -1,56 +1,17 @@
|
|||||||
import re
|
from .. import globalconf
|
||||||
import os
|
from ..globalconf import datadir
|
||||||
import hashlib
|
from .. import thirdparty
|
||||||
from threading import Thread, Timer
|
|
||||||
import pickle
|
from doreah import settings, caching
|
||||||
import json
|
|
||||||
import urllib
|
|
||||||
import datetime
|
|
||||||
import random
|
|
||||||
import itertools
|
|
||||||
import base64
|
|
||||||
from doreah import settings
|
|
||||||
from doreah import caching
|
|
||||||
from doreah.logging import log
|
from doreah.logging import log
|
||||||
from doreah.regular import yearly, daily
|
|
||||||
|
|
||||||
#from .external import api_request_track, api_request_artist
|
import itertools
|
||||||
from . import thirdparty
|
import os
|
||||||
from .__pkginfo__ import version
|
import urllib
|
||||||
from . import globalconf
|
import random
|
||||||
from .globalconf import datadir
|
import base64
|
||||||
|
from threading import Thread, Timer
|
||||||
|
import re
|
||||||
|
|
||||||
#####
|
|
||||||
## 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
|
|
||||||
#####
|
|
||||||
|
|
||||||
|
|
||||||
if globalconf.USE_THUMBOR:
|
if globalconf.USE_THUMBOR:
|
||||||
@ -352,103 +313,3 @@ def set_image(b64,**keys):
|
|||||||
# set as current picture in rotation
|
# set as current picture in rotation
|
||||||
if track: local_track_cache.add((frozenset(keys["artists"]),keys["title"]),os.path.join(folder,filename))
|
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))
|
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!")
|
|
95
maloja/utilities/maintenance.py
Normal file
95
maloja/utilities/maintenance.py
Normal file
@ -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!")
|
24
maloja/utilities/utils.py
Normal file
24
maloja/utilities/utils.py
Normal file
@ -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)
|
Loading…
Reference in New Issue
Block a user