def post_competition(self): """Reads common info about competition and statistic flags from post-request and fills template's values""" try: errors = [] start_date = self.request.POST['dateStartNew'] #if start_date >= datetime.now(): # TODO: error because start_date is string not datetime object. Convert string to date # pass finish_date = self.request.POST['dateFinishNew'] #if finish_date >= datetime.now(): # pass#errors.append('Finish date in the past') comp_name = self.request.POST['nameCompNew'] d_count = int(self.request.POST['dayCount']) show_places = self.request.POST['writePlaces'] show_map = self.request.POST['showMap'] stat_day = read_checkbox_post(self, 'statistic0') #TODO: fix statistic stat_sex = read_checkbox_post(self, 'statistic1') stat_qual = read_checkbox_post(self, 'statistic2') except KeyError: errors.append('Key error at request') competition = Competition(name=comp_name, d_start=date_to_python(start_date), d_finish=date_to_python(finish_date), days_count=d_count)#, statistic=[stat_day, stat_sex, stat_qual]) competition.put() temp_values = {'start': start_date, 'finish': finish_date, 'name': comp_name, 'show_places': show_places, 'show_map': show_map, 'days_count': range(1, int(d_count) + 1)} return [competition, temp_values, errors]
def get(self): """Displays list of all members in system to mark whom will take a part in competition""" login = users.create_login_url(dest_url="/postSignIn") comp_key = self.request.GET["competition"] comp = Competition.get(comp_key) membs = db.Query(Member).order("surname") keys_in_comp = [] keys_not_in = [] memb_not_in = [] memb_in_comp = [] membs_comps = db.Query(CompMemb).filter("competition =", comp).order("member").run(batch_size=10000) for m in membs_comps: if m.member.key() not in keys_in_comp: memb_in_comp.append(m.member) keys_in_comp.append(m.member.key()) for m in membs: if m.key() not in keys_in_comp: keys_not_in.append(m.key()) memb_not_in.append(m) temp_values = { "login": login, "logout": users.create_logout_url("/login"), "name": comp.name, "membs_count": membs.count(), "membs_in": memb_in_comp, "membs_not": memb_not_in, "keys_in": keys_in_comp, "keys_not": keys_not_in, "competition": comp_key, } template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/MemberList.html") self.response.write(template.render(temp_values))
def post(self): """Saves members that will take a part in competition to database""" user = users.get_current_user() if not user: show_unauth_page(self) else: email = user.email() [is_org, is_lead, is_memb] = OtherHandlers.find_user(email) if is_lead and self.session.get("role") == "leader": days_checked_count = int(self.request.POST.get("daysCheckedCount")) comp_key = self.request.POST.get("competition") competition = Competition.get(comp_key) dist_query = db.Query(Distance).filter("competition =", competition) distances = dist_query.run(batch_size=1000) distinfos = [] # all groups of all days for dist in distances: distinfo = ( db.Query(DistInfo).filter("distance =", dist).run() ) # all groups for that day (=distance) distinfos.append(distinfo) for i_day in range(days_checked_count): # runs through all days one by one memb_count_i_day = int(self.request.POST.get("membsInDay%s" % str(i_day))) for j_memb in range(memb_count_i_day): # runs through all member of i- day memb_group = self.request.POST.get("checkMembGroup%s" % str(i_day) + "_%s" % str(j_memb)) keys = memb_group.split("_") member = Member.get(keys[0]) group_code = keys[1] CompMemb(competition=competition, member=member, group=group_code, day_numb=i_day + 1).put() time.sleep(0.1) self.redirect("/competition?dbKey=%s" % comp_key) else: show_unauth_page(self)
def get(self): """Displays empty form to enter password of current user""" login = users.create_login_url(dest_url="/postSignIn") comp_key = self.request.GET["competition"] memb_key = self.request.GET["member"] comp = Competition.get(comp_key) member = Member.get(memb_key) try: self.request.GET["tooltip"] tooltip = u"Неверный пароль подтверждения. Попробуйте еще раз" except: tooltip = "" temp_values = { "login": login, "logout": users.create_logout_url("/login"), "name": comp.name, "competition": comp_key, "memb_key": memb_key, "surname": member.surname, "team": member.command.name, "card_title": u"Удаление участника из заявки", "tooltip": tooltip, } template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/EnterPass.html") self.response.write(template.render(temp_values))
def post(self): """Displays group of current competition to check member""" login = users.create_login_url(dest_url="/postSignIn") memb_key = self.request.POST.get("member") memb = Member.get(memb_key) comp_key = self.request.POST.get("competition") comp = Competition.get(comp_key) distances = db.Query(Distance).filter("competition =", comp).order("day_numb") groups_by_days = [] for dist in distances: groups_by_days.append(dist.distinfo_set.run(batch_size=100)) temp_values = { "login": login, "logout": users.create_logout_url("/login"), "name": comp.name, "surname": memb.surname, "team": memb.command.name, "memb_key": memb_key, "competition": comp_key, "card_title": u"Заявка участника", "dists": distances, "groups_by_day": groups_by_days, } template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/ToDaysGroups.html") self.response.write(template.render(temp_values))
def post(self): """Displays members added to current competition to check their groups""" user = users.get_current_user() if not user: show_unauth_page(self) else: email = user.email() [is_org, is_lead, is_memb] = OtherHandlers.find_user(email) roles = OtherHandlers.create_roles_head(self, is_org, is_lead, is_memb) if is_lead and self.session.get("role") == "leader": comp_key = self.request.POST.get("competition") competition = Competition.get(comp_key) days_count = competition.days_count membs_by_day = [] show_tables = False for i in range(days_count): # add members (keys) for each day membs_key_day = self.request.POST.getall("checkMemb" + str(i)) membs_i_day = [] for memb_key in membs_key_day: member = Member.get(memb_key) membs_i_day.append(member) if show_tables == False: show_tables = True membs_by_day.append(membs_i_day) show_arrow_back = True for membs_i_day in membs_by_day: if len(membs_i_day) > 0: show_arrow_back = False break dist_query = db.Query(Distance).filter("competition =", competition) distances = dist_query.run() type_lent = [] groups_on_day = [] for dist in distances: type_lent.append(dist.type + " " + dist.lent) dist_infos = dist.distinfo_set.run(batch_size=1000) groups_i_day = [] for info in dist_infos: groups_i_day.append(info.group_name) groups_on_day.append(groups_i_day) temp_values = { "roles": roles, "user_email": email, "logout": users.create_logout_url("/login"), "membs_by_day": membs_by_day, "dists": type_lent, "groups": groups_on_day, "comp_key": comp_key, "show_tables": show_tables, "show_arrow": show_arrow_back, } template = JINJA_ENVIRONMENT.get_template("templates/tmmosc/leader/MembersToDays.html") self.response.write(template.render(temp_values)) else: show_unauth_page(self)
def post(self): """Deletes certain user from current competition""" memb_key = self.request.POST.get("member") member = Member.get(memb_key) paswd = self.request.POST.get("changePass") comp_key = self.request.POST.get("competition") comp = Competition.get(comp_key) if salt_pass(paswd) == member.pass_to_edit: comp_membs = CompMemb.all().filter("member =", member).filter("competition =", comp) db.delete(comp_membs) time.sleep(0.1) self.redirect("/entryOneMemb?competition=" + comp_key) else: self.redirect("/deleteFromComp?competition=" + comp_key + "&member=" + memb_key + "&tooltip=True")
def get(self): """Displays list of team members to mark some on current competition""" user = users.get_current_user() if not user: show_unauth_page(self) else: email = user.email() [is_org, is_lead, is_memb] = OtherHandlers.find_user(email) roles = OtherHandlers.create_roles_head(self, is_org, is_lead, is_memb) if is_lead and self.session.get("role") == "leader": comp_key = self.request.GET["competition"] competition = Competition.get(comp_key) leader = db.Query(Leader).filter("user ="******"command =", team).order("surname") memb_team = team_q.run(batch_size=1000) entry_membs = [] no_entry_membs = [] days = [] for memb in memb_team: m = db.Query(CompMemb).filter("competition =", competition).filter("member =", memb) membs = m.run() if m.count(): entry_membs.append(memb) m_d = [] for mem in membs: m_d.append(mem.day_numb) days.append(m_d) else: no_entry_membs.append(memb) temp_values = { "roles": roles, "user_email": email, "logout": users.create_logout_url("/login"), "team_name": team.name, "membs_count": team_q.count(), "entry_membs": entry_membs, "no_entry_membs": no_entry_membs, "comp_name": competition.name, "days_count": range(1, int(competition.days_count) + 1), "comp_key": comp_key, "days": days, } template = JINJA_ENVIRONMENT.get_template("templates/tmmosc/leader/MembersToCompetition.html") self.response.write(template.render(temp_values)) else: show_unauth_page(self)
def get(self): """Displays list of competition""" try: loc_role = self.session.get('role') except: loc_role = 'anonim' comps = Competition.all().order('d_start') comps_count = comps.count() d_start = [] d_finish = [] pzs = [] is_open_pz = [] for c in comps: d_start.append(str(c.d_start)) d_finish.append(str(c.d_finish)) infos_of_comp = c.info_set.run(batch_size=1000) is_open = False for info_of_day in infos_of_comp: is_open = is_open or (info_of_day.pz_is_open and (datetime.today().date() < info_of_day.pz_add_end)) is_open_pz.append(is_open) d_start = format_date_list(d_start) d_finish = format_date_list(d_finish) user = users.get_current_user() temp_values = {'comps': comps, 'c_count': comps_count, 'd_start': d_start, 'd_finish': d_finish, 'pzs': pzs, 'is_open_pz': is_open_pz} if not user: # user is anonim login = users.create_login_url(dest_url='/postSignIn') temp_values.update({'login': login, 'is_user': False}) template = JINJA_ENVIRONMENT.get_template('/templates/tmmosc/CompetitionList.html') else: email = user.email() [is_org, is_lead, is_memb] = find_user(email) roles = create_roles_head(self, is_org, is_lead, is_memb) temp_values.update({'user_email': email, 'roles': roles, 'logout': users.create_logout_url('/login'), 'is_user': True}) try: # show compList corresponding to user's role template = JINJA_ENVIRONMENT.get_template('/templates/tmmosc/%s/CompetitionList.html' % loc_role) except: # user is anonim login = users.create_login_url(dest_url='/postSignIn') temp_values = {'login': login, 'comps': comps, 'c_count': comps_count, 'd_start': d_start, 'd_finish': d_finish, 'pzs': pzs, 'is_open_pz': is_open_pz, 'logout': users.create_logout_url('/login')} template = JINJA_ENVIRONMENT.get_template('/templates/tmmosc/CompetitionList.html') self.response.write(template.render(temp_values))
def post(self): """Saves current member to database so that he will take a part in competition""" memb_key = self.request.POST.get("member") memb = Member.get(memb_key) paswd = self.request.POST.get("changePass") comp_key = self.request.POST.get("competition") comp = Competition.get(comp_key) if salt_pass(paswd) == memb.pass_to_edit: for i in range(comp.days_count): infos_count = int(self.request.POST.get("infosCount%s" % str(i))) for group_num in range(infos_count): checked_group = self.request.POST.get("checkMembGroup%s" % (str(i) + str(group_num))) if checked_group: entry = CompMemb(competition=comp, member=memb, group=checked_group, day_numb=i + 1) entry.put() time.sleep(0.1) self.redirect("/entryOneMemb?competition=" + comp_key) else: login = users.create_login_url(dest_url="/postSignIn") distances = db.Query(Distance).filter("competition =", comp).order("day_numb") groups_by_days = [] for dist in distances: groups_by_days.append(dist.distinfo_set.run(batch_size=100)) temp_values = { "login": login, "logout": users.create_logout_url("/login"), "name": comp.name, "surname": memb.surname, "team": memb.command.name, "memb_key": memb_key, "competition": comp_key, "card_title": u"Заявка участника", "dists": distances, "groups_by_day": groups_by_days, "tooltip": u"Неверный пароль подтверждения. Попробуйте еще раз", } template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/ToDaysGroups.html") self.response.write(template.render(temp_values))
def get(self): """Displays info about competition stored in database""" user = users.get_current_user() key = self.request.GET['dbKey'] comp = Competition.get(key) info_values = info_from_db(comp) diz_values = diz_from_db(comp) memb_values = membs_from_db(comp) temp_values = {'start': format_date(str(comp.d_start)), 'finish': format_date(str(comp.d_finish)), 'name': comp.name, 'days_count': range(1, comp.days_count + 1), 'comp_id': comp.key()} temp_values.update(info_values) temp_values.update(diz_values) temp_values.update(memb_values) if not user: # user is anonim login = users.create_login_url(dest_url='/postSignIn') temp_values.update({'action': '/entryOneMemb', 'login': login}) template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/CertainCompetition.html') else: email = user.email() [is_org, is_lead, is_memb] = OtherHandlers.find_user(email) roles = OtherHandlers.create_roles_head(self, is_org, is_lead, is_memb) temp_values.update({'roles': roles, 'user_email': email, 'logout': users.create_logout_url('/login')}) if is_org and self.session.get('role') == 'organizer': action = '' template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/organizer/CertainCompetition.html') elif is_lead and self.session.get('role') == 'leader': action = '/entryMembs' template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/leader/CertainCompetition.html') elif is_memb and self.session.get('role') == 'member': action = '/entryOneMemb' template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/member/CertainCompetition.html') else: action = '/entryOneMemb' template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/CertainCompetition.html') temp_values.update({'action': action}) self.response.write(template.render(temp_values))