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 == []
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
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
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")]
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
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 == []
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
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)
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)
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)