示例#1
0
def test_genres():
    movie1 = Movie("Spirited Away", 2000)
    movie2 = Movie("Your Name", 2000)
    movie3 = Movie("Batman", 2000)
    movie4 = Movie(None, None)

    movie1.genres = [Genre("Comedy"), Genre("Horror"), Genre("Sci-fi")]
    assert movie1.genres == [Genre("Comedy"), Genre("Horror"), Genre("Sci-fi")]
    movie2.genres = [Genre("Comedy"), Genre("Horror"), Genre("Sci-fi"), 12345]
    assert movie2.genres == []
    movie3.genres = Genre("Comedy")
    assert movie3.genres == [Genre("Comedy")]
    movie4.genres = "Comedy"
    assert movie4.genres == []
示例#2
0
    def test_setters(self): # inherently tests getters too
        a_movie = Movie("Back To The Future", 1965)
        director1 = Director("Brad Bird")

        a_movie.title = "  Mission Impossible: Ghost Protocol  "
        assert a_movie.title == "Mission Impossible: Ghost Protocol"
        a_movie.title = 15
        #assert a_movie.title == "Mission Impossible: Ghost Protocol"

        a_movie.description = "  An action movie  "
        assert a_movie.description == "An action movie"

        a_movie.director = director1
        assert a_movie.director == director1

        actor1 = Actor("Tom Cruise")
        actor2 = Actor("Simon Pegg")
        a_movie.actors = [actor1, actor2]
        assert a_movie.actors == [actor1, actor2]

        genre1 = Genre("Action")
        genre2 = Genre("Comedy")
        a_movie.genres = [genre1, genre2]
        assert a_movie.genres == [genre1, genre2]

        a_movie.runtime_minutes = 100
        assert a_movie.runtime_minutes == 100
        assert type(a_movie.runtime_minutes) == int
        with pytest.raises(ValueError):
            a_movie.runtime_minutes = 0
            a_movie.runtime_minutes = -10
示例#3
0
    def _read_row(self, row: _ROW) -> Movie:
        """
        Helper method to construct a Movie from a row.

        Raises:
            ValueError: unable to parse row: {row}
         """
        error = False

        try:
            title = row['Title']
            genres = [
                self._get_genre(Genre(name))
                for name in row['Genre'].split(',')
            ]
            description = row['Description']
            director = self._get_director(Director(row['Director']))
            actors = [
                self._get_actor(Actor(name))
                for name in row['Actors'].split(',')
            ]
            release_year = int(row['Year'])
            runtime_minutes = int(row['Runtime (Minutes)'])
            rating = float(row['Rating'])
            votes = int(row['Votes'])
            revenue_millions = float(
                row['Revenue (Millions)']
            ) if row['Revenue (Millions)'] != 'N/A' else None
            metascore = int(
                row['Metascore']) if row['Metascore'] != 'N/A' else None
        except KeyError:
            error = True
        except ValueError:
            error = True

        if error:
            raise ValueError(f'unable to parse row: {row}')

        movie = Movie(title, release_year)
        movie.genres = genres
        movie.description = description
        movie.director = director
        movie.actors = actors
        movie.runtime_minutes = runtime_minutes
        movie.rating = rating
        movie.votes = votes

        if revenue_millions:
            movie.revenue_millions = revenue_millions

        if metascore:
            movie.metascore = metascore

        return movie
示例#4
0
def test_add_genre():
    movie1 = Movie("Spirited Away", 2000)

    movie1.genres = [Genre("Comedy")]
    movie1.add_genre(Genre("Horror"))
    assert movie1.genres == [Genre("Comedy"), Genre("Horror")]
    movie1.add_genre("Scifi")
    movie1.add_genre(Genre("Hhiya"))
    movie1.add_genre("")
    movie1.add_genre(None)
    movie1.add_genre(21345648)
    assert movie1.genres == [Genre("Comedy"), Genre("Horror"), Genre("Hhiya")]
示例#5
0
 def create_movie_instance(self, row):
     movie = Movie(row["Title"], int(row["Year"]))
     movie.director = Director(row["Director"])
     movie.runtime_minutes = int(row["Runtime (Minutes)"])
     movie.actors = [
         Actor(actor.strip()) for actor in row['Actors'].split(",")
     ]
     movie.genres = [
         Genre(genre.strip()) for genre in row['Genre'].split(",")
     ]
     movie.description = row["Description"]
     return movie
示例#6
0
def remove_genre():
    movie1 = Movie("Spirited Away", 2000)

    movie1.genres = [Genre("Comedy")]
    movie1.add_genre(Genre("Horror"))
    movie1.add_genre(Genre("Happy ending"))
    assert movie1.genres == [
        Genre("Comedy"),
        Genre("Horror"),
        Genre("Happy ending")
    ]
    movie1.remove_genre("Scifi")
    movie1.remove_genre(Genre("Hhiya"))
    movie1.remove_genre("")
    movie1.remove_genre(None)
    movie1.remove_genre(21345648)
    movie1.remove_genre(Genre("Happy ending"))
    assert movie1.genres == [Genre("Comedy"), Genre("Horror")]
    movie1.remove_genre(Genre("Comedy"))
    assert movie1.genres == [Genre("Horror")]
    movie1.remove_genre(Genre("Horror"))
    assert movie1.genres == []
示例#7
0
def populated_movies(genres, directors, actors):
    movies = []

    for i in range(10):
        movie = Movie(f'Movie{i}', 2000 + i)
        movie.genres = [genres[i]]
        movie.description = f'Description{i}'
        movie.director = directors[i]
        movie.actors = [actors[i]]
        movie.runtime_minutes = i + 1
        movie.rating = float(i)
        movie.votes = i

        if i % 2 == 0:
            movie.revenue_millions = float(i + 1)

        if i % 4 == 0:
            movie.metascore = i * 10

        movies.append(movie)

    return movies
示例#8
0
 def read_csv_file(self):
     csv_file_contents = csv.reader(open(self.__file_name, mode='r', encoding='utf-8-sig'))
     boolean = True
     for row in csv_file_contents:
         if boolean:
             boolean = False
             continue
         temp_movie = Movie("","")
         temp_movie.id = int(row[0])-1
         temp_movie.title = row[1]
         genre_list = row[2].split(",")
         genre_list = [Genre(genre) for genre in genre_list]
         temp_movie.genres = genre_list
         temp_movie.description = row[3]
         temp_movie.director = Director(row[4])
         actor_list = row[5].split(",")
         actor_list = [Actor(actor) for actor in actor_list]
         temp_movie.actors = actor_list
         temp_movie.releaseDate = int(row[6])
         temp_movie.runtime_minutes = int(row[7])
         temp_movie.rating = float(row[8])
         temp_movie.metascore = row[11]
         self.movie_full_details.append(temp_movie)
示例#9
0
 def read_csv_file(self) -> None:
     with open(self.__filename, mode='r',
               encoding='utf-8-sig') as file_data:
         reader = csv.DictReader(file_data)
         self.__dataset_of_movies = list()
         for row in reader:
             new_movie = Movie(row['Title'], int(row['Year']))
             new_movie.description = row['Description']
             new_movie.genres = [
                 Genre(i.strip()) for i in row['Genre'].split(',')
             ]
             new_movie.actors = [
                 Actor(i.strip()) for i in row['Actors'].split(',')
             ]
             new_movie.director = Director(row['Director'].strip())
             if row['Runtime (Minutes)'].isdigit():
                 new_movie.runtime_minutes = int(row['Runtime (Minutes)'])
             self.__dataset_of_movies.append(new_movie)
             for i in new_movie.genres:
                 self.add_genre(i)
                 self.__dataset_of_genres[i].append(new_movie)
             for i in new_movie.actors:
                 self.add_actor(i)
             self.add_director(new_movie.director)
示例#10
0
    def read_csv_file(self):
        with open(self.__file_name, mode='r', encoding='utf-8-sig') as csvfile:
            movie_file_reader = csv.DictReader(csvfile)

            self.__dataset_of_movies = list()
            self.__dataset_of_actors = list()
            self.__dataset_of_directors = list()
            self.__dataset_of_genres = list()

            index = 0
            for row in movie_file_reader:
                title = row['Title'].strip()  # stripping to safe
                release_year = int(row['Year'])
                actor_full_name_list = get_list_from_comma_string(
                    row['Actors'])
                director_full_name = row['Director'].strip(
                )  # stripping to safe
                genre_name_list = get_list_from_comma_string(row['Genre'])

                #- other things
                rank = int(row['Rank'])
                description = row['Description']
                runtime_minutes = int(row['Runtime (Minutes)'])
                external_rating = float(row['Rating'])
                external_rating_votes = int(row['Votes'])

                # These require try/except because some values are N/A's (preferably all would but it's SUPER ugly code)
                try:
                    revenue = float(row['Revenue(Millions)'])
                except:
                    revenue = None
                try:
                    metascore = int(row['Metascore'])
                except:
                    metascore = None

                #-------- Make Actor, Director and Genre Objects
                actor_object_list = [
                    Actor(actor_full_name)
                    for actor_full_name in actor_full_name_list
                ]
                director_object = Director(director_full_name)
                genre_object_list = [
                    Genre(genre_name) for genre_name in genre_name_list
                ]

                #-------- Create and set up Movie Object
                movie_object = Movie(title, release_year)
                movie_object.actors = actor_object_list  # thanks to my setter implementation
                movie_object.director = director_full_name
                movie_object.genres = genre_object_list  # ^ ditto
                movie_object.release_year = release_year

                #- other things
                movie_object.description = description
                movie_object.runtime_minutes = runtime_minutes
                movie_object.external_rating = external_rating
                movie_object.external_rating_votes = external_rating_votes
                if revenue != None:
                    movie_object.revenue = revenue
                if metascore != None:
                    movie_object.metascore = metascore

                #-------- Take all the above information, and add to datasets
                self.__dataset_of_movies.append(
                    movie_object
                )  # the assumption is that each row in the csv is a unique movie

                # I could create a function that adds unique things to lists only, nvm
                for actor_object in actor_object_list:
                    if actor_object not in self.__dataset_of_actors:
                        self.__dataset_of_actors.append(actor_object)

                if director_object not in self.__dataset_of_directors:
                    self.__dataset_of_directors.append(director_object)

                for genre_object in genre_object_list:
                    if genre_object not in self.__dataset_of_genres:
                        self.__dataset_of_genres.append(genre_object)

                index += 1


# To test my assigmnent, run the following lines of code (I have copy and pasted these in my test_all.py file too)

#movie_file_csv_reader_object = MovieFileCSVReader(r"C:\Users\Nathan Longhurst\OneDrive - The University of Auckland\b Comp235\Assignment\GitHub Clone (Current)\CS235FlixSkeleton\datafiles\Data1000Movies.csv")
#unclean_dict = movie_file_csv_reader_object.check_csv_file()
#movie_file_csv_reader_object.clean_csv_file(unclean_dict)