Coverage for src/resources/track_resource.py : 86%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from flask import request
2from flask_restx import Resource, reqparse
3from flask_jwt_extended import jwt_required, get_jwt_identity
5from src.service import TrackService, ContentService
6from src.dto import TrackDto, UserDto
8api = TrackDto.api
9data_resp = TrackDto.data_resp
10genres_resp = UserDto.genres_resp
11meta_resp = UserDto.meta_resp
12history_resp = TrackDto.history_resp
15@api.route("", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}}})
16class TrackResource(Resource):
17 @api.doc(
18 "Get list of the most popular Tracks",
19 responses={
20 200: ("Track data successfully sent", data_resp),
21 401: ("Authentication required"),
22 },
23 )
24 @jwt_required
25 def get(self):
26 """ Get list of the most popular Tracks """
27 user_uuid = get_jwt_identity()
29 try:
30 page = int(request.args.get('page'))
31 except (ValueError, TypeError):
32 page = 1
33 return TrackService.get_popular_tracks(page, user_uuid)
35 track_additional = TrackDto.track_additional_base
37 @api.doc(
38 "Add additional Track for validation",
39 responses={
40 200: ("Additional track added for validation", meta_resp),
41 401: ("Authentication required"),
42 }
43 )
44 @jwt_required
45 @api.expect(track_additional, validate=True)
46 def post(self):
47 """ Add additional Track for validation"""
48 user_uuid = get_jwt_identity()
50 # Grab the json data
51 data = request.get_json()
53 return TrackService.add_additional_track(user_uuid, data)
56@api.route("/user", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}, "reco_engine": {"in": "query", "type": "str", "default": None}}})
57class TrackUserRecommendationResource(Resource):
58 @api.doc(
59 "Get list of the recommended Tracks for the connected user",
60 responses={
61 200: ("Track data successfully sent", data_resp),
62 401: ("Authentication required"),
63 },
64 )
65 @jwt_required
66 def get(self):
67 """ Get list of the recommended Tracks for the connected user """
68 user_uuid = get_jwt_identity()
70 parser = reqparse.RequestParser()
71 parser.add_argument('page', type=int, default=1)
72 parser.add_argument('reco_engine', type=str, default=None)
73 args = parser.parse_args()
75 return TrackService.get_recommended_tracks_for_user(args["page"], user_uuid, args["reco_engine"])
78@api.route("/groups", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}, "reco_engine": {"in": "query", "type": "str", "default": None}}})
79class TrackGroupRecommendationResource(Resource):
80 @api.doc(
81 "Get list of the recommended Tracks for the groups of the connected user",
82 responses={
83 200: ("Track data successfully sent", data_resp),
84 401: ("Authentication required"),
85 },
86 )
87 @jwt_required
88 def get(self):
89 """ Get list of the recommended Tracks for the groups of the connected user """
90 user_uuid = get_jwt_identity()
92 parser = reqparse.RequestParser()
93 parser.add_argument('page', type=int, default=1)
94 parser.add_argument('reco_engine', type=str, default=None)
95 args = parser.parse_args()
97 return TrackService.get_recommended_tracks_for_group(args["page"], user_uuid, args["reco_engine"])
100@api.route("/search/<string:search_term>", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}}})
101class TrackSearchResource(Resource):
102 @api.doc(
103 "Search tracks",
104 responses={
105 200: ("Track data successfully sent", data_resp),
106 401: ("Authentication required"),
107 },
108 )
109 @jwt_required
110 def get(self, search_term):
111 """ Getlist of track's data by term """
112 user_uuid = get_jwt_identity()
113 try:
114 page = int(request.args.get('page'))
115 except (ValueError, TypeError):
116 page = 1
117 return TrackService.search_track_data(search_term, page, user_uuid)
120@api.route("/genres")
121class TrackGenresResource(Resource):
122 @api.doc(
123 "Get track genres",
124 responses={
125 200: ("Track data successfully sent", genres_resp),
126 401: ("Authentication required"),
127 },
128 )
129 @jwt_required
130 def get(self):
131 """ Get track genres """
132 user_uuid = get_jwt_identity()
133 return TrackService.get_ordered_genre(user_uuid)
136@api.route("/<int:content_id>/meta")
137class TrackMetaResource(Resource):
138 @api.doc(
139 "Get track-user (connected user) meta",
140 responses={
141 200: ("Track-User meta data successfully sent", meta_resp),
142 401: ("Authentication required"),
143 }
144 )
145 @jwt_required
146 def get(self, content_id):
147 """ Get track-user (connected user) meta """
148 user_uuid = get_jwt_identity()
150 return ContentService.get_meta(user_uuid, content_id)
152 content_meta = UserDto.content_meta
154 @api.doc(
155 "Update track-user (connected user) meta",
156 responses={
157 201: ("Track-User meta data successfully sent"),
158 401: ("Authentication required"),
159 404: "User or Track not found!",
160 },
161 )
162 @jwt_required
163 @api.expect(content_meta, validate=True)
164 def patch(self, content_id):
165 """ Update track-user (connected user) meta """
166 user_uuid = get_jwt_identity()
168 # Grab the json data
169 data = request.get_json()
171 return ContentService.update_meta(user_uuid, content_id, data)
174@api.route("/history", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}}})
175class TrackHistoryResource(Resource):
176 @api.doc(
177 "Get the history of listened track",
178 responses={
179 200: ("History of listened track data successfully sent", history_resp),
180 401: ("Authentication required"),
181 404: "User not found!",
182 },
183 )
184 @jwt_required
185 def get(self):
186 """ Get the history of listened """
187 user_uuid = get_jwt_identity()
189 try:
190 page = int(request.args.get('page'))
191 except (ValueError, TypeError):
192 page = 1
194 return TrackService.get_history(user_uuid, page)
197@api.route("/<int:content_id>/bad_recommendation")
198class TrackBadRecommendation(Resource):
199 bad_recommendation = TrackDto.track_bad_recommendation
201 @api.doc(
202 "Add Track-user (connected user) bad recommendation",
203 responses={
204 200: ("Track-User bad recommendation successfully sent", meta_resp),
205 401: ("Authentication required"),
206 }
207 )
208 @jwt_required
209 @api.expect(bad_recommendation, validate=True)
210 def post(self, content_id):
211 """ Add Track-user (connected user) bad recommendation """
212 user_uuid = get_jwt_identity()
214 # Grab the json data
215 data = request.get_json()
217 return TrackService.add_bad_recommendation(user_uuid, content_id, data)
221@api.route("/additional", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}}})
222class TrackAdditionalResource(Resource):
223 @api.doc(
224 "Get list of the added Tracks (by user)",
225 responses={
226 200: ("Track data successfully sent", data_resp),
227 401: ("Authentication required"),
228 },
229 )
230 @jwt_required
231 def get(self):
232 """ Get list of the added Tracks (by user) """
233 user_uuid = get_jwt_identity()
235 parser = reqparse.RequestParser()
236 parser.add_argument('page', type=int, default=1)
237 args = parser.parse_args()
239 return TrackService.get_additional_track(user_uuid, args["page"])
242@api.route("/additional/<int:track_id>")
243class TrackAdditionalValidationResource(Resource):
244 @api.doc(
245 "Validate (put) added Tracks (by user)",
246 responses={
247 201: ("Additional track data successfully validated"),
248 401: ("Authentication required"),
249 403: ("Permission missing"),
250 404: ("User or track not found!"),
251 },
252 )
253 @jwt_required
254 def put(self, track_id):
255 """ Validate (put) added Tracks (by user) """
256 user_uuid = get_jwt_identity()
258 return TrackService.validate_additional_track(user_uuid, track_id)
260 @api.doc(
261 "Decline (delete) added Tracks (by user)",
262 responses={
263 201: ("Additional track successfully deleted"),
264 401: ("Authentication required"),
265 403: ("Permission missing"),
266 404: ("User or track not found!"),
267 },
268 )
269 @jwt_required
270 def delete(self, track_id):
271 """ Decline (delete) added Tracks (by user) """
272 user_uuid = get_jwt_identity()
274 return TrackService.decline_additional_track(user_uuid, track_id)