Coverage for src/resources/serie_resource.py : 89%
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 SerieService, ContentService
6from src.dto import SerieDto, UserDto
8api = SerieDto.api
9data_resp = SerieDto.data_resp
10genres_resp = UserDto.genres_resp
11episodes_resp = SerieDto.episodes_resp
12meta_resp = UserDto.meta_resp
15@api.route("", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}}})
16class SerieResource(Resource):
17 @api.doc(
18 "Get list of the most popular Series",
19 responses={
20 200: ("Serie 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 Series """
27 user_uuid = get_jwt_identity()
29 try:
30 page = int(request.args.get('page'))
31 except (ValueError, TypeError):
32 page = 1
33 return SerieService.get_popular_series(page, user_uuid)
35 serie_additional = SerieDto.serie_additional_base
37 @api.doc(
38 "Add additional Serie for validation",
39 responses={
40 200: ("Additional serie added for validation", meta_resp),
41 401: ("Authentication required"),
42 }
43 )
44 @jwt_required
45 @api.expect(serie_additional, validate=True)
46 def post(self):
47 """ Add additional Serie for validation"""
48 user_uuid = get_jwt_identity()
50 # Grab the json data
51 data = request.get_json()
53 return SerieService.add_additional_serie(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 SerieUserRecommendationResource(Resource):
58 @api.doc(
59 "Get list of the recommended Series for the connected user",
60 responses={
61 200: ("Serie data successfully sent", data_resp),
62 401: ("Authentication required"),
63 },
64 )
65 @jwt_required
66 def get(self):
67 """ Get list of the recommended Series 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 SerieService.get_recommended_series_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 SerieGroupRecommendationResource(Resource):
80 @api.doc(
81 "Get list of the recommended Series for the groups of the connected user",
82 responses={
83 200: ("Serie data successfully sent", data_resp),
84 401: ("Authentication required"),
85 },
86 )
87 @jwt_required
88 def get(self):
89 """ Get list of the recommended Series 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 SerieService.get_recommended_series_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 SerieSearchResource(Resource):
102 @api.doc(
103 "Search series",
104 responses={
105 200: ("Serie data successfully sent", data_resp),
106 401: ("Authentication required"),
107 },
108 )
109 @jwt_required
110 def get(self, search_term):
111 """ Getlist of serie'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 SerieService.search_serie_data(search_term, page, user_uuid)
120@api.route("/genres")
121class SerieGenreResource(Resource):
122 @api.doc(
123 "Get serie genres",
124 responses={
125 200: ("Serie data successfully sent", genres_resp),
126 401: ("Authentication required"),
127 }
128 )
129 @jwt_required
130 def get(self):
131 """ Get serie genres """
132 user_uuid = get_jwt_identity()
133 return SerieService.get_ordered_genre(user_uuid)
136@api.route("/<int:content_id>/episodes")
137class SerieEpisodeResource(Resource):
138 @api.doc(
139 "Get series episodes",
140 responses={
141 200: ("Series episodes data sent", episodes_resp),
142 404: "Series not found!",
143 }
144 )
145 @jwt_required
146 def get(self, content_id):
147 """ Get series episodes """
148 return SerieService.get_episodes(content_id)
151@api.route("/<int:content_id>/meta")
152class SerieMetaResource(Resource):
153 @api.doc(
154 "Get serie-user (connected user) meta",
155 responses={
156 200: ("Serie-User meta data successfully sent", meta_resp),
157 401: ("Authentication required"),
158 }
159 )
160 @jwt_required
161 def get(self, content_id):
162 """ Get serie-user (connected user) meta """
163 user_uuid = get_jwt_identity()
165 return ContentService.get_meta(user_uuid, content_id)
167 content_meta = UserDto.content_meta
169 @api.doc(
170 "Update serie-user (connected user) meta",
171 responses={
172 201: ("Serie-User meta data successfully sent"),
173 401: ("Authentication required"),
174 404: "User or Serie not found!",
175 },
176 )
177 @jwt_required
178 @api.expect(content_meta, validate=True)
179 def patch(self, content_id):
180 """ Update serie-user (connected user) meta """
181 user_uuid = get_jwt_identity()
183 # Grab the json data
184 data = request.get_json()
186 return ContentService.update_meta(user_uuid, content_id, data)
189@api.route("/<int:content_id>/bad_recommendation")
190class SerieBadRecommendation(Resource):
191 bad_recommendation = SerieDto.serie_bad_recommendation
193 @api.doc(
194 "Add Serie-user (connected user) bad recommendation",
195 responses={
196 200: ("Serie-User bad recommendation successfully sent", meta_resp),
197 401: ("Authentication required"),
198 }
199 )
200 @jwt_required
201 @api.expect(bad_recommendation, validate=True)
202 def post(self, content_id):
203 """ Add Serie-user (connected user) bad recommendation """
204 user_uuid = get_jwt_identity()
206 # Grab the json data
207 data = request.get_json()
209 return SerieService.add_bad_recommendation(user_uuid, content_id, data)
211@api.route("/additional", doc={"params": {"page": {"in": "query", "type": "int", "default": 1}}})
212class SerieAdditionalResource(Resource):
213 @api.doc(
214 "Get list of the added Series (by user)",
215 responses={
216 200: ("Series data successfully sent", data_resp),
217 401: ("Authentication required"),
218 },
219 )
220 @jwt_required
221 def get(self):
222 """ Get list of the added Series (by user) """
223 user_uuid = get_jwt_identity()
225 parser = reqparse.RequestParser()
226 parser.add_argument('page', type=int, default=1)
227 args = parser.parse_args()
229 return SerieService.get_additional_serie(user_uuid, args["page"])
232@api.route("/additional/<int:serie_id>")
233class SerieAdditionalValidationResource(Resource):
234 @api.doc(
235 "Validate (put) added Series (by user)",
236 responses={
237 201: ("Additional series data successfully validated"),
238 401: ("Authentication required"),
239 403: ("Permission missing"),
240 404: ("User or series not found!"),
241 },
242 )
243 @jwt_required
244 def put(self, serie_id):
245 """ Validate (put) added Series (by user) """
246 user_uuid = get_jwt_identity()
248 return SerieService.validate_additional_serie(user_uuid, serie_id)
250 @api.doc(
251 "Decline (delete) added Series (by user)",
252 responses={
253 201: ("Additional series successfully deleted"),
254 401: ("Authentication required"),
255 403: ("Permission missing"),
256 404: ("User or series not found!"),
257 },
258 )
259 @jwt_required
260 def delete(self, serie_id):
261 """ Decline (delete) added Series (by user) """
262 user_uuid = get_jwt_identity()
264 return SerieService.decline_additional_serie(user_uuid, serie_id)