Source code for oioioi.ctimes.views

import time
from datetime import timedelta  # pylint: disable=E0611

from django.utils import timezone

from oioioi.base.utils import allow_cross_origin, jsonify
from oioioi.contests.models import Round


@allow_cross_origin
@jsonify
[docs]def ctimes_view(request): now = request.timestamp contest = request.contest if contest is None: return {'status': 'NO_CONTEST'} def end_le(a, b): """Compare round ends. None means "round does not end", so it ends not earlier than any other.""" return True if b is None else b >= a ccontroller = contest.controller rounds = [ (ccontroller.get_round_times(request, round), round) for round in Round.objects.filter(contest=request.contest) ] rounds = [ (rtime, round) for (rtime, round) in rounds if end_le(now - timedelta(minutes=30), rtime.get_end()) ] def ctimes_sort_key(round_time): return ( not (round_time.get_start() <= now and end_le(now, round_time.get_end())), not round_time.get_start() - timedelta(minutes=5) <= now, round_time.get_end(), ) try: (rtime, round) = min(rounds, key=lambda x: ctimes_sort_key(x[0])) date_format = '%Y-%m-%d %H:%M:%S' start = timezone.localtime(rtime.get_start()) if rtime.get_end() is None: end = None else: end = timezone.localtime(rtime.get_end()) def to_seconds(date): return None if date is None else int(time.mktime(date.timetuple())) def format_date(date): return None if date is None else date.strftime(date_format) return { 'status': 'OK', 'round_name': round.name, 'start': format_date(start), 'start_sec': to_seconds(start), 'end': format_date(end), 'end_sec': to_seconds(end), } except ValueError: return { 'status': 'NO_ROUND', }