62 lines
No EOL
2.1 KiB
Python
62 lines
No EOL
2.1 KiB
Python
import json
|
|
|
|
__author__ = 'Aran'
|
|
from google.appengine.ext import db
|
|
|
|
|
|
class User(db.Model):
|
|
username = db.StringProperty(required=True)
|
|
name = db.StringProperty(required=False)
|
|
email = db.StringProperty(required=True)
|
|
isLecturer = db.BooleanProperty(required=True)
|
|
accessToken = db.StringProperty(required=True)
|
|
seToken = db.StringProperty(required=True)
|
|
avatar_url = db.StringProperty(required=True)
|
|
isFirstLogin = db.BooleanProperty(default=True)
|
|
campuses_id_list = db.StringListProperty(default=[])
|
|
courses_id_list = db.StringListProperty(default=[])
|
|
projects_id_list = db.StringListProperty(default=[])
|
|
|
|
def to_JSON(self):
|
|
data = {'username' : self.username,
|
|
'name' : self.name,
|
|
'email' : self.email,
|
|
'isLecturer' : self.isLecturer,
|
|
'avatar_url' : self.avatar_url,
|
|
'isFirstLogin' : self.isFirstLogin,
|
|
'campuses_id_list': self.campuses_id_list,
|
|
'courses_id_list': self.courses_id_list,
|
|
'projects_id_list': self.projects_id_list,
|
|
'id' : self.key().id(),
|
|
'stats': get_stats(self)
|
|
}
|
|
return json.dumps(data)
|
|
|
|
def get_stats(user):
|
|
from models.Project import Project
|
|
from models.Message import Message
|
|
labels = ['Commits', 'Open Issues Assigned', 'Messages', 'Unfinished Tasks']
|
|
data = [0, 0, 0, 0]
|
|
for pid in user.projects_id_list:
|
|
project = Project.get_by_id(int(pid))
|
|
info = json.loads(project.info)
|
|
stats = info["stats"]['micro']
|
|
p_data = stats['data']
|
|
p_series = stats['series']
|
|
try:
|
|
user_index = p_series.index(user.username)
|
|
#adding commits
|
|
data[0] = data[0] + p_data[user_index][0]
|
|
#adding open issues
|
|
data[1] = data[1] + p_data[user_index][1]
|
|
except Exception:
|
|
pass
|
|
messages = Message.all().filter('master_id =', user.key().id())
|
|
for m in messages.run():
|
|
data[2] = data[2] + 1
|
|
|
|
#need to do tasks
|
|
####
|
|
|
|
data = [data]
|
|
return {'data': data, 'labels': labels} |