def statisticsJSON(should_reload=False): #Retrieved cached value data = memcache.get('statistics') if data is None or should_reload: summary = json.loads(Request.tutorSummaryJSON()) statistics = {} statistics['members'] = len(summary) statistics['sessions'] = sum([entry[1] for entry in summary]) statistics['minutes'] = sum([entry[3] for entry in summary]) last_month = date.today() - timedelta(30) last_week = date.today() - timedelta(7) last_day = date.today() - timedelta(1) query = TutoringSession.all() query.filter('date_tutored >=', last_week) statistics['week'] = query.count(limit=10000) query.filter('date_tutored >=', last_day) statistics['yesterday'] = query.count(limit=10000) tutors = json.loads(Request.tutorsJSON()) emails = [item[2] for item in tutors] statistics['none_month'] = [] for email in emails: query = TutoringSession.all() query.filter('tutor_email =', email) query.filter('date_tutored >=', last_month) if query.count(limit=1) == 0: statistics['none_month'].append(email) statistics['top_tutor'] = [None]*3 minutes_max = 0 for tutor in tutors: email = tutor[2] sessions = json.loads(Request.sessionDataJSON('tutor', email)) minutes = sum([session[7] for session in sessions]) if minutes > minutes_max: minutes_max = minutes statistics['top_tutor'][0] = tutor[1] + ' ' + tutor[0] statistics['top_tutor'][1] = email statistics['top_tutor'][2] = minutes tutees = json.loads(Request.tuteesJSON()) statistics['tutees'] = len(tutees) data = json.dumps(statistics) memcache.add('statistics', data, 3600) return data
def statisticsJSON(should_reload=False): #Retrieved cached value data = memcache.get('statistics') if data is None or should_reload: summary = json.loads(Request.tutorSummaryJSON()) statistics = {} statistics['members'] = len(summary) statistics['sessions'] = sum([entry[1] for entry in summary]) statistics['minutes'] = sum([entry[3] for entry in summary]) last_month = date.today() - timedelta(30) last_week = date.today() - timedelta(7) last_day = date.today() - timedelta(1) query = TutoringSession.all() query.filter('date_tutored >=', last_week) statistics['week'] = query.count(limit=10000) query.filter('date_tutored >=', last_day) statistics['yesterday'] = query.count(limit=10000) tutors = json.loads(Request.tutorsJSON()) emails = [item[2] for item in tutors] statistics['none_month'] = [] for email in emails: query = TutoringSession.all() query.filter('tutor_email =', email) query.filter('date_tutored >=', last_month) if query.count(limit=1) == 0: statistics['none_month'].append(email) statistics['top_tutor'] = [None] * 3 minutes_max = 0 for tutor in tutors: email = tutor[2] sessions = json.loads(Request.sessionDataJSON('tutor', email)) minutes = sum([session[7] for session in sessions]) if minutes > minutes_max: minutes_max = minutes statistics['top_tutor'][0] = tutor[1] + ' ' + tutor[0] statistics['top_tutor'][1] = email statistics['top_tutor'][2] = minutes tutees = json.loads(Request.tuteesJSON()) statistics['tutees'] = len(tutees) data = json.dumps(statistics) memcache.add('statistics', data, 3600) return data
def sessionDataJSON(which, email, should_reload=False): key = which + '_data_' + email data = memcache.get(key) if data is None or should_reload: print 'Reloading "' + key + '"' query = TutoringSession.all() query.filter(which + '_email', email) query.order("date_tutored") sessions = [] for session in query.run(batch_size=2000): sessions.append(session.to_list()) data = json.dumps(sessions) memcache.add(key=key, value=data, time=300) #5 minutes per student return data
def tutorDataJSON(self, email, should_reload=False): key = 'tutor_data_' + email data = memcache.get(key) if data is None or should_reload: print "Reloading... " + key q = TutoringSession.all() q.filter("tutor_email", email) q.order("date_tutored") compiled = {} for p in q.run(limit=2000): session_dict = p.to_dict() for k in session_dict.keys(): if not k in compiled: compiled[k] = [] compiled[k].append(session_dict[k]) data = json.dumps(compiled) memcache.add(key=key, value=data, time=300) #5 minutes per student return data
def post(self): data = {}; for argument in self.request.arguments(): if argument.startswith(data_prefix): key = argument[len(data_prefix):] value = self.request.get(argument) data[key] = value #self.response.out.write(key + ': ' + value + "\n") session = TutoringSession() #Tutee's name logging. if data['tutee'] == "" or data['tutee'] == None: self.response.out.write("No student name was received. Please try again and report this error!") return else: #Add or update the stored name q = db.GqlQuery("SELECT * FROM Tutee WHERE email = '" + users.get_current_user().email() + "'") session.tutee_email = users.get_current_user().email() result = q.get() if result == None: tutee = Tutee(email=users.get_current_user().email(), name=data['tutee']) tutee.put() else: result.name = data['tutee'] result.put() session.tutee_name = data['tutee'] session.tutee_email = users.get_current_user().email() #Date tutored on and datetime logged session.date_logged = datetime.now() session.date_tutored = datetime.strptime(data['date'], '%m/%d/%Y').date() if data['tutor'] == users.get_current_user().email(): self.response.out.write('Error! You cannot tutor yourself. The student must log in to their account and then select who tutored them from the list.') return #Tutor (club member) email, last, and first name. q = db.GqlQuery("SELECT * FROM Tutor WHERE email = '" + data['tutor'] + "'") result = q.get() if result == None: self.response.out.write("Error! Could not find the selected tutor '" + data['tutor'] + "'") return else: session.tutor_email = data['tutor'] session.tutor_last = result.last session.tutor_first = result.first #Minutes if data['minutes'] == 'null' or data['minutes'] == '': self.response.out.write('Error! No minutes were given.') return else: session.minutes = int(data['minutes']) if session.minutes < 6: self.response.out.write('Error! You typed "' + str(session.minutes) +' minutes", which is very low. Surely you meant hours? Please try again with time in minutes.') return; #Subject if data['subject'] == 'null' or data['subject'] == '': self.response.out.write('Error! No subject was selected.') return else: session.subject = data['subject'] #Satisfaction if data['satisfaction'] == 'null' or data['satisfaction'] == '': session.satisfaction = None else: session.satisfaction = int(data['satisfaction']) #Comments if data['comments'] == 'null' or data['comments'] == '': session.comments = None else: session.comments = data['comments'] session.put() # self.response.out.write("Session object: " + str(vars(session))) self.response.out.write("Your session has been logged. Your tutor will receive a confirmation email.") message = mail.EmailMessage() if not mail.is_email_valid(session.tutor_email): self.response.out.write('<br/>Note, an automatic email to your tutor could not be sent. Please report this error.') return; message.sender = 'Math Tutor <*****@*****.**>' message.to = session.tutor_first + ' ' + session.tutor_last +' <' + session.tutor_email + '>' message.subject = 'Tutoring Session Logged' message.body = """ Hi %s, %s has just logged your tutoring session. Details: Date: %s Minutes: %d Subject: %s To view your complete log, visit tutoringlog.com """ % (session.tutor_first, session.tutee_name, session.date_tutored.strftime('%m/%d/%Y'), session.minutes, session.subject) message.send()