def resume(self, admin_user_id=None): if self.state is Contest.PAUSED: self.state = Contest.STARTED self.save() LogEntry.resume_contest(self.id, admin_user_id) else: raise ContestStartedException
def stop(self, admin_user_id=None): if self.state is Contest.STARTED or self.state is Contest.PAUSED: self.state = Contest.STOPPED self.save() LogEntry.stop_contest(self.id, admin_user_id) else: raise ContestNotStartedException
def pause(self, admin_user_id=None): if self.state is Contest.STARTED: self.running_time = self.get_current_running_time() self.state = Contest.PAUSED self.save() LogEntry.pause_contest(self.id, admin_user_id) else: raise ContestNotStartedException
def start(self, admin_user_id=None): if self.state is Contest.UNASSIGNED: self.state = Contest.STARTED self.last_start_date = now() self.save() self._preset_scores() LogEntry.start_contest(self.id, admin_user_id) elif self.state is Contest.PAUSED: self.resume(admin_user_id) else: raise ContestStartedException
def skip_task(cls, contest_id, user_id, task_id): entry = cls.get_entry(contest_id, user_id, task_id) p = Participation.get_entry(contest_id, user_id) can_skip = p.skips_left > 0 and entry.can_skip() if can_skip: entry.skipped = True entry.save() p.skip_task() LogEntry.skip_task(contest_id, user_id, task_id) else: raise IntegrityError
def solve_task(cls, contest_id, user_id, task_id): entry = cls.get_entry(contest_id, user_id, task_id) if not entry.solved: if entry.skipped == True: score = cls.SKIPPED else: score = cls.FULL entry.score = score entry.solved = True entry._try_task() p = Participation.get_entry(contest_id, user_id) p.increment_score(score) LogEntry.solve_task(contest_id, user_id, task_id) else: raise IntegrityError
def fail_task(cls, contest_id, user_id, task_id): entry = cls.get_entry(contest_id, user_id, task_id) entry._try_task() LogEntry.fail_task(contest_id, user_id, task_id)