def show(self, movie_id, dummy): try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return self.not_found('error/404.phtml') # last ratings last_ratings = self.session.query(Rating.rating, User)\ .join((User, and_(User.id == Rating.user_id, Rating.movie == movie)))\ .order_by(Rating.rated.desc()).all() if len(last_ratings) == 0: avg_rating = None else: avg_rating = sum(r.rating for r in last_ratings) * .5 / len(last_ratings) # user rating if self.user is not None: try: self.view['rating'] = Rating.load(self.session, movie=movie, user=self.user) except NoResultFound: pass self.view.update({'movie': movie, 'meta': movie.get_meta(), 'last_ratings': last_ratings, 'avg_rating': avg_rating}) self.template = 'movie.phtml'
def update_movie(self, movie_id): try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return self.not_found('error/404.phtml') title, year, poster, director, screenwriter, actors, imdbid = [self.request.form[key] for key in 'title, year, poster, director, screenwriter, actors, imdbid'.split(', ')] year = int(year) movie.title = title movie.year = year movie.img = poster if imdbid==movie.imdbid: meta = dict(movie.get_meta()) meta['Director'] = reformat_cast(director) meta['Writer'] = reformat_cast(screenwriter) meta['Actors'] = reformat_cast(actors) movie.meta = meta else: imdbid = imdbid.strip() if 'imdb.com' in imdbid: imdbid = imdbid.split("title/")[1].split("/")[0] movie.imdbid = imdbid movie.meta = None movie.get_meta() self.session.flush() return self.redirect('/mod/movie/%d' % movie_id)
def movie(self, movie_id): try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return self.not_found('error/404.phtml') self.view['movie'] = movie self.view['meta'] = movie.get_meta() self.template = 'mod/movie.phtml'
def partial(self, movie_id): try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return meta = movie.get_meta() self.view.update({'movie': movie, 'meta': meta}) self.template = 'partials/movie.phtml'
def togglewatchlist(self): movie_id = int(self.request.form['movie_id']) movie = Movie.load(self.session, id=movie_id) if movie in self.user.watchlist: self.user.watchlist.remove(movie) else: # checked if already seen try: Rating.load(self.session, movie=movie, user=self.user) except NoResultFound: self.user.watchlist.add(movie)
def user_rate(self): if self.user is None: return self.not_authorized('error/401.phtml') try: movie_id = int(self.request.form['movie_id']) rating = int(self.request.form['rating']) except (KeyError, ValueError): return self.bad_request('error/400.phtml') try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return self.not_found('error/404.phtml') if rating == 0: self.user.drop_rating(movie) else: self.user.set_rating(movie, rating) self.template = None
def update_movies(self): with open(project_path + '/data/movies', 'r') as movies: while True: batch = (line.decode('utf-8').strip().split('(') for _, line in zip(range(100), movies) if line.strip() != '') batch = [('('.join(parts[:-1]).strip(), int(parts[-1][:-1])) for parts in batch] if batch == []: break batch = set(batch) existing = self.session.query(Movie.title, Movie.year)\ .filter(tuple_(Movie.title, Movie.year).in_(batch)).all() new_ = batch.difference(existing) new_ = [ Movie(title=title, year=year, meta={}) for title, year in new_ ] self.session.add_all(new_) self.session.commit() self.redirect('/')
def update_movie(self, movie_id): try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return self.not_found('error/404.phtml') title, year, poster, director, screenwriter, actors, imdbid = [ self.request.form[key] for key in 'title, year, poster, director, screenwriter, actors, imdbid'. split(', ') ] year = int(year) movie.title = title movie.year = year movie.img = poster if imdbid == movie.imdbid: meta = dict(movie.get_meta()) meta['Director'] = reformat_cast(director) meta['Writer'] = reformat_cast(screenwriter) meta['Actors'] = reformat_cast(actors) movie.meta = meta else: imdbid = imdbid.strip() if 'imdb.com' in imdbid: imdbid = imdbid.split("title/")[1].split("/")[0] movie.imdbid = imdbid movie.meta = None movie.get_meta() self.session.flush() return self.redirect('/mod/movie/%d' % movie_id)
class Controller(BaseController): def partial(self, movie_id): try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return meta = movie.get_meta() self.view.update({'movie': movie, 'meta': meta}) self.template = 'partials/movie.phtml' def show(self, movie_id, dummy): try: movie = Movie.load(self.session, id=movie_id) except NoResultFound: return self.not_found('error/404.phtml') # last ratings last_ratings = self.session.query(Rating.rating, User)\ .join((User, and_(User.id == Rating.user_id, Rating.movie == movie)))\ .order_by(Rating.rated.desc()).all() if len(last_ratings) == 0: avg_rating = None else: avg_rating = sum(r.rating for r in last_ratings) * .5 / len(last_ratings) # user rating if self.user is not None: try: self.view['rating'] = Rating.load(self.session, movie=movie, user=self.user) except NoResultFound: pass self.view.update({'movie': movie, 'meta': movie.get_meta(), 'last_ratings': last_ratings, 'avg_rating': avg_rating}) self.template = 'movie.phtml' def missing(self): self.template = 'missing.phtml' def fill_missing(self): imdb_link = self.request.form['imdb'].lower() if 'imdb.com' not in imdb_link: return self.redirect('/movie/missing') try: imdbid = imdb_link.split("title/")[1].split("/")[0] q = requests.get("http://www.omdbapi.com/?i=%s&r=JSON" % imdbid) content = q.content del q content_json = json_loads(content) title = content_json['Title'] year = int(content_json['Year'].strip()) except Exception, _: return self.redirect('/movie/missing') try: movie = Movie.load(self.session, title=title, year=year) except NoResultFound: movie = Movie(title=title, year=year, meta=content_json, imdbid=imdbid) self.session.add(movie) self.session.flush() else: movie.meta=content_json movie.imdbid=imdbid return self.redirect('/movie/%d-%s' % (movie.id, url_quote(movie.title)))