def lookupUser(self, name): """ Looks for the given user first in the local store and failing that in the database. If found in the databse, checks the session for validity - if the session is valid the user must be connected to some other node, so a ShardedUser with a ProxyIRCDDUser for mind is returned. If the session is not valid, fail with NoSuchUser. :param name: the name of the user to look for. """ assert isinstance(name, unicode) name = name.lower() local_user = self.users.get(name) if local_user: return defer.succeed(local_user) remote_user = self.ctx.db.lookupUser(name) user_session = self.ctx.db.lookupUserSession(name) # User exists and session is active, so he must be # connected to some remote if remote_user and user_session and user_session["active"]: return defer.succeed( ShardedUser(self.ctx, name, ProxyIRCDDUser(self.ctx, name))) return defer.fail(failure.Failure(ewords.NoSuchUser(name)))
def userFactory(self, name): """ Returns a new ShardedUser for the given avatar id. The ShardedUser serves as a controller to the user's model. """ return ShardedUser(self.ctx, name)
def setUp(self): self.conn = r.connect(db=integration.DB, host=integration.HOST, port=integration.PORT) config = dict(nsqd_tcp_address=["127.0.0.1:4150"], lookupd_http_address=["127.0.0.1:4161"], hostname="testserver", group_on_request=True, user_on_request=True, db=integration.DB, rdb_host=integration.HOST, rdb_port=integration.PORT ) self.ctx = makeContext(config) self.factory = IRCDDFactory(self.ctx) self.protocol = self.factory.buildProtocol(("127.0.0.1", 0)) self.transport = proto_helpers.StringTransport() self.protocol.makeConnection(self.transport) self.shardedUser = ShardedUser(self.ctx, "john") self.shardedUser.mind = self.protocol self.shardedUser.mind.name = "john"