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)
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)
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)
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
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')
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)
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')
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')