예제 #1
0
def movies_by_first_letter():
    """
    """
    character = request.args.get('character')
    search_form = utils.MovieSearchForm()
    if character:
        movies = services.get_movies_by_first_letter(character,
                                                     repo.repo_instance)
        for movie in movies:
            movie['url'] = url_for('movie_bp.movie',
                                   title=movie['title'],
                                   year=movie['year'])
        return render_template('browse/browse-movies.html',
                               title=f"Movies Starting With: {character}",
                               watchlist=utils.get_user_watchlist(),
                               movies=utils.get_added_movies(
                                   movies, utils.get_user_watchlist()),
                               search_form=search_form)
    else:
        letters = services.get_all_movie_first_letter(repo.repo_instance)
        letter_urls = []
        for letter in letters:
            letter_urls.append(
                dict(letter=letter,
                     url=url_for('.movies_by_first_letter', character=letter)))
        letter_urls.insert(0, dict(letter="All Movies",
                                   url=url_for('.movies')))
        return render_template(
            'browse/browse-a-z.html',
            title="Movies A-Z",
            a_to_z=letter_urls,
            search_form=search_form,
        )
예제 #2
0
def actor():
    """
    """
    search_form = utils.MovieSearchForm()
    fullname = request.args.get('fullname')
    if fullname:
        try:
            movie_data, collegues = services.get_movies_by_actor(
                fullname, repo.repo_instance)
            for movie in movie_data:
                movie['url'] = url_for('movie_bp.movie',
                                       title=movie['title'],
                                       year=movie['year'])
            for collegue in collegues:
                collegue['url'] = url_for('.actor',
                                          fullname=collegue['fullname'])
            return render_template(
                'person/person.html',
                title="Actor",
                fullname=fullname,
                watchlist=utils.get_user_watchlist(),
                movies=utils.get_added_movies(movie_data,
                                              utils.get_user_watchlist()),
                collegues=collegues,
                search_form=search_form,
            )
        except services.PersonException:
            return redirect(url_for('home_bp.home'))
    else:
        return redirect(url_for('home_bp.home'))
예제 #3
0
def genre():
    """
    """
    search_form = utils.MovieSearchForm()
    genre = request.args.get('genre')
    if genre:
        try:
            movie_data = services.get_movies_by_genre(genre,
                                                      repo.repo_instance)
            for movie in movie_data:
                movie['url'] = url_for('movie_bp.movie',
                                       title=movie['title'],
                                       year=movie['year'])
            movie_data.sort(key=lambda x: x['rank'])
            return render_template(
                'genre/genre.html',
                title=genre,
                watchlist=utils.get_user_watchlist(),
                movies=utils.get_added_movies(movie_data,
                                              utils.get_user_watchlist()),
                search_form=search_form,
            )
        except services.UnknownGenreException:
            return redirect(url_for('home_bp.home'))
        return redirect(url_for('home_bp.home'))
    else:
        return redirect(url_for('home_bp.home'))
예제 #4
0
def review_movie():
    """
    """
    username = session['username']

    review_form = ReviewForm()
    search_form = utils.MovieSearchForm()
    if review_form.validate_on_submit():
        year = review_form.movie_year.data
        title = review_form.movie_title.data

        services.add_review(title, year, review_form.review.data, username,
                            review_form.rating.data, repo.repo_instance)
        return redirect(url_for('movie_bp.movie', title=title, year=year))

    if request.method == 'GET':
        title = request.args.get('movie_title')
        year = request.args.get('movie_year')
        review_form.movie_year.data = year
        review_form.movie_title.data = title
    else:
        title = review_form.movie_title.data
        year = review_form.movie_year.data
    try:
        movie = services.get_movie(title, year, repo.repo_instance)
        return render_template('movie/review_movie.html',
                               movie_title=movie['title'],
                               movie_year=movie['year'],
                               review_form=review_form,
                               search_form=search_form,
                               handler_url=url_for('movie_bp.review_movie'))
    except:
        return redirect(url_for('movie_bp.movie', title=title, year=year))
예제 #5
0
def login():
    """
    """
    auth_form = LoginForm()
    search_form = utils.MovieSearchForm()
    username_not_recognised = None
    password_doesnt_match = None
    if auth_form.validate_on_submit():
        try:
            user = services.get_user(auth_form.username.data,
                                     repo.repo_instance)
            services.authenticate_user(user['username'],
                                       auth_form.password.data,
                                       repo.repo_instance)

            session.clear()
            session['username'] = user['username']
            return redirect(url_for('home_bp.home'))
        except services.UnknownUserException:
            username_not_recognised = "Username not recognised- please try another"
        except services.AuthenticationException:
            password_doesnt_match = 'Password does not match username. Please examine your credentials and try again'

    return render_template(
        'authentication/credentials.html',
        title='Login',
        username_error_message=username_not_recognised,
        password_error_message=password_doesnt_match,
        auth_form=auth_form,
        search_form=search_form,
    )
예제 #6
0
def register():
    """
    """
    auth_form = RegistrationForm()
    search_form = utils.MovieSearchForm()
    username_unique = None

    if auth_form.validate_on_submit():
        try:
            services.add_user(auth_form.username.data, auth_form.password.data,
                              repo.repo_instance)
            return redirect(url_for('authentication_bp.login'))
        except services.NameNotUnqiueException:
            username_unique = "Username is already used, please try another one"
            return render_template(
                'authentication/credentials.html',
                title='Register',
                auth_form=auth_form,
                username_error_message=username_unique,
                handler_url=url_for('authentication_bp.register'),
                search_form=search_form)
    return render_template('authentication/credentials.html',
                           title='Register',
                           auth_form=auth_form,
                           username_error_message=username_unique,
                           handler_url=url_for('authentication_bp.register'),
                           search_form=search_form)
예제 #7
0
def actors_by_initial():
    """
    """
    search_form = utils.MovieSearchForm()
    character = request.args.get('character')
    if character:
        actors = services.get_actors_by_first_letter(character,
                                                     repo.repo_instance)
        for actor in actors:
            actor['url'] = url_for('person_bp.actor', fullname=actor['name'])
        return render_template(
            'browse/browse.html',
            title=f"Actors Starting With: {character}",
            data=actors,
            search_form=search_form,
        )
    else:
        letters = services.get_all_actor_first_letter(repo.repo_instance)
        letter_urls = []
        for letter in letters:
            letter_urls.append(
                dict(letter=letter,
                     url=url_for('.actors_by_initial', character=letter)))
        letter_urls.insert(0, dict(letter="All Actors",
                                   url=url_for('.actors')))
        return render_template('browse/browse-a-z.html',
                               title="Actors A-Z",
                               a_to_z=letter_urls,
                               search_form=search_form)
예제 #8
0
def profile():
    """
    """
    profile = services.get_user(session['username'], repo.repo_instance)
    if profile:
        return render_template('profile/profile.html', profile=profile, title="Profile",
                               search_form=utils.MovieSearchForm())
    else:
        return redirect(url_for('home_bp.home'))
예제 #9
0
def watchlist():
    """
    """
    return render_template(
        'watchlist/watchlist.html',
        title='Watchlist',
        watchlist=utils.get_user_watchlist(),
        search_form=utils.MovieSearchForm(),
    )
예제 #10
0
def actors():
    """
    """
    search_form = utils.MovieSearchForm()
    actors = services.get_actors(repo.repo_instance)
    for actor in actors:
        actor['url'] = url_for('person_bp.actor', fullname=actor['name'])
    return render_template(
        'browse/browse.html',
        title="All Actors",
        data=actors,
        search_form=search_form,
    )
예제 #11
0
def genres():
    """
    """
    genres = services.get_genres(repo.repo_instance)
    search_form = utils.MovieSearchForm()
    for genre in genres:
        genre['url'] = url_for('genre_bp.genre', genre=genre['name'])
    return render_template(
        'browse/browse.html',
        title='Genres',
        data=genres,
        search_form=search_form,
    )
예제 #12
0
def directors():
    """
    """
    search_form = utils.MovieSearchForm()
    directors = services.get_directors(repo.repo_instance)
    for director in directors:
        director['url'] = url_for('person_bp.director',
                                  fullname=director['name'])
    return render_template(
        'browse/browse.html',
        title="All Directors",
        data=directors,
        search_form=search_form,
    )
예제 #13
0
def movies():
    """
    """
    search_form = utils.MovieSearchForm()
    movies = services.get_movies(repo.repo_instance)
    for movie in movies:
        movie['url'] = url_for('movie_bp.movie',
                               title=movie['title'],
                               year=movie['year'])
    return render_template('browse/browse-movies.html',
                           title='All Movies By Rank',
                           watchlist=utils.get_user_watchlist(),
                           movies=utils.get_added_movies(
                               movies, utils.get_user_watchlist()),
                           search_form=search_form)
예제 #14
0
def search():
    """
    """
    search_form = utils.MovieSearchForm(request.form)
    search_form.actors.choices = services.get_actors(repo.repo_instance)
    search_form.director.choices = services.get_directors(repo.repo_instance)
    search_form.genres.choices = services.get_genres(repo.repo_instance)
    if request.method == 'POST':
        if search_form.validate_on_submit():
            return search_results(search_form)
        else:
            return redirect(url_for('.search', ))
    else:
        request.form = search_form
        return render_template('search/search.html',
                               search_form=search_form,
                               title="Search")
예제 #15
0
def home():
    """
    """
    search_form = utils.MovieSearchForm()
    movies = services.get_top_100movies(repo.repo_instance)
    for movie in movies:
        movie['url'] = url_for('movie_bp.movie',
                               title=movie['title'],
                               year=movie['year'])

    return render_template(
        'home/home.html',
        title='Home',
        watchlist=utils.get_user_watchlist(),
        movies=utils.get_added_movies(movies, utils.get_user_watchlist()),
        search_form=search_form,
    )
예제 #16
0
def movie():
    """
    """
    title = request.args.get('title')
    year = request.args.get('year')
    search_form = utils.MovieSearchForm()
    try:
        movie_data = services.get_movie(title, year, repo.repo_instance)
        movie_data['add_review_url'] = url_for('movie_bp.review_movie',
                                               movie_title=movie_data['title'],
                                               movie_year=movie_data['year'])
        return render_template(
            'movie/movie.html',
            title="Movie",
            movie=utils.get_added_movies([movie_data],
                                         utils.get_user_watchlist())[0],
            search_form=search_form,
        )
    except services.UnknownMovieException:
        return redirect(url_for('home_bp.home'))
    return redirect(url_for('home_bp.home'))
예제 #17
0
def director():
    """
    """
    search_form = utils.MovieSearchForm()
    fullname = request.args.get('fullname')
    if fullname is not None:
        try:
            movie_data = services.get_movies_by_director(
                fullname, repo.repo_instance)
            for movie in movie_data:
                movie['url'] = url_for('movie_bp.movie',
                                       title=movie['title'],
                                       year=movie['year'])
            return render_template('person/person.html',
                                   title="Director",
                                   fullname=fullname,
                                   watchlist=utils.get_user_watchlist(),
                                   movies=utils.get_added_movies(
                                       movie_data, utils.get_user_watchlist()),
                                   search_form=search_form)
        except ValueError:
            return render_template(redirect(url_for('home_bp.home')))
    return render_template(redirect(url_for('home_bp.home')))