'Given a Movie, Person, Character or Company object with only
partial information, retrieve the required set of information.
info is the list of sets of information to retrieve.
If override is set, the information are retrieved and updated
even if they\'re already in the object.'

def update(self, mop, info=None, override=0):

    mopID = None
    prefix = ''
    if isinstance(mop, Movie.Movie):
        mopID = mop.movieID
        prefix = 'movie'
    elif isinstance(mop, Person.Person):
        mopID = mop.personID
        prefix = 'person'
    elif isinstance(mop, Character.Character):
        mopID = mop.characterID
        prefix = 'character'
    elif isinstance(mop, Company.Company):
        mopID = mop.companyID
        prefix = 'company'
    else:
        raise IMDbError((('object    ' + repr(mop)) + '    is    not    a    Movie,    Person,    Character    or    Company    instance'))
    if (mopID is None):
        if (prefix == 'character'):
            return
        raise IMDbDataAccessError('the    supplied    object    has    null    movieID,    personID    or    companyID')
    if (mop.accessSystem == self.accessSystem):
        aSystem = self
    else:
        aSystem = IMDb(mop.accessSystem)
    if (info is None):
        info = mop.default_info
    elif (info == 'all'):
        if isinstance(mop, Movie.Movie):
            info = self.get_movie_infoset()
        elif isinstance(mop, Person.Person):
            info = self.get_person_infoset()
        elif isinstance(mop, Character.Character):
            info = self.get_character_infoset()
        else:
            info = self.get_company_infoset()
    if (not isinstance(info, (tuple, list))):
        info = (info,)
    res = {}
    for i in info:
        if ((i in mop.current_info) and (not override)):
            continue
        if (not i):
            continue
        self._imdb_logger.debug('retrieving    "%s"    info    set', i)
        try:
            method = getattr(aSystem, ('get_%s_%s' % (prefix, i.replace('    ', '_'))))
        except AttributeError:
            self._imdb_logger.error('unknown    information    set    "%s"', i)
            method = (lambda *x: {})
        try:
            ret = method(mopID)
        except Exception as e:
            self._imdb_logger.critical('caught    an    exception    retrieving    or    parsing    "%s"    info    set    for    mopID    "%s"    (accessSystem:    %s)', i, mopID, mop.accessSystem, exc_info=True)
            ret = {}
            if self._reraise_exceptions:
                raise
        keys = None
        if ('data' in ret):
            res.update(ret['data'])
            if isinstance(ret['data'], dict):
                keys = ret['data'].keys()
        if ('info    sets' in ret):
            for ri in ret['info    sets']:
                mop.add_to_current_info(ri, keys, mainInfoset=i)
        else:
            mop.add_to_current_info(i, keys)
        if ('titlesRefs' in ret):
            mop.update_titlesRefs(ret['titlesRefs'])
        if ('namesRefs' in ret):
            mop.update_namesRefs(ret['namesRefs'])
        if ('charactersRefs' in ret):
            mop.update_charactersRefs(ret['charactersRefs'])
    mop.set_data(res, override=0)
