def read_csv_file(self):
        try:
            print("PROCESSING CSV FILE...")
            csvfile = open(self.file_name, encoding='utf-8-sig', newline='')
            reader = csv.DictReader(csvfile)
            for row in reader:
                # STEP ONE: Create isolated object references
                movie = Movie(
                    arg_title=row['Title'].strip(),
                    arg_year=int(row['Year'].strip()),
                    arg_description=row['Description'].replace("\"", "'"),
                    arg_runtime_minutes=int(row['Runtime (Minutes)']),
                    arg_rating=float(row['Rating']),
                    arg_votes=int(row['Votes']))
                director = self.get_director(row['Director'].strip())
                actors = [
                    self.get_actor(actor.strip())
                    for actor in row['Actors'].split(",")
                ]
                genres = [
                    self.get_genre(genre.strip())
                    for genre in row['Genre'].split(",")
                ]

                # STEP TWO: Populate object relationships
                director.add_movie(movie)
                movie.add_director(director)
                for actor in actors:
                    actor.add_movie(movie)
                    movie.add_actor(actor)
                    for other_actor in actors:
                        if other_actor is not actor:
                            actor.add_actor_colleague(other_actor)
                for genre in genres:
                    genre.add_movie(movie)
                    movie.add_genre(genre)

                # STEP THREE: Store objects
                self.reader_movies.append(movie)
                self.reader_directors.add(director)
                self.reader_actors.update(set(actors))
                self.reader_genres.update(set(genres))
            csvfile.close()
            print("CSV FILE PROCESSED")
        except Exception as err:
            raise Exception(f"Error while reading CSV file:\n{err}")
示例#2
0
 def read_csv_file(self):
     try:
         csvfile = open(self.file_name, encoding='utf-8-sig', newline='')
         reader = csv.DictReader(csvfile)
         for row in reader:
             try:
                 movie = Movie(row['Title'].strip(),
                               int(row['Year'].strip()))
                 movie.description = row['Description']
                 director = Director(row['Director'].strip())
                 movie.director = director
                 director.add_movie(movie)
                 actors = {
                     Actor(actor.strip())
                     for actor in row['Actors'].split(",")
                 }
                 for actor in actors:
                     movie.add_actor(actor)
                     actor.add_movie(movie)
                 genres = {
                     Genre(genre.strip())
                     for genre in row['Genre'].split(",")
                 }
                 for genre in genres:
                     movie.add_genre(genre)
                     genre.add_movie(movie)
                 movie.runtime_minutes = int(row['Runtime (Minutes)'])
                 movie.rating = float(row['Rating'])
                 movie.votes = int(row['Votes'])
                 self.movies.append(movie)
                 self.actors.update(set(actors))
                 self.directors.add(director)
                 self.genres.update(set(genres))
             except:
                 continue  # Skips movies with invalid formatting
         csvfile.close()
     except:
         raise Exception("Error while reading CSV file!")
    def load(self, engine):
        print("LOADING DATABASE...")
        conn = engine.raw_connection()
        cursor = conn.cursor()
        # STEP ONE: Retrieve entries from database
        cursor.execute("""SELECT * FROM actors""")
        actors = cursor.fetchall()
        cursor.execute("""SELECT * FROM directors""")
        directors = cursor.fetchall()
        cursor.execute("""SELECT * FROM genres""")
        genres = cursor.fetchall()
        cursor.execute("""SELECT * FROM movies""")
        movies = cursor.fetchall()
        cursor.execute("""SELECT * FROM reviews""")
        reviews = cursor.fetchall()
        cursor.execute("""SELECT * FROM users""")
        users = cursor.fetchall()
        cursor.execute("""SELECT * FROM watchlists""")
        watchlists = cursor.fetchall()

        #  STEP TWO: Convert entries into isolated object references
        for row in actors:
            actor = Actor(row[1], list(), row[2], list(), row[3], row[4])
            self.repo_actors.add(actor)
        for row in directors:
            director = Director(row[1], list(), row[2], row[3])
            self.repo_directors.add(director)
        for row in genres:
            genre = Genre(row[1], list(), row[2], row[3])
            self.repo_genres.add(genre)
        for row in movies:
            movie = Movie(row[1], row[2], row[3], None, row[4], list(), row[5],
                          list(), row[6], row[7], list(), row[8], row[9],
                          float(row[10]), row[11], row[12])
            self.repo_movies.append(movie)
        for row in reviews:
            review = Review(None, row[1], None, row[2], row[3], row[4], row[5],
                            row[6], row[7])
            self.repo_reviews.append(review)
        for row in users:
            user = User(row[1], row[2], list(), row[3], list(), row[4], row[5],
                        None, row[6], row[7])
            self.repo_users.append(user)
        for row in watchlists:
            watchlist = Watchlist(row[1], list(), row[2], row[3])
            self.repo_watchlists.append(watchlist)

        # STEP THREE: Populate object relationships
        for actor in self.repo_actors:
            for code in actor.movie_codes.split(","):
                if code != "":
                    actor.add_movie(self.find_movie(code))
            for code in actor.colleague_codes.split(","):
                if code != "":
                    actor.add_actor_colleague(self.find_actor(code))
        for director in self.repo_directors:
            for code in director.movie_codes.split(","):
                if code != "":
                    director.add_movie(self.find_movie(code))
        for genre in self.repo_genres:
            for code in genre.movie_codes.split(","):
                if code != "":
                    genre.add_movie(self.find_movie(code))
        for movie in self.repo_movies:
            movie.director = self.find_director(movie.director_code)
            for code in movie.actor_codes.split(","):
                if code != "":
                    movie.add_actor(self.find_actor(code))
            for code in movie.genre_codes.split(","):
                if code != "":
                    movie.add_genre(self.find_genre(code))
            for code in movie.review_codes.split(","):
                if code != "":
                    movie.add_review(self.find_review(code))
        for review in self.repo_reviews:
            review.user = self.find_user(review.user_code)
            review.movie = self.find_movie(review.movie_code)
        for user in self.repo_users:
            for code in user.watched_movie_codes.split(","):
                if code != "":
                    user.watched_movies.append(self.find_movie(
                        code))  # Can't use watch_movie() for this
            for code in user.review_codes.split(","):
                if code != "":
                    user.add_review(self.find_review(code))
            user.watchlist = self.find_watchlist(user.watchlist_code)
        for watchlist in self.repo_watchlists:
            for code in watchlist.movie_codes.split(","):
                if code != "":
                    watchlist.add_movie(self.find_movie(code))
        conn.commit()
        conn.close()
        print("DATABASE LOADED")