diff --git a/SE_API/TaskRoutes.py b/SE_API/TaskRoutes.py
index de1ebff..4c50468 100644
--- a/SE_API/TaskRoutes.py
+++ b/SE_API/TaskRoutes.py
@@ -18,6 +18,7 @@ from flask.ext.autodoc import Autodoc
# DB Models
from models.Task import Task
from models.Course import Course
+from models.TaskComponent import TaskComponent
#Validation Utils Libs
from SE_API.Validation_Utils import *
@@ -42,14 +43,35 @@ def create_task(token):
Payload
- JSON Object, Example:
{
- 'title' : self.title,
- 'courseName' : self.course,
- 'description' : self.description,
- 'dueDate' : self.dueDate,
- 'isClose' : self.membersId,
- 'isDone' : self.isDone,
- 'taskGrade' : self.taskGrade
- }
+ "title":"task1",
+ "courseName":"aran",
+ "description":"pls fddfsdfdsk",
+ "dueDate":{"year":2010,
+ "month":2,
+ "day":4
+ },
+ "isPersonal":true,
+ "components":[
+ {
+ "type" : "should be type1",
+ "label" : "should be label1",
+ "isMandatory" : true,
+ "order" : 1
+ },
+ {
+ "type" : "should be type2",
+ "label" : "should be label2",
+ "isMandatory" : true,
+ "order" : 2
+ },
+ {
+ "type" : "should be type3",
+ "label" : "should be label3",
+ "isMandatory" : false,
+ "order" : 3
+ }
+ ]
+}
Response
@@ -90,89 +112,37 @@ def create_task(token):
date = datetime.date(payload['dueDate']['year'],payload['dueDate']['month'],payload['dueDate']['day'])
except Exception:
return bad_request("invalid dueDate format")
- #TODO: add time. now, its only date
task = Task(title=payload['title'], courseName=payload['courseName'], description=payload['description'], dueDate=date)
- #parse isClose
+ # print "id: ",task.key().id()
+ #parse isPersonal
try:
- task.isClose = payload['isClose']
+ task.isPersonal = payload['isPersonal']
except Exception:
pass
-
- #parse isDone
- try:
- task.isDone = payload['isDone']
- except Exception:
- pass
-
- #parse taskGrade
- try:
- task.taskGrade = payload['taskGrade']
- except Exception:
- pass
-
except Exception as e:
print e
return bad_request()
-
db.put(task)
db.save
+
+ #create components
+ for c in payload['components']:
+ try:
+ component = TaskComponent(taskId=task.key().id(), userId=-1, type=c['type'], label=c['label'], isMandatory=c['isMandatory'], order=c['order'])
+ except Exception as e:
+ print e
+ return bad_request("Bad component")
+ db.put(component)
+ db.save
+
+
+
return created()
-@task_routes.route('/api/tasks/getClosestTask/', methods=["GET"])
-@auto.doc()
-def getClosestTask(courseName):
- """
- >This Call will return an array of all projects in a given course
-
- Route Parameters
- - name: 'course name'
-
-
- Payload
- - NONE
-
-
- Response
-
- 200 - JSON Example:
-
- {
- 'projectName': 'Advance Math',
- 'courseName': 'JCE',
- 'grade': 98,
- 'logo_url': 'http://location.domain.com/image.jpg',
- 'gitRepository': 'http://location.git.com/somthing',
- 'membersId': ['bob', 'dylan', 'quentin', 'terentino']
- }
-
-
- """
- #get all tasks for a specific course
- arr = []
- query = Task.all()
- query.filter("courseName =", courseName)
- index = -1
- count = -1
- closestDate = datetime.date(3000,1,1)
- for t in query.run():
- count+=1
- if t.dueDate < closestDate:
- closestDate = t.dueDate
- index = count
- arr.append(dict(json.loads(t.to_JSON())))
-
- print arr
- if len(arr) != 0:
- return Response(response=json.dumps(arr[index]),
- status=200,
- mimetype="application/json")
- else:
- return no_content("no Tasks")
-
@@ -180,7 +150,7 @@ def getClosestTask(courseName):
@auto.doc()
def getAllTasks(courseName):
"""
- >This Call will return an array of all projects in a given course
+ >This Call will return an array of all Tasks in a course by date
Route Parameters
- name: 'course name'
@@ -195,13 +165,17 @@ def getAllTasks(courseName):
200 - JSON Example:
{
- 'projectName': 'Advance Math',
- 'courseName': 'JCE',
- 'grade': 98,
- 'logo_url': 'http://location.domain.com/image.jpg',
- 'gitRepository': 'http://location.git.com/somthing',
- 'membersId': ['bob', 'dylan', 'quentin', 'terentino']
- }
+ 'title' : 'Task1',
+ 'courseName' : 'advance Math',
+ 'description' : 'prepare by sunday',
+ 'dueDate' : {
+ 'year' : 2015,
+ 'month' : 12,
+ 'day' : 23
+ }
+ 'isPersonal' : true,
+ 'task_id' : 589689456894
+ }
"""
@@ -227,12 +201,128 @@ def getAllTasks(courseName):
status=200,
mimetype="application/json")
else:
- return Response(response=[],
+ return no_content()
+
+
+@task_routes.route('/api/tasks/getTaskComponents/', methods=["GET"])
+@auto.doc()
+def getTaskComponents(taskId):
+ """
+ >This Call will return an array of all components for a given task
+
+ Route Parameters
+ - taskId: integer
+
+
+ Payload
+ - NONE
+
+
+ Response
+
+ 200 - JSON Example:
+
+ [
+ {
+ 'taskId' : 7589454894,
+ 'userId' : -1,
+ 'type' : 'kindOfType',
+ 'label' : 'kindOfLabel',
+ 'isMandatory' : true,
+ 'order' : 2
+ }
+ {
+ 'taskId' : 7589454894,
+ 'userId' : yossi,
+ 'type' : 'otherKindOfType',
+ 'label' : 'otherKindOfLabel',
+ 'isMandatory' : false,
+ 'order' : 4
+ }
+ ]
+
+
+ """
+
+ arr = []
+ query = TaskComponent.all()
+ query.filter("taskId = ", taskId)
+
+ for tc in query.run():
+ arr.append(dict(json.loads(tc.to_JSON())))
+
+ #sort array by order, and remove added key
+ arr = sorted(arr, key=itemgetter('order'), reverse=False)
+
+ if len(arr) != 0:
+ return Response(response=json.dumps(arr),
status=200,
mimetype="application/json")
+ else:
+ return no_content()
@task_routes.route('/api/tasks/help')
def documentation():
- return auto.html()
\ No newline at end of file
+ return auto.html()
+
+
+
+@task_routes.route('/api/tasks/help')
+def documentation():
+ return auto.html()
+
+
+
+
+
+
+# @task_routes.route('/api/tasks/getClosestTask/', methods=["GET"])
+# @auto.doc()
+# def getClosestTask(courseName):
+# """
+# >This Call will return an array of all projects in a given course
+#
+# Route Parameters
+# - name: 'course name'
+#
+#
+# Payload
+# - NONE
+#
+#
+# Response
+#
+# 200 - JSON Example:
+#
+# {
+# 'projectName': 'Advance Math',
+# 'courseName': 'JCE',
+# 'grade': 98,
+# 'logo_url': 'http://location.domain.com/image.jpg',
+# 'gitRepository': 'http://location.git.com/somthing',
+# 'membersId': ['bob', 'dylan', 'quentin', 'terentino']
+# }
+#
+#
+# """
+# #get all tasks for a specific course
+# arr = []
+# query = Task.all()
+# query.filter("courseName =", courseName)
+# for t in query.run():
+# count+=1
+# if t.dueDate < closestDate:
+# closestDate = t.dueDate
+# index = count
+# arr.append(dict(json.loads(t.to_JSON())))
+#
+# print arr
+# if len(arr) != 0:
+# return Response(response=json.dumps(arr[index]),
+# status=200,
+# mimetype="application/json")
+# else:
+# return no_content("no Tasks")
+#
diff --git a/models/Task.py b/models/Task.py
index e51ac40..292ac0d 100644
--- a/models/Task.py
+++ b/models/Task.py
@@ -9,10 +9,7 @@ class Task(db.Model):
courseName = db.StringProperty(required=True)
description = db.StringProperty(required=True,default=" ")
dueDate = db.DateProperty(required=True)
- #isProject = db.BooleanProperty(required=False)
- isClose = db.BooleanProperty(required=True, default=False)
- isDone = db.BooleanProperty(required=True, default=False)
- taskGrade = db.IntegerProperty(required=True, default=0)
+ isPersonal = db.BooleanProperty(required=True, default=True)
def to_JSON(self):
data = {'title' : self.title,
@@ -23,10 +20,7 @@ class Task(db.Model):
'month': self.dueDate.month,
'day': self.dueDate.day
},
- #'isProject' : self.isProject,
- 'isClose' : self.isClose,
- 'isDone' : self.isDone,
- 'taskGrade' : self.taskGrade,
+ 'isPersonal' : self.isPersonal,
}
return json.dumps(data)
diff --git a/models/TaskComponent.py b/models/TaskComponent.py
index f2130b2..db84efb 100644
--- a/models/TaskComponent.py
+++ b/models/TaskComponent.py
@@ -6,27 +6,19 @@ from google.appengine.ext import db
class TaskComponent(db.Model):
- taskId = db.StringProperty(required=True)
- courseName = db.StringProperty(required=True)
- description = db.StringProperty(required=True,default=" ")
- dueDate = db.DateProperty(required=True)
- #isProject = db.BooleanProperty(required=False)
- isClose = db.BooleanProperty(required=True, default=False)
- isDone = db.BooleanProperty(required=True, default=False)
- taskGrade = db.IntegerProperty(required=True, default=0)
+ taskId = db.IntegerProperty(required=True)
+ userId = db.IntegerProperty(required=True, default = -1)
+ type = db.StringProperty(required=True,default=" ")
+ label = db.StringProperty(required=True,default=" ")
+ isMandatory = db.BooleanProperty(required=True, default=True)
+ order = db.IntegerProperty(required=True)
def to_JSON(self):
- data = {'title' : self.title,
- 'courseName' : self.courseName,
- 'description' : self.description,
- 'dueDate' : {
- 'year': self.dueDate.year,
- 'month': self.dueDate.month,
- 'day': self.dueDate.day
- },
- #'isProject' : self.isProject,
- 'isClose' : self.isClose,
- 'isDone' : self.isDone,
- 'taskGrade' : self.taskGrade,
+ data = {'taskId' : self.taskId,
+ 'userId' : self.userId,
+ 'type' : self.type,
+ 'label' : self.label,
+ 'isMandatory' : self.isMandatory,
+ 'order' : self.order
}
return json.dumps(data)