def save(movie): """Save movie object to database Save a movie object to database along with its related fields such as Person(cast, crew). Args: movie(dict): dictionary containing movie metadata Returns: None Raises: None """ if not movie: # Bad request. SKIP. log.error('bad request. SKIP.') return # print 'Saving Movie object... ', assert movie.get('title', None) is not None # movie exists in database if Movie.objects.filter( title=movie['title']).exists(): movie_in_db = Movie.objects.get( title=movie['title']) # already in database log.info('movie %s already in database' % movie['title']) else: # add movie to database movie_in_db = Movie() # title movie_in_db.title = movie['title'] movie_in_db.save() log.info('movie %s added to database' % movie['title']) if movie.get('imdb_id', None): log.debug('%s: imdb_id %s' % (movie['title'], movie['imdb_id'])) movie_in_db.imdb_id = movie['imdb_id'] # release if movie.get('release', None): log.debug('%s: release %s' % (movie['title'], movie['release'])) movie_in_db.release = movie['release'] # relative path assert movie.get('relpath', None) is not None log.debug('%s: relpath %s' % (movie['title'], movie['relpath'])) movie_in_db.relpath = movie['relpath'] # imdb rating if movie.get('imdb_rating', None): log.debug('%s: imdb_rating %s' % ( movie['title'], movie['imdb_rating'] )) movie_in_db.imdb_score = movie['imdb_rating'] # rotten tomatoes rating if movie.get('tomato_rating', None): log.debug('%s: tomato_rating %s' % ( movie['title'], movie['tomato_rating'] )) movie_in_db.tomatoes_rating = movie['tomato_rating'] # metascore rating if movie.get('metascore', None): log.debug('%s: metascore %s' % (movie['title'], movie['metascore'])) movie_in_db.metascore = movie['metascore'] # save movie in database movie_in_db.save() # print 'added metadata to databased.' # CAST if movie.get('cast', None): # print 'Saving cast... ' _save_person( movie_in_db.title, movie_in_db.actors, movie['cast']['Actor'], role=Actor) # CREW - DIRECTORS if movie.get('crew', None): # print 'Saving crew(directors)... ' _save_person( movie_in_db.title, movie_in_db.directors, movie['crew']['Director'], role=Director)