diff options
| author | 2021-03-12 14:14:12 +0200 | |
|---|---|---|
| committer | 2021-03-12 14:14:12 +0200 | |
| commit | de0bc6ea58a2766d9637af80e703e11291e424e1 (patch) | |
| tree | 221eeaf22a3e675234a926bd56c821bf6e37efc7 | |
| parent | The 'seen vote' emoji is now a random ducky. (diff) | |
Reviewer no longer subclasses Scheduler
It didn't make much sense for the Reviewer to subclasses Scheduler.
The Scheduler has methods that don't make sense to use on the Reviewer directly.
There is now a Scheduler object as an attribute of the Reviewer.
Interacting with it is done by adding __contains__, cancel, and cancel_all methods.
| -rw-r--r-- | bot/exts/recruitment/talentpool/_review.py | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/bot/exts/recruitment/talentpool/_review.py b/bot/exts/recruitment/talentpool/_review.py index adab1a907..beb4c130f 100644 --- a/bot/exts/recruitment/talentpool/_review.py +++ b/bot/exts/recruitment/talentpool/_review.py @@ -30,13 +30,17 @@ MAX_DAYS_IN_POOL = 30 MAX_MESSAGE_SIZE = 2000 -class Reviewer(Scheduler): +class Reviewer: """Schedules, formats, and publishes reviews of helper nominees.""" def __init__(self, name: str, bot: Bot, pool: 'TalentPool'): - super().__init__(name) self.bot = bot self._pool = pool + self._review_scheduler = Scheduler(name) + + def __contains__(self, user_id: int) -> bool: + """Return True if the user with ID user_id is scheduled for review, False otherwise.""" + return user_id in self._review_scheduler async def reschedule_reviews(self) -> None: """Reschedule all active nominations to be reviewed at the appropriate time.""" @@ -57,13 +61,17 @@ class Reviewer(Scheduler): inserted_at = isoparse(user_data['inserted_at']).replace(tzinfo=None) review_at = inserted_at + timedelta(days=MAX_DAYS_IN_POOL) - self.schedule_at(review_at, user_id, self.post_review(user_id, update_database=True)) + self._review_scheduler.schedule_at(review_at, user_id, self.post_review(user_id, update_database=True)) async def post_review(self, user_id: int, update_database: bool) -> None: """Format a generic review of a user and post it to the mod announcements channel.""" log.trace(f"Posting the review of {user_id}") nomination = self._pool.watched_users[user_id] + if not nomination: + log.trace(f"There doesn't appear to be an active nomination for {user_id}") + return + guild = self.bot.get_guild(Guild.id) channel = guild.get_channel(Channels.mod_announcements) member = guild.get_member(user_id) @@ -276,9 +284,27 @@ class Reviewer(Scheduler): return None await self.bot.api_client.patch(f"{self._pool.api_endpoint}/{nomination['id']}", json={"reviewed": True}) - if nomination["user"] in self: - self.cancel(nomination["user"]) + if nomination["user"] in self._review_scheduler: + self._review_scheduler.cancel(nomination["user"]) await self._pool.fetch_user_cache() return nomination["user"] + + def cancel(self, user_id: int) -> None: + """ + Cancels the review of the nominee with ID user_id. + + It's important to note that this applies only until reschedule_reviews is called again. + To permenantly cancel someone's review, either remove them from the pool, or use mark_reviewed. + """ + self._review_scheduler.cancel(user_id) + + def cancel_all(self) -> None: + """ + Cancels all reviews. + + It's important to note that this applies only until reschedule_reviews is called again. + To permenantly cancel someone's review, either remove them from the pool, or use mark_reviewed. + """ + self._review_scheduler.cancel_all() |