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
|
# Changelog
|
||||||
|
|
||||||
|
## 0.3.3
|
||||||
|
|
||||||
|
- Fixed bugs in templates introduced in 0.3.2
|
||||||
|
- Improved karma management
|
||||||
|
|
||||||
## 0.3.2
|
## 0.3.2
|
||||||
|
|
||||||
- Fixed administrator users not being able to create +guilds
|
- 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 os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine, select
|
||||||
from . import __version__ as version
|
from sqlalchemy.orm import Session
|
||||||
from .models import db
|
from . import __version__ as version, app
|
||||||
|
from .models import User, db
|
||||||
|
|
||||||
def make_parser():
|
def make_parser():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('--version', '-v', action='version', version=version)
|
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('--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
|
return parser
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
args = make_parser().parse_args()
|
args = make_parser().parse_args()
|
||||||
|
|
||||||
|
engine = create_engine(os.getenv('DATABASE_URL'))
|
||||||
if args.upgrade:
|
if args.upgrade:
|
||||||
db.metadata.create_all(create_engine(os.getenv('DATABASE_URL')))
|
db.metadata.create_all(engine)
|
||||||
subprocess.Popen(['alembic', 'upgrade', 'head']).wait()
|
subprocess.Popen(['alembic', 'upgrade', 'head']).wait()
|
||||||
print('Schema upgraded!')
|
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")}>')
|
print(f'Visit <https://{os.getenv("DOMAIN_NAME")}>')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,14 @@ class User(BaseModel):
|
||||||
def not_suspended(cls):
|
def not_suspended(cls):
|
||||||
return or_(User.banned_at == None, User.banned_until <= datetime.datetime.now())
|
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):
|
class Topic(BaseModel):
|
||||||
__tablename__ = 'freak_topic'
|
__tablename__ = 'freak_topic'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block nav %}
|
{% block nav %}
|
||||||
{{ user_nav(user) }}
|
{{ nav_user(user) }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue