-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path__init__.py
138 lines (111 loc) · 4.56 KB
/
__init__.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
128
129
130
131
132
133
134
135
136
137
138
from flask import jsonify
from openedoo.core.libs import Blueprint, request, response
from .libs.error_handler import InvalidUsage, simple_error_message
from .model.eclass import Eclass
from .model.eclass_member import EclassMember
RESULT_PER_PAGE = 20
module_eclass = Blueprint('module_eclass', __name__)
@module_eclass.errorhandler(InvalidUsage)
def handle_invalid_usage(error):
res = jsonify(error.to_dict())
res.status_code = error.status_code
return res
@module_eclass.route('', strict_slashes=False, methods=['POST', 'GET'])
def index():
try:
eclass = Eclass()
# Only accept application/json in post request data
request_data = request.get_json(silent=True)
if request.method == 'POST' and request_data:
result = eclass.add(request_data)
return jsonify(result)
elif request.method == 'POST' and not request_data:
raise InvalidUsage('Failed to load request data', '',
status_code=415)
elif request.method == 'GET' and request.args.get('creator_id'):
creator_id = request.args.get('creator_id')
result = eclass.get_by_creator(creator_id)
return jsonify(result)
elif request.method == 'GET' and request.args.get('member_id'):
member_id = request.args.get('member_id')
result = eclass.get_by_member(member_id)
return jsonify(result)
else:
page = int(request.args.get('page')) if request.args else 1
start_page = (page - 1) * RESULT_PER_PAGE
pagination = {
'limit': RESULT_PER_PAGE,
'start_page': start_page,
}
result = eclass.get_all(pagination=pagination)
return jsonify(result)
except Exception as e:
raise
@module_eclass.route('/<int:eclass_id>', methods=['GET', 'PUT', 'DELETE'])
def get_single_eclass(eclass_id):
try:
eclass = Eclass()
# Only accept application/json in post request data
request_data = request.get_json(silent=True)
if request.method == 'PUT' and request_data:
request_data['id'] = eclass_id
result = eclass.update(request_data)
return jsonify(result)
elif request.method == 'DELETE':
result = eclass.delete(eclass_id)
return jsonify(result)
else:
result = eclass.get(eclass_id)
return jsonify(result)
except Exception:
raise
@module_eclass.route('/<int:eclass_id>/members', methods=['GET', 'POST'])
def eclass_members(eclass_id):
try:
member = EclassMember()
# Only accept application/json in post request data
request_data = request.get_json(silent=True)
if request.method == 'POST' and request_data:
request_data['class_id'] = eclass_id
if 'is_creator' not in request_data:
request_data['is_creator'] = 0
result = member.add(request_data)
return jsonify(result)
elif request.method == 'POST' and not request_data:
raise InvalidUsage('Failed to load request data', '',
status_code=415)
else:
page = int(request.args.get('page')) if request.args else 1
start_page = (page - 1) * RESULT_PER_PAGE
pagination = {
'limit': RESULT_PER_PAGE,
'start_page': start_page,
}
result = member.get(eclass_id, pagination)
return jsonify(result)
except Exception as e:
raise
app_route = '/<int:class_id>/members/<int:user_id>'
@module_eclass.route(app_route, methods=['DELETE'])
def eclass_single_member(class_id, user_id):
try:
member = EclassMember()
result = member.delete(class_id, user_id)
return jsonify(result)
except Exception as e:
raise InvalidUsage('Failed to load request data', str(e),
status_code=415)
@module_eclass.route('/<int:eclass_id>/discussions', methods=['GET', 'POST'])
def eclass_discussion(eclass_id):
try:
eclass = Eclass()
request_data = request.get_json(silent=True)
if request.method == 'POST' and request_data:
result = eclass.add_discussion(eclass_id, request_data)
return jsonify(result)
else:
result = eclass.get_discussion(eclass_id)
return jsonify(result)
except Exception as e:
raise InvalidUsage('Failed to load request data', str(e),
status_code=415)