def post(cls): """ POST requests for login resource Returns: """ try: user_json = request.get_json() user_from_schema = user_schema.load(user_json, ) user = UserModel.find_by_email(user_from_schema.email) user_ip = get_client_ip(request) if user and user.check_password(user_from_schema.password): if not user.disabled: access_token, refresh_token = generate_auth_token( user, user_ip) time_now = datetime.datetime.now(pytz.utc) user_tracking = TrackLogin(user.id, ip_address=user_ip, created_on=time_now) user_tracking.save() return { "access_token": access_token, "refresh_token": refresh_token }, 200 return {"message": get_text("user_disabled")}, 401 return {"message": get_text("user_invalid")}, 401 except Exception as _: return {"message": get_text("user_error_logging_in")}, 500
def post(cls): """ POST request to add a movie Returns: """ current_user, movie, user_id, title = cls.load_movie_and_user( movie_schema) try: movie_available = movie.find_by_title_and_user_id(title, user_id) if not movie_available: title = movie.title description = movie.description rating = movie.rating movie = MovieModel() movie.create_movie(title, description, rating, current_user["_id"]) movie.save() return { "message": get_text("movie_created"), "movie": movie.json }, 201 return {"message": get_text("movie_exist").format(title)}, 400 except Exception as _: print(_) return {"message": get_text("error_adding_movie")}, 500
def delete(cls): """ Remove a movie from a list Returns: """ current_user, movie, user_id, title = cls.load_movie_and_user( delete_movie_schema) try: movie_available = movie.find_by_title_and_user_id(title, user_id) if not movie_available: return { "message": get_text("movie_not_exist").format(title) }, 404 movie_available.remove() return {"message": get_text("movie_removed").format(title)}, 200 except Exception as _: return {"message": get_text("error_deleting_movie")}, 500
def post(cls): """ POST request for registration Resource Returns: """ user_json = request.get_json() user = user_schema.load(user_json, ) if not is_email_valid(user.email): return { "message": get_text("user_email_bad_format").format(user.email) }, 400 if UserModel.find_by_email(user.email): return {"message": get_text("user_email_exist")}, 400 user = user.create_user(user.email, user.password) user.save() return {"message": get_text("user_registered")}, 201
def put(cls): """ Update a movie rating Returns: """ current_user, movie, user_id, title = cls.load_movie_and_user( update_movie_schema) try: movie_available = movie.find_by_title_and_user_id(title, user_id) if not movie_available: return {"message": get_text("movie_not_exist").format( title)}, \ 404 movie_available.update_movie_rating(movie.rating) movie_available.save() return { "message": get_text("movie_updated").format(title), "movie": movie_available.json }, 200 except Exception as _: return {"message": get_text("error_updating_movie")}, 500
def get(cls, page: int): """ get movies from an external API Returns: """ if page < MOVIES_MIN_PAGINATION or page > MOVIES_MAX_PAGINATION: return ({ "message": get_text("movies_pagination_out_bounds").format( MOVIES_MIN_PAGINATION, MOVIES_MAX_PAGINATION) }, 400) response = get_movies(MOVIES_URL + '&language=en-US', page) response = response.json() result = response['results'] result = result[:20] return {"movies": result}, 200