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
|
||||
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!")
|
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