-
Notifications
You must be signed in to change notification settings - Fork 0
/
project-api-res-v2.py
127 lines (105 loc) · 3.77 KB
/
project-api-res-v2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
from flask import Flask, jsonify, abort, make_response, request
from Project import Project
from Task import Task
project_counter_id = 3
task_counter_id = 0
projects = []
projects.append(Project(1, "name1"))
projects.append(Project(2, "name2"))
projects.append(Project(3, "name3"))
app = Flask(__name__)
@app.route("/")
def index():
return "Hello world!"
@app.route("/projects", methods=["GET"])
def get_projects():
project_list = []
for project in projects:
project_list.append(project.to_json())
return jsonify({"projects": project_list})
@app.route("/projects/<int:id>", methods=["GET"])
def get_project_by_id(id):
project = select_project_by_id(id)
return jsonify({"project": project.to_json()})
abort(404)
@app.errorhandler(404)
def not_found(error):
return make_response(jsonify({"error": "Not found"}), 404)
@app.route("/projects", methods=["POST"])
def create_a_project():
global project_counter_id
if not "name" in request.json:
abort(400)
project_counter_id += 1
name = request.json.get("name")
project = Project(project_counter_id, name)
projects.append(project)
projects_json = [project.to_json() for project in projects]
return jsonify({"projects": projects_json})
@app.errorhandler(400)
def bad_request(error):
return make_response(jsonify({"error": "Bad request"}), 400)
@app.route("/projects/<int:id>", methods=["PUT"])
def modify_project_by_id(id):
project = select_project_by_id(id)
project.name = request.json.get("name", project.name)
return jsonify({"project_modified": project.to_json()})
abort(404)
@app.route("/projects/<int:id>", methods=["DELETE"])
def delete_project_by_id(id):
project = select_project_by_id(id)
projects.remove(project)
return jsonify({"project": "Deleted"})
abort(404)
@app.route("/projects/tasks", methods=["GET"])
def get_tasks():
all_tasks = []
for project in projects:
for task in project.tasks:
all_tasks.append(task.to_json())
return jsonify({"tasks": all_tasks})
@app.route("/projects/<int:id>/tasks", methods=["GET"])
def get_tasks_from_project_by_id(id):
task_list = []
project = select_project_by_id(id)
if not project:
abort(404)
for task in project.tasks:
task_list.append(task.to_json())
return jsonify({"tasks": task_list})
@app.route("/projects/<int:id>/tasks", methods=["POST"])
def create_task_in_project(id):
global task_counter_id
if not "task_name" in request.json or not "description" in request.json:
abort(400)
project = select_project_by_id(id)
task_counter_id += 1
task_name = request.json.get("task_name")
description = request.json.get("description")
task = Task(task_counter_id, task_name, description)
project.add_task(task)
return jsonify({"task_added": task.to_json()})
@app.route("/projects/<int:id>/tasks/<int:task_id>", methods=["DELETE"])
def remove_task_by_id(id, task_id):
project = select_project_by_id(id)
task = select_task_by_id(project, task_id)
project.tasks.remove(task)
return jsonify({"task": "Deleted"})
abort(404)
@app.route("/projects/<int:id>/tasks/<int:task_id>", methods=["PUT"])
def modify_task_by_id(id, task_id):
project = select_project_by_id(id)
task = select_task_by_id(project, task_id)
task.task_name = request.json.get("task_name", task.task_name)
task.description = request.json.get("description", task.description)
return jsonify({"task_modified": task.to_json()})
def select_project_by_id(id):
for project in projects:
if project.id == id:
return project
def select_task_by_id(project, task_id):
for task in project.tasks:
if task.id == task_id:
return task
if __name__ == "__main__":
app.run(debug=True)