def read_csv_file(self):
     with open(self.__file_name, mode='r', encoding='utf-8-sig') as csvfile:
         movie_file_reader = csv.DictReader(csvfile)
         #index = 0
         genre_dict = {}
         director_dict = {}
         actor_dict = {}
         for row in movie_file_reader:
             movie_id = int(row['id'])
             movie_title = row['Title']
             release_year = int(row['Year'])
             movie = Movie(movie_id, movie_title, release_year)
             self.__movies.add(movie)
             genre = row["Genre"]
             genres_list = genre.split(",")
             for genre_name in genres_list:
                 if genre_name not in genre_dict:
                     genre_dict[genre_name] = [movie]
                 else:
                     genre_dict[genre_name] = genre_dict[genre_name] + [movie]
             des = row['Description']
             movie.set_des(des)
             the_director = row["Director"]
             if the_director not in director_dict:
                 director_dict[the_director] = [movie]
             else:
                 director_dict[the_director] = director_dict[the_director] + [movie]
             actor_list = row["Actors"]
             for actor in actor_list.split(","):
                 actor = actor.strip()
                 if actor not in actor_dict:
                     actor_dict[actor] = [movie]
                 else:
                     actor_dict[actor] = actor_dict[actor] + [movie]
         for genre_name in genre_dict:
             genre = Genre(genre_name)
             for movie in genre_dict[genre_name]:
                 genre.add_movie(movie)
                 movie.add_genre(genre)
             self.__genres.add(genre)
         for director_name in director_dict:
             director = Director(director_name)
             for movie in director_dict[director_name]:
                 director.add_dir_movie(movie)
                 movie.director = director
             self.__directors.add(director)
         for actor_name in actor_dict:
             actor = Actor(actor_name)
             for movie in actor_dict[actor_name]:
                 actor.add_joined_movie(movie)
                 movie.add_actor(actor)
             self.__actors.add(actor)
def load_movies_and_genres(data_path: str, repo: MemoryRepository):
    filename = os.path.join(data_path, 'Data1000Movies.csv')
    with open(filename, mode='r', encoding='utf-8-sig') as csvfile:
        movie_file_reader = csv.DictReader(csvfile)
        genres = dict()
        actors = dict()
        directors = dict()
        for row in movie_file_reader:
            movie_id = int(row['id'])
            movie_title = row['Title']
            release_year = int(row['Year'])

            genre = row["Genre"]
            genres_list = genre.split(",")
            for i in genres_list:
                if i not in genres.keys():
                    genres[i] = list()
                genres[i].append(movie_id)

            movie = Movie(movie_id, movie_title, release_year)
            des = row['Description']
            movie.set_des(des)
            repo.add_movie(movie)
            the_director = row["Director"]
            if the_director not in directors:
                directors[the_director] = [movie_id]
            else:
                directors[the_director] = directors[the_director] + [movie_id]
            actor_list = row["Actors"]
            for actor in actor_list.split(","):
                actor = actor.strip()
                if actor not in actors:
                    actors[actor] = [movie_id]
                else:
                    actors[actor] = actors[actor] + [movie_id]

        for director_name in directors:
            director_obj = Director(director_name)
            all_movie = directors[director_name]
            for movie_id in all_movie:
                movie = repo.get_movie_by_id(movie_id)
                movie.director = director_obj
                director_obj.add_dir_movie(movie)
            repo.add_director(director_obj)

        for actor_name in actors:
            actor_obj = Actor(actor_name)
            all_movie = actors[actor_name]
            for movie_id in all_movie:
                movie = repo.get_movie_by_id(movie_id)
                movie.actors.append(actor_obj)
                actor_obj.add_joined_movie(movie)
            repo.add_actor(actor_obj)

        for genre_name in genres.keys():
            genre = Genre(genre_name)
            for movie_id in genres[genre_name]:
                movie = repo.get_movie_by_id(movie_id)
                make_genre_association(movie, genre)
                # movie.add_genre(genre)
                # genre.add_movie(movie)
            repo.add_genre(genre)