Esempio n. 1
0
 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
Esempio n. 2
0
    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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
 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
Esempio n. 6
0
 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
Esempio n. 7
0
    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()