def rank(member, semester=get_current_semester()): paid = False num_semesters_paid_to_date = 0 for semester_paid in member.semesters_paid: if semester_paid <= semester: paid = True if semester_paid < semester: num_semesters_paid_to_date += 1 # Cadets cannot earn ranks if not paid: return 0 rank = 1 # Longevity if num_semesters_paid_to_date >= 4: rank += 1 # Led weekly mission if Mission.query(Mission.runners == member.id, Mission.type == 0, Mission.start < semester_date(semester)).count(limit=1) != 0: rank += 1 # Volunteered with special mission or committee if member.committee_rank or Mission.query(Mission.runners == member.id, Mission.type == 1, Mission.start < semester_date(semester)).count(limit=1) != 0: rank += 1 # Merit ranks if member.merit_rank1: rank += 1 if member.merit_rank2: rank += 1 # Voted captain if BridgeCrew.query(BridgeCrew.captain == member.id, BridgeCrew.start < semester_date(semester)).count(limit=1) != 0: rank = 6 # Alumni ranks if not member.current_student: if rank == 6: # Captains become rear admirals rank = 8 else: # Non-captains become commodores rank = 7 # Was an admiral (advisor) if BridgeCrew.query(BridgeCrew.admiral == member.id, BridgeCrew.start < semester_date(semester)).count(limit=1) != 0: rank = 10 return rank
def get(self): template_vals = { 'page': 'home' } # Get the next five missions. # Include missions happening today. now = datetime.now() today = datetime(now.year, now.month, now.day) template_vals['missions'] = Mission.query(Mission.start >= today).order(Mission.start).fetch(limit=5) template_vals['user'] = users.get_current_user() if template_vals['user']: template_vals['logout_url'] = users.create_logout_url(self.request.uri) else: template_vals['login_url'] = users.create_login_url(self.request.uri) # Pick an end quote. template_vals['end_quote'] = choice([ 'Live long and prosper.', 'May the Force be with you.', 'Never give up! Never surrender!' ]) template = JINJA_ENVIRONMENT.get_template('home.html') self.response.write(template.render(template_vals))
def get(self, args): if not users.is_current_user_admin(): self.error(403) return template_vals = {'title': 'Edit Mission', 'page': 'missions'} template_vals['user'] = users.get_current_user() template_vals['logout_url'] = users.create_logout_url(self.request.uri) req_id = self.request.get('id') if not req_id: new_mission = Mission() new_mission.name = 'New Mission' template_vals['mission'] = new_mission else: mission = Mission.query(Mission.id == req_id).get() if mission: template_vals['mission'] = mission else: self.error(404) return template_vals['semesters'] = get_all_semesters() template = JINJA_ENVIRONMENT.get_template('mission_edit.html') self.response.write(template.render(template_vals))
def get(self, req_id): template_vals = {'page': 'missions'} if not req_id: # Redirect to the missions page if no mission is specified. self.redirect('/missions') return mission = Mission.query(Mission.id == req_id).get() if not mission: # 404 if a nonexistent mission is specified self.error(404) return template_vals['mission'] = mission template_vals['title'] = mission.title # Get user data for the footer and admin controls. user = users.get_current_user() if user: template_vals['user'] = user template_vals['admin'] = users.is_current_user_admin() template_vals['logout_url'] = users.create_logout_url( self.request.uri) else: template_vals['login_url'] = users.create_login_url( self.request.uri) template = JINJA_ENVIRONMENT.get_template('mission_info.html') self.response.write(template.render(template_vals))
def get(self, args): template_vals = generate_base_template_vals(self) template_vals['title'] = 'Missions' template_vals['page'] = 'missions' # Get all users from the given semester try: selected_semester = float(self.request.get('semester')) except Exception: selected_semester = get_current_semester() next_semester_date = semester_date(next_semester(selected_semester)) selected_semester_date = semester_date(selected_semester) template_vals['missions'] = Mission.query(Mission.start >= semester_date(selected_semester), Mission.start < next_semester_date).order(Mission.start).fetch(limit=None) # Get all possible semesters to put in the menu. semesters = [] for semester in get_all_semesters(): semesters.append({ 'id': semester, 'pretty': semester_pretty(semester), 'selected': semester == selected_semester }) template_vals['semesters'] = semesters template_vals['prev_semester'] = prev_semester(selected_semester) if selected_semester != FIRST_SEMESTER else None template_vals['next_semester'] = next_semester(selected_semester) if selected_semester != get_current_semester() else None template = JINJA_ENVIRONMENT.get_template('missions_list.html') self.response.write(template.render(template_vals))
def get(self, args): if not require_admin(self): return template_vals = generate_base_template_vals(self) template_vals['title'] = 'Edit Mission' template_vals['page'] = 'missions' req_id = self.request.get('id') if not req_id: new_mission = Mission() new_mission.name = 'New Mission' template_vals['mission'] = new_mission else: mission = Mission.query(Mission.id == req_id).get() if mission: template_vals['mission'] = mission else: self.error(404) return template_vals['semesters'] = get_all_semesters() template = JINJA_ENVIRONMENT.get_template('mission_edit.html') self.response.write(template.render(template_vals))
def get(self, args): template_vals = generate_base_template_vals(self) template_vals['title'] = 'Missions' template_vals['page'] = 'missions' # Get all users from the given semester try: selected_semester = float(self.request.get('semester')) except Exception: selected_semester = get_current_semester() next_semester_date = semester_date(next_semester(selected_semester)) selected_semester_date = semester_date(selected_semester) template_vals['missions'] = Mission.query(Mission.start >= semester_date(selected_semester), Mission.start < next_semester_date).order(Mission.start).fetch(limit=None) # Get all possible semesters to put in the menu. semesters = [] for semester in get_all_semesters(): semesters.append({ 'id': semester, 'pretty': semester_pretty(semester), 'selected': semester == selected_semester }) template_vals['semesters'] = semesters template_vals['prev_semester'] = prev_semester(selected_semester) if selected_semester != FIRST_SEMESTER else None template_vals['next_semester'] = next_semester(selected_semester) if selected_semester != get_current_semester() else None template = JINJA_ENVIRONMENT.get_template('missions_list.html') self.response.write(template.render(template_vals))
def get(self, args): if not require_admin(self): return template_vals = generate_base_template_vals(self) template_vals['title'] = 'Edit Mission' template_vals['page'] = 'missions' req_id = self.request.get('id') if not req_id: new_mission = Mission() new_mission.name = 'New Mission' template_vals['mission'] = new_mission else: mission = Mission.query(Mission.id == req_id).get() if mission: template_vals['mission'] = mission else: self.error(404) return template_vals['semesters'] = get_all_semesters() template = JINJA_ENVIRONMENT.get_template('mission_edit.html') self.response.write(template.render(template_vals))
def post(self, args): if not users.is_current_user_admin(): self.error(403) return req_id = self.request.get('id') if not req_id: self.error(422) return mission = Mission.query(Mission.id == req_id).get() if not mission: mission = Mission() req_id = req_id.strip().lower().replace(' ', '-') mission.id = req_id # Update int values. for int_param in ['type']: req_val = self.request.get(int_param) if req_val or req_val == 0: req_val = int(req_val) setattr(mission, int_param, req_val) # Update string values. for str_param in [ 'title', 'description', 'location', 'wave_url', 'fb_url', 'gplus_url', 'the_link_url', 'youtube_url' ]: req_val = self.request.get(str_param) if req_val or req_val == '': req_val = urllib2.unquote(req_val) req_val = req_val.strip() setattr(mission, str_param, req_val) # Update date values. for date_param in ['start', 'end']: req_val = self.request.get(date_param) if req_val: req_val = urllib2.unquote(req_val) req_val = datetime.strptime(req_val, '%Y-%m-%dT%H:%M') setattr(mission, date_param, req_val) else: setattr(mission, date_param, None) # Update array values. req_runners = self.request.get('runners') if req_runners: req_runners = req_runners.replace(' ', '').split(',') mission.runners = req_runners else: mission.runners = [] # Save the updated mission. mission.put() self.redirect('/missions/' + mission.id, code=303)
def post(self, args): if not require_admin(self): return req_id = self.request.get('id') if not req_id: self.error(422) return mission = Mission.query(Mission.id == req_id).get() if not mission: mission = Mission() req_id = req_id.strip().lower().replace(' ', '-') mission.id = req_id # Update int values. for int_param in ['type']: req_val = self.request.get(int_param) if req_val or req_val == 0: req_val = int(req_val) setattr(mission, int_param, req_val) # Update string values. for str_param in ['title', 'description', 'location', 'wave_url', 'drive_url', 'intro_url', 'pres_url', 'sign_in_url', 'fb_url', 'gplus_url', 'the_link_url', 'youtube_url']: req_val = self.request.get(str_param) if req_val or req_val == '': req_val = urllib2.unquote(req_val) req_val = req_val.strip() setattr(mission, str_param, req_val) # Update date values. for date_param in ['start', 'end']: req_val = self.request.get(date_param) if req_val: req_val = urllib2.unquote(req_val) req_val = datetime.strptime(req_val, '%Y-%m-%dT%H:%M') setattr(mission, date_param, req_val) else: setattr(mission, date_param, None) # Update array values. req_runners = self.request.get('runners') if req_runners: req_runners = req_runners.replace(' ','').split(',') mission.runners = req_runners else: mission.runners = [] # Save the updated mission. mission.put() if not mission.start: self.redirect('/missions/hidden', code=303) return self.redirect('/missions/' + mission.id, code=303)
def get(self): if not require_admin(self): return template_vals = generate_base_template_vals(self) template_vals['title'] = 'Hidden Missions' template_vals['page'] = 'missions' template_vals['missions'] = Mission.query(ndb.OR(Mission.start == None)).order(Mission.id).fetch(limit=None) template = JINJA_ENVIRONMENT.get_template('missions_hidden.html') self.response.write(template.render(template_vals))
def get(self): if not require_admin(self): return template_vals = generate_base_template_vals(self) template_vals['title'] = 'Hidden Missions' template_vals['page'] = 'missions' template_vals['missions'] = Mission.query(ndb.OR(Mission.start == None)).order(Mission.id).fetch(limit=None) template = JINJA_ENVIRONMENT.get_template('missions_hidden.html') self.response.write(template.render(template_vals))
def get(self, args): template_vals = {'title': 'Missions', 'page': 'missions'} user = users.get_current_user() if user: template_vals['user'] = user template_vals['admin'] = users.is_current_user_admin() template_vals['logout_url'] = users.create_logout_url( self.request.uri) else: template_vals['login_url'] = users.create_login_url( self.request.uri) # Get all users from the given semester selected_semester = self.request.get('semester') if not selected_semester: selected_semester = get_current_semester() prev_semester_str = prev_semester(selected_semester) current_semester_str = get_current_semester() next_semester_str = next_semester(selected_semester) next_semester_date = semester_date(next_semester_str) selected_semester_date = semester_date(selected_semester) template_vals['missions'] = Mission.query( Mission.start >= selected_semester_date, Mission.start < next_semester_date).order( Mission.start).fetch(limit=None) # Get all possible semesters to put in the menu. semesters = [] for semester in get_all_semesters(): semester_pretty = semester[0].upper() + semester[1:].replace( '_', ' ') semesters.append({ 'id': semester, 'pretty': semester_pretty, 'selected': semester == selected_semester }) template_vals['semesters'] = semesters template_vals[ 'prev_semester'] = prev_semester_str if selected_semester != 'fall_2013' else None template_vals[ 'next_semester'] = next_semester_str if selected_semester != current_semester_str else None template = JINJA_ENVIRONMENT.get_template('mission_list.html') self.response.write(template.render(template_vals))
def get(self, req_id): if not req_id: # Redirect to the missions page if no mission is specified. self.redirect('/missions') return mission = Mission.query(Mission.id == req_id).get() if not mission: # 404 if a nonexistent mission is specified. self.error(404) return template_vals = generate_base_template_vals(self) template_vals['page'] = 'missions' template_vals['mission'] = mission template_vals['title'] = mission.title template = JINJA_ENVIRONMENT.get_template('mission_info.html') self.response.write(template.render(template_vals))
def get(self, req_id): if not req_id: # Redirect to the missions page if no mission is specified. self.redirect('/missions') return mission = Mission.query(Mission.id == req_id).get() if not mission: # 404 if a nonexistent mission is specified. self.error(404) return template_vals = generate_base_template_vals(self) template_vals['page'] = 'missions' template_vals['mission'] = mission template_vals['title'] = mission.title template = JINJA_ENVIRONMENT.get_template('mission_info.html') self.response.write(template.render(template_vals))
def get(self): template_vals = generate_base_template_vals(self) template_vals['page'] = 'home' # Get the home page text. home_content = PageContent.query(PageContent.page == 'home').get() template_vals['home_html'] = home_content.html_text if home_content else '' # Get the next five missions. # Include missions happening today. now = datetime.now() today = datetime(now.year, now.month, now.day) template_vals['missions'] = Mission.query(Mission.start >= today).order(Mission.start).fetch(limit=5) # Pick an end quote. template_vals['greeting'] = choice([ 'Greetings from Earth!', 'Greetings, program!', 'Hello there!', 'Welcome aboard!' ]) template_vals['groups_call_to_action'] = choice([ 'Boldly chat where some have chatted before', 'Come chat with us', 'Explore strange new groups', 'Join our groups', 'Join the collective', 'Join the conversation' ]) template_vals['end_quote'] = choice([ 'Excelsior!', 'Live long and prosper.', 'May the Force be with you.', 'Never give up! Never surrender!' ]) template = JINJA_ENVIRONMENT.get_template('home.html') self.response.write(template.render(template_vals))
def get(self, req_id, resource_name): if not req_id: # Redirect to the missions page if no mission is specified. self.redirect('/missions') return mission = Mission.query(Mission.id == req_id).get() if not mission: # 404 if a nonexistent mission is specified. generate_plain_404(self, u'No mission exists with the ID \u201c%s\u201d.' % req_id) return if resource_name == 'wave': if not mission.wave_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a wave URL.' % req_id) return self.redirect(mission.wave_url.encode('utf-8')) elif resource_name == 'gdrive' or resource_name == 'drive': if not mission.drive_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a Drive URL.' % req_id) return self.redirect(mission.drive_url.encode('utf-8')) elif resource_name == 'intro': if not mission.intro_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have an intro. presentation URL.' % req_id) return self.redirect(mission.intro_url.encode('utf-8')) elif resource_name == 'presentation' or resource_name == 'pres': if not mission.pres_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a mission presentation URL.' % req_id) return self.redirect(mission.pres_url.encode('utf-8')) elif resource_name == 'signin': if not mission.sign_in_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a sign-in form URL.' % req_id) return self.redirect(mission.sign_in_url.encode('utf-8')) elif resource_name == 'facebook' or resource_name == 'fb': if not mission.fb_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a Facebook event URL.' % req_id) return self.redirect(mission.fb_url.encode('utf-8')) elif resource_name == 'gplus' or resource_name == 'google' or resource_name == 'google+' or resource_name == 'googleplus': if not mission.gplus_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a Google+ event URL.' % req_id) return self.redirect(mission.gplus_url.encode('utf-8')) elif resource_name == 'thelink': if not mission.the_link_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a The Link event URL.' % req_id) return self.redirect(mission.the_link_url.encode('utf-8')) elif resource_name == 'youtube' or resource_name == 'yt': if not mission.youtube_url: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a YouTube stream URL.' % req_id) return self.redirect(mission.youtube_url.encode('utf-8')) else: generate_plain_404(self, u'Mission \u201c%s\u201d does not have a \u201c%s\u201d URL.\n\nThe links a mission might have are:\n\u2022 wave\n\u2022 gdrive (or drive)\n\u2022 intro\n\u2022 presentation (or pres)\n\u2022 signin\n\u2022 facebook (or fb)\n\u2022 gplus (or google)\n\u2022 thelink\n\u2022 youtube (or yt)' % (req_id, resource_name)) return