2021-05-05 08:50:54 +00:00
|
|
|
from datetime import datetime, timedelta
|
2020-09-16 18:32:16 +00:00
|
|
|
from os import path
|
|
|
|
from flask import render_template, Blueprint, request, session, flash
|
|
|
|
from flask import send_from_directory, redirect, url_for, current_app
|
|
|
|
from werkzeug.utils import secure_filename
|
|
|
|
from suchwow import wownero
|
|
|
|
from suchwow.models import Post
|
2021-05-05 08:50:54 +00:00
|
|
|
from suchwow.utils.helpers import rw_cache
|
2020-09-16 18:32:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
bp = Blueprint("leaderboard", "leaderboard")
|
|
|
|
|
2021-05-05 08:50:54 +00:00
|
|
|
@bp.route("/leaderboards/top_posters")
|
|
|
|
def top_posters():
|
2020-09-16 18:32:16 +00:00
|
|
|
top_posters = {}
|
2020-12-04 19:20:30 +00:00
|
|
|
posts = Post.select().where(Post.approved==True)
|
2020-09-16 18:32:16 +00:00
|
|
|
for post in posts:
|
|
|
|
transfers = []
|
|
|
|
incoming = wownero.Wallet().incoming_transfers(post.account_index)
|
|
|
|
if "transfers" in incoming:
|
|
|
|
for xfer in incoming["transfers"]:
|
|
|
|
transfers.append(wownero.from_atomic(xfer["amount"]))
|
|
|
|
total = sum(transfers)
|
|
|
|
if post.submitter not in top_posters:
|
|
|
|
top_posters[post.submitter] = {"amount": 0, "posts": []}
|
|
|
|
|
|
|
|
top_posters[post.submitter]["amount"] += float(total)
|
|
|
|
top_posters[post.submitter]["posts"].append(post)
|
|
|
|
|
|
|
|
return render_template("leaderboard.html", posters=top_posters)
|
2021-05-05 08:50:54 +00:00
|
|
|
|
|
|
|
@bp.route("/leaderboards/top_posts")
|
|
|
|
def top_posts():
|
|
|
|
top_posts = []
|
|
|
|
days = request.args.get('days', 1)
|
|
|
|
try:
|
|
|
|
days = int(days)
|
|
|
|
except:
|
|
|
|
days = 1
|
|
|
|
|
|
|
|
if days not in [1, 3, 7, 30]:
|
|
|
|
days = 7
|
|
|
|
|
|
|
|
hours = 24 * days
|
|
|
|
diff = datetime.now() - timedelta(hours=hours)
|
|
|
|
key_name = f'top_posts_{str(hours)}'
|
|
|
|
|
|
|
|
posts = rw_cache(key_name)
|
|
|
|
if not posts:
|
|
|
|
posts = Post.select().where(
|
|
|
|
Post.approved==True,
|
|
|
|
Post.timestamp > diff
|
|
|
|
).order_by(
|
|
|
|
Post.timestamp.desc()
|
|
|
|
)
|
|
|
|
for post in posts:
|
|
|
|
p = post.show()
|
|
|
|
if isinstance(p['received_wow'], float):
|
|
|
|
top_posts.append(p)
|
|
|
|
|
|
|
|
posts = rw_cache(key_name, top_posts)
|
|
|
|
|
|
|
|
return render_template("post/top.html", posts=posts, days=days)
|