add recompute karma capability
This commit is contained in:
parent
8e12714026
commit
803b725671
4 changed files with 32 additions and 5 deletions
|
|
@ -1,5 +1,10 @@
|
|||
# Changelog
|
||||
|
||||
## 0.3.3
|
||||
|
||||
- Fixed bugs in templates introduced in 0.3.2
|
||||
- Improved karma management
|
||||
|
||||
## 0.3.2
|
||||
|
||||
- Fixed administrator users not being able to create +guilds
|
||||
|
|
|
|||
22
freak/cli.py
22
freak/cli.py
|
|
@ -4,22 +4,36 @@ import argparse
|
|||
import os
|
||||
import subprocess
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from . import __version__ as version
|
||||
from .models import db
|
||||
from sqlalchemy import create_engine, select
|
||||
from sqlalchemy.orm import Session
|
||||
from . import __version__ as version, app
|
||||
from .models import User, db
|
||||
|
||||
def make_parser():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--version', '-v', action='version', version=version)
|
||||
parser.add_argument('--upgrade', '-U', action='store_true', help='create or upgrade schema')
|
||||
parser.add_argument('--flush', '-H', action='store_true', help='recompute karma for all users')
|
||||
return parser
|
||||
|
||||
def main():
|
||||
args = make_parser().parse_args()
|
||||
|
||||
engine = create_engine(os.getenv('DATABASE_URL'))
|
||||
if args.upgrade:
|
||||
db.metadata.create_all(create_engine(os.getenv('DATABASE_URL')))
|
||||
db.metadata.create_all(engine)
|
||||
subprocess.Popen(['alembic', 'upgrade', 'head']).wait()
|
||||
print('Schema upgraded!')
|
||||
|
||||
if args.flush:
|
||||
cnt = 0
|
||||
with app.app_context():
|
||||
for u in db.session.execute(select(User)).scalars():
|
||||
u.recompute_karma()
|
||||
cnt += 1
|
||||
db.session.add(u)
|
||||
db.session.commit()
|
||||
print(f'Recomputed karma of {cnt} users')
|
||||
|
||||
print(f'Visit <https://{os.getenv("DOMAIN_NAME")}>')
|
||||
|
||||
|
|
|
|||
|
|
@ -188,6 +188,14 @@ class User(BaseModel):
|
|||
def not_suspended(cls):
|
||||
return or_(User.banned_at == None, User.banned_until <= datetime.datetime.now())
|
||||
|
||||
def recompute_karma(self):
|
||||
c = 0
|
||||
c += db.session.execute(select(func.count('*')).select_from(Post).where(Post.author == self)).scalar()
|
||||
c += db.session.execute(select(func.count('*')).select_from(PostUpvote).join(Post).where(Post.author == self, PostUpvote.c.is_downvote == False)).scalar()
|
||||
c -= db.session.execute(select(func.count('*')).select_from(PostUpvote).join(Post).where(Post.author == self, PostUpvote.c.is_downvote == True)).scalar()
|
||||
|
||||
self.karma = c
|
||||
|
||||
class Topic(BaseModel):
|
||||
__tablename__ = 'freak_topic'
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block nav %}
|
||||
{{ user_nav(user) }}
|
||||
{{ nav_user(user) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue