Пример #1
0
def api_delete_movie(movie_id):
    check_admin()
    movie = Movie.get(movie_id)
    if movie is None:
        raise APIResourceNotFoundError('Movie')
    movie.delete()
    return dict(id=movie_id)
Пример #2
0
def movie(movie_id):
    user = ctx.request.user
    movie = Movie.get(movie_id)
    movie = _get_movie_details(movie)
    if movie is None:
        raise notfound()
    movie.html_summary = markdown2.markdown(movie.summary)
    if user:
        history = History.find_first('where user_id=? and movie_id=?', user.id,
                                     movie_id)
        if not history:
            history = History(user_id=user.id, movie_id=movie_id)
            history.insert()
        else:
            history.created_at = time.time()
            history.update()
    reviews = Review.find_by(
        'where movie_id=? order by created_at desc limit 1000', movie_id)
    user_review = ''
    if user:
        user_review = Review.find_first('where user_id=? and movie_id=?',
                                        user.id, movie_id)
    return dict(movie=movie,
                reviews=reviews,
                user=user,
                user_review=user_review)
Пример #3
0
def manage_movies_edit(movie_id):
    movie = Movie.get(movie_id)
    if movie is None:
        raise notfound()
    return dict(id=movie.id,
                action='/api/movies/%s' % movie_id,
                redirect='/manage/movies',
                user=ctx.request.user)
Пример #4
0
def api_update_movie(movie_id):
    check_admin()
    i = ctx.request.input(name='',
                          duration='',
                          style='',
                          date='',
                          director='',
                          writer='',
                          star='',
                          summary='',
                          img='')
    name = i.name.strip()
    duration = i.duration.strip()
    style = i.style.strip()
    date = i.date.strip()
    director = i.director.strip()
    writer = i.writer.strip()
    star = i.star.strip()
    summary = i.summary.strip()
    img = i.img
    if not name:
        raise APIValueError('name', 'name cannot be empty.')
    if not duration:
        raise APIValueError('duration', 'duration cannot be empty.')
    if not style:
        raise APIValueError('style', 'style cannot be empty.')
    if not date:
        raise APIValueError('date', 'date cannot be empty.')
    if not director:
        raise APIValueError('director', 'director cannot be empty.')
    if not writer:
        raise APIValueError('writer', 'writer cannot be empty.')
    if not star:
        raise APIValueError('star', 'star cannot be empty.')
    if not summary:
        raise APIValueError('summary', 'summary cannot be empty.')
    if not img:
        raise APIValueError('img', 'img cannot be empty.')
    movie = Movie.get(movie_id)
    if movie is None:
        raise APIResourceNotFoundError('movie')
    movie.name = name
    movie.duration = duration
    movie.style = style
    movie.date = date
    movie.director = director
    movie.writer = writer
    movie.star = star
    movie.summary = summary
    movie.update()
    movie_poster_src = 'static/images/movie_posters/' + movie_id + '.jpg'
    img = img[img.index(';base64,') + 8:]
    imgData = base64.b64decode(img)
    with open(movie_poster_src, 'wb') as f:
        f.write(imgData)
    return movie
Пример #5
0
def api_get_histories(user_id):
    if not user_id:
        return APIValueError('users')
    histories = History.find_by('where user_id=? order by created_at desc',
                                user_id)
    movies = []
    if histories:
        for history in histories:
            dt = datetime.fromtimestamp(history.created_at)
            movie_id = history.movie_id
            movie = Movie.get(movie_id)
            if movie:
                movie = _get_movie_details(movie)
                movie.history_day = dt.day
                movie.history_month = dt.month
            movies.append(movie)
        return dict(movies=movies)
    raise APIResourceNotFoundError('histories')
Пример #6
0
def api_create_movie_review(movie_id):
    user = ctx.request.user
    if user is None:
        raise APIPermissionError('Need signin.')
    movie = Movie.get(movie_id)
    if movie is None:
        raise APIResourceNotFoundError('Movie')
    i = ctx.request.input(score='', content='')
    score = int(i.score) * 10
    content = i.content.strip()
    if not score:
        raise APIValueError('score')
    if not content:
        content = ''
    review = Review.find_first('where user_id=? and movie_id=?', user.id,
                               movie_id)
    if review:
        movie.score = (movie.score * movie.num_review - review.score +
                       score) / movie.num_review
        movie.update()
        review.score = score
        review.content = content
        review.created_at = time.time()
        review.update()
    else:
        review = Review(movie_id=movie_id,
                        user_id=user.id,
                        user_name=user.name,
                        score=score,
                        content=content)
        review.insert()
        movie.score = (movie.score * movie.num_review +
                       score) / (movie.num_review + 1)
        movie.num_review = movie.num_review + 1
        movie.update()
    return dict(review=review)
Пример #7
0
def api_get_movie(movie_id):
    movie = Movie.get(movie_id)
    if movie:
        movie.img = get_movie_poster_by_id(movie_id)
        return movie
    raise APIResourceNotFoundError('movie')
Пример #8
0
def command():
    text = request.form.get('text')
    if not text:
        return '', 400
    args = text.split()
    # Check if we know about this command
    if args[0] == 'add':
        success, m = add_movie(' '.join(args[1:]))
        if success:
            m = m.get_details()
            m['text'] = "Added movie:"
        return Response(json.dumps(m), mimetype='application/json')
    elif args[0] == 'choose':
        if len(args) == 1:
            rand = Movie.select().order_by(fn.Random())
        else:
            genre = ' '.join(args[1:])
            rand = movies_in_genre(genre).order_by(fn.Random())
        try:
            m = rand.get().get_details()
            m['text'] = random.choice(config.SAYINGS)
            return Response(json.dumps(m), mimetype='application/json')
        except Movie.DoesNotExist:
            return "No movies yet!"
    elif args[0] == 'watched':
        name = ' '.join(args[1:])
        try:
            movie = Movie.get(fn.Lower(Movie.name) == name.lower())
        except Movie.DoesNotExist:
            return "Sorry, I couldn't find that movie. You need to be exact."
        movie.watched = True
        movie.save()
        return "Marked _{}_ as watched".format(movie.name)
    elif args[0] == 'unwatch':
        # Undocumented commands
        name = ' '.join(args[1:])
        try:
            movie = Movie.get(fn.Lower(Movie.name) == name.lower())
        except Movie.DoesNotExist:
            return "Sorry, I couldn't find that movie. You need to be exact."
        movie.watched = False
        movie.save()
        return "Marked _{}_ as un-watched".format(movie.name)
    elif args[0] == 'list':
        data = {'text': "Must specify `movies` or `genres`."}
        if len(args) > 1:
            if args[1] == 'movies':
                if len(args) > 2:
                    data = format_movies(' '.join(args[2:]))
                else:
                    data = format_movies()
            elif args[1] == 'genres':
                data = format_genres()
        return Response(json.dumps(data), mimetype='application/json')
    # Management commands
    elif args[0] == 'refresh_genres':
        get_genres()
        return 'Done'
    elif args[0] == 'update':
        update()
        return '', 204
    elif args[0] == 'reload':
        reload()
        return '', 204
    return Response(json.dumps(help_text()), mimetype='application/json')