def render_params(self): """Return the default render params used by almost all handlers. return (dict): default render params """ ret = {} ret["timestamp"] = int(time.time()) ret["contest"] = self.contest ret["url_root"] = get_url_root(self.request.path) ret["valid_phase_end"] = self.contest.stop if self.contest is not None: ret["phase"] = self.contest.phase(ret["timestamp"]) # If we have a user logged in, the contest may be ended # before contest.stop if the user has finished the time # allocated for him/her. if ret["phase"] == 0 and self.current_user is not None and self.contest.per_user_time is not None: delta = ret["timestamp"] - self.current_user.starting_time if delta >= self.contest.per_user_time: ret["phase"] = 1 user_end_time = self.current_user.starting_time + self.contest.per_user_time if user_end_time < self.contest.stop: ret["valid_phase_end"] = user_end_time ret["contest_list"] = self.sql_session.query(Contest).all() ret["cookie"] = str(self.cookies) return ret
def render_params(self): """Return the default render params used by almost all handlers. return (dict): default render params """ params = {} params["rtd_version"] = "latest" if "dev" in __version__ \ else "v" + __version__[:3] params["timestamp"] = make_datetime() params["contest"] = self.contest params["url_root"] = get_url_root(self.request.path) if self.current_user is not None: params["current_user"] = self.current_user if self.contest is not None: params["phase"] = self.contest.phase(params["timestamp"]) # Keep "== None" in filter arguments. SQLAlchemy does not # understand "is None". params["unanswered"] = self.sql_session.query(Question)\ .join(Participation)\ .filter(Participation.contest_id == self.contest.id)\ .filter(Question.reply_timestamp == None)\ .filter(Question.ignored == False)\ .count() # noqa # TODO: not all pages require all these data. params["contest_list"] = self.sql_session.query(Contest).all() params["task_list"] = self.sql_session.query(Task).all() params["user_list"] = self.sql_session.query(User).all() params["team_list"] = self.sql_session.query(Team).all() return params
def render_params(self): """Return the default render params used by almost all handlers. return (dict): default render params """ params = {} params["timestamp"] = int(time.time()) params["contest"] = self.contest params["url_root"] = get_url_root(self.request.path) if self.contest is not None: params["phase"] = self.contest.phase(params["timestamp"]) # Keep "== None" in filter arguments params["unanswered"] = self.sql_session.query(Question)\ .join(User)\ .filter(User.contest_id == self.contest.id)\ .filter(Question.reply_timestamp == None)\ .filter(Question.ignored == False)\ .count() params["contest_list"] = self.sql_session.query(Contest).all() params["cookie"] = str(self.cookies) return params
def render_params(self): """Return the default render params used by almost all handlers. return (dict): default render params """ ret = {} ret["timestamp"] = self.timestamp ret["contest"] = self.contest ret["url_root"] = get_url_root(self.request.path) ret["phase"] = self.contest.phase(self.timestamp) ret["printing_enabled"] = (config.printer is not None) ret["questions_enabled"] = self.contest.allow_questions ret["testing_enabled"] = self.contest.allow_user_tests if self.current_user is not None: participation = self.current_user res = compute_actual_phase(self.timestamp, self.contest.start, self.contest.stop, self.contest.per_user_time, participation.starting_time, participation.delay_time, participation.extra_time) ret["actual_phase"], ret["current_phase_begin"], \ ret["current_phase_end"], ret["valid_phase_begin"], \ ret["valid_phase_end"] = res if ret["actual_phase"] == 0: ret["phase"] = 0 # set the timezone used to format timestamps ret["timezone"] = get_timezone(participation.user, self.contest) # some information about token configuration ret["tokens_contest"] = self._get_token_status(self.contest) t_tokens = sum(self._get_token_status(t) for t in self.contest.tasks) if t_tokens == 0: ret["tokens_tasks"] = 0 # all disabled elif t_tokens == 2 * len(self.contest.tasks): ret["tokens_tasks"] = 2 # all infinite else: ret["tokens_tasks"] = 1 # all finite or mixed # TODO Now all language names are shown in the active language. # It would be better to show them in the corresponding one. ret["lang_names"] = {} # Get language codes for allowed localizations lang_codes = self.langs.keys() if len(self.contest.allowed_localizations) > 0: lang_codes = filter_language_codes( lang_codes, self.contest.allowed_localizations) for lang_code, trans in self.langs.iteritems(): language_name = None # Filter lang_codes with allowed localizations if lang_code not in lang_codes: continue try: language_name = translate_language_country_code( lang_code, trans) except ValueError: language_name = translate_language_code(lang_code, trans) ret["lang_names"][lang_code.replace("_", "-")] = language_name ret["cookie_lang"] = self.cookie_lang ret["browser_lang"] = self.browser_lang if self.current_user is not None: tree_menu = {'childs': {}, 'tasks': []} for t in self.contest.tasks: if not self.contest.restrict_level or self.current_user.user.level == t.level or self.current_user.user.level == "x" or t.level == "x": node = tree_menu if t.category: for subcat in t.category.split('.'): if subcat not in node['childs']: node['childs'][subcat] = { 'childs': {}, 'tasks': [] } node = node['childs'][subcat] node['tasks'].append(t) def make_list(tree, result, ancname="root"): for name in sorted(tree['childs']): fullname = ancname + '.' + name result.append({ 'type': 'startcat', 'name': name, 'fullname': fullname, 'parent': ancname }) make_list(tree['childs'][name], result, fullname) result.append({'type': 'endcat'}) for t in sorted(tree['tasks'], key=lambda t: t.name): result.append({ 'type': 'task', 'task': t, 'parent': ancname }) ret['list_tree_menu'] = [] make_list(tree_menu, ret['list_tree_menu']) return ret
def render_params(self): """Return the default render params used by almost all handlers. return (dict): default render params """ ret = {} ret["timestamp"] = self.timestamp ret["contest"] = self.contest ret["url_root"] = get_url_root(self.request.path) ret["phase"] = self.contest.phase(self.timestamp) ret["printing_enabled"] = (config.printer is not None) ret["questions_enabled"] = self.contest.allow_questions ret["testing_enabled"] = self.contest.allow_user_tests if self.current_user is not None: participation = self.current_user res = compute_actual_phase( self.timestamp, self.contest.start, self.contest.stop, self.contest.per_user_time, participation.starting_time, participation.delay_time, participation.extra_time) ret["actual_phase"], ret["current_phase_begin"], \ ret["current_phase_end"], ret["valid_phase_begin"], \ ret["valid_phase_end"] = res if ret["actual_phase"] == 0: ret["phase"] = 0 # set the timezone used to format timestamps ret["timezone"] = get_timezone(participation.user, self.contest) # some information about token configuration ret["tokens_contest"] = self._get_token_status(self.contest) t_tokens = sum(self._get_token_status(t) for t in self.contest.tasks) if t_tokens == 0: ret["tokens_tasks"] = 0 # all disabled elif t_tokens == 2 * len(self.contest.tasks): ret["tokens_tasks"] = 2 # all infinite else: ret["tokens_tasks"] = 1 # all finite or mixed # TODO Now all language names are shown in the active language. # It would be better to show them in the corresponding one. ret["lang_names"] = {} # Get language codes for allowed localizations lang_codes = self.langs.keys() if len(self.contest.allowed_localizations) > 0: lang_codes = filter_language_codes( lang_codes, self.contest.allowed_localizations) for lang_code, trans in self.langs.iteritems(): language_name = None # Filter lang_codes with allowed localizations if lang_code not in lang_codes: continue try: language_name = translate_language_country_code( lang_code, trans) except ValueError: language_name = translate_language_code( lang_code, trans) ret["lang_names"][lang_code.replace("_", "-")] = language_name ret["cookie_lang"] = self.cookie_lang ret["browser_lang"] = self.browser_lang return ret
def render_params(self): """Return the default render params used by almost all handlers. return (dict): default render params """ ret = {} ret["timestamp"] = self.timestamp ret["contest"] = self.contest ret["url_root"] = get_url_root(self.request.path) ret["phase"] = self.contest.phase(self.timestamp) ret["printing_enabled"] = (config.printer is not None) ret["questions_enabled"] = self.contest.allow_questions ret["testing_enabled"] = self.contest.allow_user_tests if self.current_user is not None: participation = self.current_user res = compute_actual_phase( self.timestamp, self.contest.start, self.contest.stop, self.contest.per_user_time, participation.starting_time, participation.delay_time, participation.extra_time) ret["actual_phase"], ret["current_phase_begin"], \ ret["current_phase_end"], ret["valid_phase_begin"], \ ret["valid_phase_end"] = res if ret["actual_phase"] == 0: ret["phase"] = 0 # set the timezone used to format timestamps ret["timezone"] = get_timezone(participation.user, self.contest) # some information about token configuration ret["tokens_contest"] = self._get_token_status(self.contest) t_tokens = sum(self._get_token_status(t) for t in self.contest.tasks) if t_tokens == 0: ret["tokens_tasks"] = 0 # all disabled elif t_tokens == 2 * len(self.contest.tasks): ret["tokens_tasks"] = 2 # all infinite else: ret["tokens_tasks"] = 1 # all finite or mixed # TODO Now all language names are shown in the active language. # It would be better to show them in the corresponding one. ret["lang_names"] = {} # Get language codes for allowed localizations lang_codes = self.langs.keys() if len(self.contest.allowed_localizations) > 0: lang_codes = filter_language_codes( lang_codes, self.contest.allowed_localizations) for lang_code, trans in self.langs.iteritems(): language_name = None # Filter lang_codes with allowed localizations if lang_code not in lang_codes: continue try: language_name = translate_language_country_code( lang_code, trans) except ValueError: language_name = translate_language_code( lang_code, trans) ret["lang_names"][lang_code.replace("_", "-")] = language_name ret["cookie_lang"] = self.cookie_lang ret["browser_lang"] = self.browser_lang if self.current_user is not None: tree_menu = {'childs':{}, 'tasks': []} for t in self.contest.tasks: if not self.contest.restrict_level or self.current_user.user.level == t.level or self.current_user.user.level == "x" or t.level == "x": node = tree_menu if t.category: for subcat in t.category.split('.'): if subcat not in node['childs']: node['childs'][subcat] = {'childs':{}, 'tasks': []} node = node['childs'][subcat] node['tasks'].append(t) def make_list(tree, result, ancname="root"): for name in sorted(tree['childs']): fullname = ancname+'.'+name result.append({'type': 'startcat', 'name' : name, 'fullname' : fullname, 'parent' : ancname}) make_list(tree['childs'][name], result, fullname) result.append({'type': 'endcat'}) for t in sorted(tree['tasks'], key=lambda t: t.name): result.append({'type': 'task', 'task' : t, 'parent' : ancname}) ret['list_tree_menu'] = [] make_list(tree_menu, ret['list_tree_menu']) return ret