def redisLinkedTo(dbi, withRBDB, prevVersion): """Import linkedTo information into Redis""" if not Config.getInstance().getRedisConnectionURL(): print console.colored(" Redis not configured, skipping", 'yellow') return with redis_client.pipeline(transaction=False) as pipe: for i, avatar in enumerate(AvatarHolder()._getIdx().itervalues()): avatar_links.init_links(avatar, client=pipe) if i % 1000 == 0: pipe.execute() dbi.sync() print '\r %d' % i, sys.stdout.flush() pipe.execute() print '\r Done '
def convertLinkedTo(dbi, withRBDB, prevVersion): """Convert Avatar.linkedTo structure to use OOTreeSets and import linkedTo information into Redis (if enabled)""" print 'Note: Some links might point to broken objects which will be skipped automatically.' use_redis = Config.getInstance().getRedisConnectionURL() if use_redis: pipe = redis_client.pipeline(transaction=False) for i, avatar in enumerate(AvatarHolder()._getIdx().itervalues()): avatar.updateLinkedTo( ) # just in case some avatars do not have all fields linkedTo = avatar.linkedTo avatar.resetLinkedTo() # nuke old links for field, data in avatar.linkedToMap.iteritems(): for role in data['roles']: if not linkedTo[field][role]: continue todo = set(linkedTo[field][role]) # We have broken objects in the database which will fail in the getConference() call. If the current # object type has such a method call it on each object and skip it in case it raises an AttributeError if hasattr(linkedTo[field][role][0], 'getConference'): for obj in linkedTo[field][role]: try: obj.getConference() except AttributeError, e: print ' \tSkipping broken object in %s/%s/%s: %r' % ( avatar.getId(), field, role, obj) todo.remove(obj) avatar.linkedTo[field][role].update(todo) if use_redis: avatar_links.init_links(avatar, client=pipe) if i % 1000 == 0: if use_redis: pipe.execute() dbi.commit() print '\r %d' % i, sys.stdout.flush()
def convertLinkedTo(dbi, withRBDB, prevVersion): """Convert Avatar.linkedTo structure to use OOTreeSets and import linkedTo information into Redis (if enabled)""" print 'Note: Some links might point to broken objects which will be skipped automatically.' use_redis = Config.getInstance().getRedisConnectionURL() if use_redis: pipe = redis_client.pipeline(transaction=False) for i, avatar in enumerate(AvatarHolder()._getIdx().itervalues()): avatar.updateLinkedTo() # just in case some avatars do not have all fields linkedTo = avatar.linkedTo avatar.resetLinkedTo() # nuke old links for field, data in avatar.linkedToMap.iteritems(): for role in data['roles']: if not linkedTo[field][role]: continue todo = set(linkedTo[field][role]) # We have broken objects in the database which will fail in the getConference() call. If the current # object type has such a method call it on each object and skip it in case it raises an AttributeError if hasattr(linkedTo[field][role][0], 'getConference'): for obj in linkedTo[field][role]: try: obj.getConference() except AttributeError, e: print ' \tSkipping broken object in %s/%s/%s: %r' % (avatar.getId(), field, role, obj) todo.remove(obj) avatar.linkedTo[field][role].update(todo) if use_redis: avatar_links.init_links(avatar, client=pipe) if i % 1000 == 0: if use_redis: pipe.execute() dbi.commit() print '\r %d' % i, sys.stdout.flush()