Esempio n. 1
0
def return_rental(parser):
    # This shouldn't happen
    if not g.user:
        return IkiruJsonResponse(message='Unable to validate user.',
                                 status_code=401)

    args = parser.parse_args()
    rental = Rental.get_by_uuid(args['rental_uuid'])

    if not rental or rental.user.uuid != g.user.uuid:
        return IkiruJsonResponse(message='Invalid rental identifier.',
                                 status_code=404)

    if rental.was_returned():
        return IkiruJsonResponse(message='Rental already returned.',
                                 status_code=Status.UNPROCESSABLE_ENTITY)

    # Faulty logic but should work as a proof of concept
    try:
        rental.date_returned = datetime.utcnow()
        db.session.commit()
    except SQLAlchemyError as e:
        return IkiruJsonResponse(message=e._message(), status_code=500)

    return IkiruJsonResponse({"cost": formatted_cost(rental.date_rented)},
                             'Rental returned successfully.')
Esempio n. 2
0
def get_movie_by_uuid(uuid):
    movie = Movie.get_by_uuid(uuid)
    if movie is None:
        return IkiruJsonResponse(message='Movie does not exist.',
                                 status_code=404)
    m = movie.as_dict()
    m['genres'] = [g.name for g in movie.genres]
    return IkiruJsonResponse(m)
Esempio n. 3
0
def get_user_rentals(uuid):
    user = g.user or User.get_by_uuid(uuid)
    if user is None:
        return IkiruJsonResponse(message='User does not exist.',
                                 status_code=404)
    return IkiruJsonResponse({
        'active_rentals': user.get_active_rentals(),
        'past_rentals': user.get_past_rentals()
    })
Esempio n. 4
0
def create_user(parser):
    args = parser.parse_args()
    user = User(**args)
    db.session.add(user)

    try:
        db.session.commit()
    except sqlalchemy.exc.IntegrityError as e:
        return IkiruJsonResponse(None, 'Username already exists.',
                                 Status.CONFLICT)

    db.session.refresh(user)
    return IkiruJsonResponse(user, 'User created successfully.')
Esempio n. 5
0
def rent_movie(parser):
    args = parser.parse_args()

    movie = Movie.get_by_uuid(args['movie_uuid'])
    if movie is None:
        return IkiruJsonResponse(message='Invalid movie identifier',
                                 status_code=404)

    rental = Rental(user_id=g.user.id, movie_id=movie.id)
    db.session.add(rental)
    db.session.commit()
    db.session.refresh(rental)
    return IkiruJsonResponse(
        payload=rental, message=f'Movie `{movie.title}` rented successfully.')
Esempio n. 6
0
def create_movie(parser):
    args = parser.parse_args()
    args['release_date'] = datetime.datetime(year=args['release_date'],
                                             month=1,
                                             day=1)

    movie = Movie(**args)
    db.session.add(movie)
    try:
        db.session.commit()
    except IntegrityError as e:
        return IkiruJsonResponse(None, 'Movie already exists.',
                                 Status.CONFLICT)

    db.session.refresh(movie)
    return IkiruJsonResponse(movie, 'Movie created successfully.')
Esempio n. 7
0
 def post(self):
     """ Check token validity."""
     jwt = get_raw_jwt()
     return IkiruJsonResponse({
         'user':
         g.user,
         'date_expires':
         datetime.utcfromtimestamp(jwt['exp'])
     })
Esempio n. 8
0
def get_movies():
    args = get_movies_parser.parse_args()
    page = args.get('page')
    page_size = args.get('page_size', None)
    if not page_size:
        app = current_app._get_current_object()
        page_size = page_size or app.config.get('PAGINATION_DEFAULT_SIZE',
                                                None) or 100
    return IkiruJsonResponse(
        payload=Movie.query.paginate(page, page_size, False).items)
Esempio n. 9
0
def site_index():
    output = []
    for rule in current_app.url_map.iter_rules():
        options = {}
        for arg in rule.arguments:
            options[arg] = "[{0}]".format(arg)

        url = rule.rule  # urllib.parse.unquote(url_for(rule.endpoint, **options))
        for method in rule.methods:
            # ToDo: Dynamically insert docstrings from the endpoints
            output.append(f'{method} {url}')  # = repr(rule)
    return IkiruJsonResponse(sorted(output))
Esempio n. 10
0
def get_cost(rental_uuid):
    rental = Rental.get_by_uuid(rental_uuid)
    if not rental or rental.user.uuid != g.user.uuid:
        return IkiruJsonResponse(message='Invalid rental identifier.',
                                 status_code=404)
    return IkiruJsonResponse({"cost": formatted_cost(rental.date_rented)})
Esempio n. 11
0
def get_genre_movies(genre_uuid):
    genre = Genre.get_by_uuid(genre_uuid)
    if not genre:
        return IkiruJsonResponse(None, 'Invalid genre uuid.', 404)
    return IkiruJsonResponse(genre.movies)
Esempio n. 12
0
 def auth_error():
     return IkiruJsonResponse(message='Incorrect credentials.',
                              status_code=401)
Esempio n. 13
0
def get_user_by_uuid(uuid):
    user = g.user or User.get_by_uuid(uuid)
    if user is None:
        return IkiruJsonResponse(message='User does not exist.',
                                 status_code=404)
    return IkiruJsonResponse(user)
Esempio n. 14
0
def get_active_user():
    user = g.user
    if user is None:
        return IkiruJsonResponse(message='User does not exist.',
                                 status_code=404)
    return IkiruJsonResponse(user)
Esempio n. 15
0
 def post(self):
     """Get bearer token via simple auth."""
     payload = {'user': g.user, 'token': create_access_token(g.user.id)}
     return IkiruJsonResponse(payload, 'Access token created successfully.')
Esempio n. 16
0
def handle_generic(e):
    traceback.print_exception(type(e), e, e.__traceback__)
    if isinstance(e, exceptions.HTTPException):
        return IkiruJsonResponse(message=e.description, status_code=e.code)
Esempio n. 17
0
def get_movie_rentals(uuid):
    movie = Movie.get_by_uuid(uuid)
    if movie is None:
        return IkiruJsonResponse(message='Movie does not exist.',
                                 status_code=404)
    return IkiruJsonResponse(movie.rentals)
Esempio n. 18
0
def get_genres():
    return IkiruJsonResponse(Genre.query.all())