Remove unused polls code to reduce query volume.
Due to use of Submission.{choices, options, bet_options} in realbody, generating submission_listings resulted in extremely high volume of SELECT queries. In local testing with 6 posts, one of which had a poll with 2 options, the removal of these calls reduced quantity of queries on the homepage from 84 to 22. Given that it was previously decided to remove the polls feature after a regression while adding comment filtering, the remaining dead code paths for polls were also removed.
This commit is contained in:
parent
cf9819ca5b
commit
dbaf0a1bfd
10 changed files with 8 additions and 359 deletions
|
@ -98,41 +98,6 @@ class Submission(Base):
|
|||
if flag.user.shadowbanned:
|
||||
flags.remove(flag)
|
||||
return flags
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def options(self):
|
||||
return g.db.query(Comment).filter_by(parent_submission = self.id, author_id = AUTOPOLLER_ID, level=1).order_by(Comment.id).all()
|
||||
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def choices(self):
|
||||
return g.db.query(Comment).filter_by(parent_submission = self.id, author_id = AUTOCHOICE_ID, level=1).order_by(Comment.id).all()
|
||||
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def bet_options(self):
|
||||
return g.db.query(Comment).filter_by(parent_submission = self.id, author_id = AUTOBETTER_ID, level=1).all()
|
||||
|
||||
def total_poll_voted(self, v):
|
||||
if v:
|
||||
for option in self.options:
|
||||
if option.poll_voted(v): return True
|
||||
return False
|
||||
|
||||
def total_choice_voted(self, v):
|
||||
if v and self.choices:
|
||||
return g.db.query(CommentVote).filter(CommentVote.user_id == v.id, CommentVote.comment_id.in_([x.id for x in self.choices])).all()
|
||||
return False
|
||||
|
||||
def total_bet_voted(self, v):
|
||||
if "closed" in self.body.lower(): return True
|
||||
if v:
|
||||
for option in self.bet_options:
|
||||
if option.poll_voted(v): return True
|
||||
return False
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -405,41 +370,6 @@ class Submission(Base):
|
|||
g.db.add(self)
|
||||
g.db.commit()
|
||||
|
||||
for c in self.options:
|
||||
body += f'<div class="custom-control"><input type="checkbox" class="custom-control-input" id="{c.id}" name="option"'
|
||||
if c.poll_voted(v): body += " checked"
|
||||
if v: body += f''' onchange="poll_vote('{c.id}', '{self.id}')"'''
|
||||
else: body += f''' onchange="poll_vote_no_v('{c.id}', '{self.id}')"'''
|
||||
body += f'''><label class="custom-control-label" for="{c.id}">{c.body_html}<span class="presult-{self.id}'''
|
||||
if not self.total_poll_voted(v): body += ' d-none'
|
||||
body += f'"> - <a href="/votes?link=t3_{c.id}"><span id="poll-{c.id}">{c.upvotes}</span> votes</a></span></label></div>'
|
||||
|
||||
if self.choices:
|
||||
curr = self.total_choice_voted(v)
|
||||
if curr: curr = " value=" + str(curr[0].comment_id)
|
||||
else: curr = ''
|
||||
body += f'<input class="d-none" id="current-{self.id}"{curr}>'
|
||||
|
||||
for c in self.choices:
|
||||
body += f'''<div class="custom-control"><input name="choice-{self.id}" autocomplete="off" class="custom-control-input" type="radio" id="{c.id}" onchange="choice_vote('{c.id}','{self.id}')"'''
|
||||
if c.poll_voted(v): body += " checked "
|
||||
body += f'''><label class="custom-control-label" for="{c.id}">{c.body_html}<span class="presult-{self.id}'''
|
||||
if not self.total_choice_voted(v): body += ' d-none'
|
||||
body += f'"> - <a href="/votes?link=t3_{c.id}"><span id="choice-{c.id}">{c.upvotes}</span> votes</a></span></label></div>'
|
||||
|
||||
for c in self.bet_options:
|
||||
body += f'''<div class="custom-control mt-3"><input autocomplete="off" class="custom-control-input bet" type="radio" id="{c.id}" onchange="bet_vote('{c.id}')"'''
|
||||
if c.poll_voted(v): body += " checked "
|
||||
if not (v and v.coins > 200) or self.total_bet_voted(v): body += " disabled "
|
||||
body += f'''><label class="custom-control-label" for="{c.id}">{c.body_html} - <a href="/votes?link=t3_{c.id}"><span id="bet-{c.id}">{c.upvotes}</span> bets</a>'''
|
||||
if not self.total_bet_voted(v):
|
||||
body += '''<span class="cost"> (cost of entry: 200 coins)</span>'''
|
||||
body += "</label>"
|
||||
if v and v.admin_level > 2:
|
||||
body += f'''<button class="btn btn-primary px-2 mx-2" style="font-size:10px;padding:2px;margin-top:-5px" onclick="post_toast(this,'/distribute/{c.id}')">Declare winner</button>'''
|
||||
body += "</div>"
|
||||
|
||||
|
||||
if self.author.sig_html and (self.author_id == MOOSE_ID or (not self.ghost and not (v and v.sigs_disabled))):
|
||||
body += f"<hr>{self.author.sig_html}"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue