Ejemplo n.º 1
0
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)