Change ElectionCycle class to Election. Change ElectionCycle column in database to ElectionName. Update some variables for clarification.

This commit is contained in:
2024-09-03 11:24:28 -04:00
parent 306e0d687a
commit eb5102578d
10 changed files with 71 additions and 79 deletions
@@ -31,9 +31,9 @@ from utils import (
REQUIRED_VOTES_TO_BE_ELECTED = 3
class ElectionCycle:
class Election:
"""
ElectionCycle class.
Election class.
This class represents all the dates required for an election cycle along with all the functions needed to operate
the cycle.
@@ -183,7 +183,7 @@ class ElectionCycle:
# create new entry into database.
with Session(engine) as session:
new_cycle = ElectionInformation(
ElectionCycle=quarter_name,
ElectionName=quarter_name,
ThreadId=thread.id,
CouncilNominationMsgId=nominate_msg.id,
)
@@ -206,9 +206,7 @@ class ElectionCycle:
)
with Session(engine) as session:
stmt = select(ElectionInformation).where(
ElectionInformation.ElectionCycle == get_election_name(self.config)
)
stmt = select(ElectionInformation).where(ElectionInformation.ElectionName == get_election_name(self.config))
info = session.scalar(stmt)
info.CouncilVoteMsgId = vote_msg.id
session.commit()
@@ -231,7 +229,7 @@ class ElectionCycle:
with Session(engine) as session:
# remove vote button from vote message
stmt = select(ElectionInformation).where(ElectionInformation.ElectionCycle == election_name)
stmt = select(ElectionInformation).where(ElectionInformation.ElectionName == election_name)
info = session.scalar(stmt)
vote_msg: nextcord.Message = await election_thread.fetch_message(info.CouncilVoteMsgId)
await vote_msg.edit(view=None)
@@ -243,7 +241,7 @@ class ElectionCycle:
# add the highcouncil role to everyone with 3 or more votes. set elected to true in database
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_name)
.where(Votes.ElectionName == election_name)
.where(Votes.Type == VoteType.COUNCIL)
)
vote_count = collections.Counter(session.scalars(stmt))
@@ -252,7 +250,7 @@ class ElectionCycle:
if votes >= REQUIRED_VOTES_TO_BE_ELECTED:
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == election_name)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == user_id)
)
council_member = session.scalar(stmt)
@@ -277,9 +275,7 @@ class ElectionCycle:
)
with Session(engine) as session:
stmt = select(ElectionInformation).where(
ElectionInformation.ElectionCycle == get_election_name(self.config)
)
stmt = select(ElectionInformation).where(ElectionInformation.ElectionName == get_election_name(self.config))
info = session.scalar(stmt)
info.HighCouncilVoteMsgId = vote_msg.id
session.commit()
@@ -295,13 +291,13 @@ class ElectionCycle:
elect_role: nextcord.Role = self.guild.get_role(self.config.params.clan_council_elect_role_id)
council_role: nextcord.Role = self.guild.get_role(self.config.params.clan_council_role_id)
election_cycle = get_election_name(self.config)
election_name = get_election_name(self.config)
with Session(engine) as session:
# role management
stmt = (
select(CouncilMembers.MemberId)
.where(CouncilMembers.ElectionCycle == election_cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.Elected == true())
)
@@ -320,13 +316,13 @@ class ElectionCycle:
# ties are undefined behavior.
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_cycle)
.where(Votes.ElectionName == election_name)
.where(Votes.Type == VoteType.DISCORDMANAGER)
)
dm_votes = collections.Counter(session.scalars(stmt))
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_cycle)
.where(Votes.ElectionName == election_name)
.where(Votes.Type == VoteType.CLANLEADER)
)
cl_votes = collections.Counter(session.scalars(stmt))
@@ -335,7 +331,7 @@ class ElectionCycle:
dm_winner = max(dm_votes, key=dm_votes.get)
stmt = (
update(CouncilMembers)
.where(CouncilMembers.ElectionCycle == election_cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == dm_winner)
.values(DiscordManager=True)
)
@@ -346,7 +342,7 @@ class ElectionCycle:
cl_winner = max(cl_votes, key=cl_votes.get)
stmt = (
update(CouncilMembers)
.where(CouncilMembers.ElectionCycle == election_cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == cl_winner)
.values(ClanLeader=True)
)
@@ -360,7 +356,7 @@ class ElectionCycle:
# clear view from vote message
stmt = select(ElectionInformation.HighCouncilVoteMsgId).where(
ElectionInformation.ElectionCycle == get_election_name(self.config)
ElectionInformation.ElectionName == get_election_name(self.config)
)
vote_msg_id = session.scalar(stmt)
vote_msg: nextcord.Message = await election_thread.fetch_message(vote_msg_id)
@@ -383,9 +379,7 @@ class ElectionCycle:
ElectionInformation: The information from the database about the current election.
"""
with Session(engine) as session:
stmt = select(ElectionInformation).where(
ElectionInformation.ElectionCycle == get_election_name(self.config)
)
stmt = select(ElectionInformation).where(ElectionInformation.ElectionName == get_election_name(self.config))
return session.scalar(stmt)
async def election_reminder(self) -> None:
+8 -8
View File
@@ -58,10 +58,10 @@ class NominateDMModal(nextcord.ui.Modal):
with Session(engine) as session:
# user already in table
cycle = get_election_name(self.config)
election_name = get_election_name(self.config)
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == self.usr_id)
)
council_elect = session.scalar(stmt)
@@ -120,10 +120,10 @@ class NominateCLModal(nextcord.ui.Modal):
with Session(engine) as session:
# user already in table
cycle = get_election_name(self.config)
election_name = get_election_name(self.config)
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == self.usr_id)
)
council_elect = session.scalar(stmt)
@@ -170,13 +170,13 @@ class NominateHighCouncilView(nextcord.ui.View):
)
return
cycle = get_election_name(self.config)
election_name = get_election_name(self.config)
usr_nominated = False
speech_content = ""
with Session(engine) as session:
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == interaction.user.id)
)
obj = session.scalar(stmt)
@@ -215,13 +215,13 @@ class NominateHighCouncilView(nextcord.ui.View):
)
return
cycle = get_election_name(self.config)
election_name = get_election_name(self.config)
usr_nominated = False
speech_content = ""
with Session(engine) as session:
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == interaction.user.id)
)
obj = session.scalar(stmt)
+6 -6
View File
@@ -50,13 +50,14 @@ class NominateModal(nextcord.ui.Modal):
"""
speech = decorate_nomination(interaction.user.id, self.speech.value)
election_name = get_election_name(self.config)
with Session(engine) as session:
if not self.usr_nominated:
msg = await interaction.channel.send(speech)
council_member = CouncilMembers(
ElectionCycle=get_election_name(self.config),
ElectionName=election_name,
MemberId=interaction.user.id,
SpeechMsgId=msg.id,
)
@@ -64,10 +65,9 @@ class NominateModal(nextcord.ui.Modal):
session.commit()
else:
# user already nominated, just need to update the election speech
cycle = get_election_name(self.config)
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == self.usr_id)
)
obj = session.scalar(stmt)
@@ -91,7 +91,7 @@ class NominateView(nextcord.ui.View):
)
async def nominate(self, button: nextcord.ui.Button, interaction: nextcord.Interaction) -> None: # noqa: ARG002
"""
Button to nominate onself for Clan Council.
Button to nominate oneself for Clan Council.
Gathers previous information about the user if they have already nominated themselves, then launches
the nomination modal to get their speech.
@@ -108,13 +108,13 @@ class NominateView(nextcord.ui.View):
)
return
cycle = get_election_name(self.config)
election_name = get_election_name(self.config)
usr_nominated = False
speech_content = ""
with Session(engine) as session:
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionName == election_name)
.where(CouncilMembers.MemberId == interaction.user.id)
)
obj = session.scalar(stmt)
+7 -7
View File
@@ -41,14 +41,14 @@ class VoteSelect(nextcord.ui.StringSelect):
election_name: str = get_election_name(self.config)
with Session(engine) as session:
stmt = select(ElectionInformation.HighCouncilVoteMsgId).where(
ElectionInformation.ElectionCycle == election_name
ElectionInformation.ElectionName == election_name
)
vote_msg_id = session.scalar(stmt)
voted_for = None if self.values[0] == "Abstain" else int(self.values[0])
new_vote = Votes(
ElectionCycle=election_name,
ElectionName=election_name,
VoterId=interaction.user.id,
VotedForId=voted_for,
Type=self.election_type,
@@ -63,7 +63,7 @@ class VoteSelect(nextcord.ui.StringSelect):
session.rollback()
stmt = (
update(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.ElectionName == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == self.election_type)
.values(VotedForId=voted_for)
@@ -118,7 +118,7 @@ class VoteHighcouncilView(nextcord.ui.View):
with Session(engine) as session:
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_name)
.where(Votes.ElectionName == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.CLANLEADER)
)
@@ -126,7 +126,7 @@ class VoteHighcouncilView(nextcord.ui.View):
stmt = (
select(CouncilMembers.MemberId)
.where(CouncilMembers.ElectionCycle == election_name)
.where(CouncilMembers.ElectionName == election_name)
.filter(CouncilMembers.ClanLeaderSpeechId.is_not(None))
)
@@ -190,7 +190,7 @@ class VoteHighcouncilView(nextcord.ui.View):
with Session(engine) as session:
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_name)
.where(Votes.ElectionName == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.DISCORDMANAGER)
)
@@ -198,7 +198,7 @@ class VoteHighcouncilView(nextcord.ui.View):
stmt = (
select(CouncilMembers.MemberId)
.where(CouncilMembers.ElectionCycle == election_name)
.where(CouncilMembers.ElectionName == election_name)
.filter(CouncilMembers.DiscordManagerSpeechId.is_not(None))
)
+6 -8
View File
@@ -39,15 +39,13 @@ class VoteSelect(nextcord.ui.StringSelect):
"""
election_name = get_election_name(self.config)
with Session(engine) as session:
stmt = select(ElectionInformation.CouncilVoteMsgId).where(
ElectionInformation.ElectionCycle == election_name
)
stmt = select(ElectionInformation.CouncilVoteMsgId).where(ElectionInformation.ElectionName == election_name)
vote_msg_id = session.scalar(stmt)
voted_for = None if self.values[0] == "Abstain" else int(self.values[0])
new_vote = Votes(
ElectionCycle=election_name,
ElectionName=election_name,
VoterId=interaction.user.id,
VotedForId=voted_for,
Type=VoteType.COUNCIL,
@@ -61,7 +59,7 @@ class VoteSelect(nextcord.ui.StringSelect):
session.rollback()
stmt = (
update(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.ElectionName == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.COUNCIL)
.values(VotedForId=voted_for)
@@ -106,18 +104,18 @@ class VoteView(nextcord.ui.View):
)
return
election: str = get_election_name(self.config)
election_name: str = get_election_name(self.config)
with Session(engine) as session:
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election)
.where(Votes.ElectionName == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.COUNCIL)
)
voted_for = session.scalar(stmt)
stmt = select(CouncilMembers.MemberId).where(CouncilMembers.ElectionCycle == election)
stmt = select(CouncilMembers.MemberId).where(CouncilMembers.ElectionName == election_name)
options = [
SelectOption(