[Twisted-Python] Must avatarId always be a string?

Itamar Turner-Trauring itamar at futurefoundries.com
Sun Jan 13 09:08:38 EST 2013


It's possible that in some of the cases discussed above, what you want is a
custom *Portal*. For example, if you want to try a sequence of logins, and
choose the first that succeeds:

class MultiPortal(object):
    def __init__(self, portals):
        self.portals = portals

    @inlineCallbacks
    def login(self, *args, **kwargs):
        for portal in self.portals:
            try:
                return portal.login(*args, **kwargs)
            except:
                continue
        # Ran out of portals, failed to login:
        raise Unauthorized()

Or, let's say you're writing a backend that is a combination checker and
realm, where separating that two doesn't make sense. E.g. a backend for a
POP3 server that is a proxy to another POP3 server. In this case there's no
point in writing separate checker and realm, just write a new Portal:

class POP3ProxyPortal(object):
    def __init__(self, endpoint):
        self.endpoint = endpoint

    @defer.inlineCallbacks
    def login(self, credentials, mind, *interfaces):
        pop3client = yield self.endpoint.connect(POP3ClientFactory())
        yield pop3client.login(credentials.username, credentials.password)
        defer.returnValue((IMailbox, MailboxProxy(pop3client),
pop3client.quit))


-- 
Itamar Turner-Trauring, Future Foundries LLC
http://futurefoundries.com/ — Twisted consulting, training and support.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20130113/1fc55900/attachment.htm 


More information about the Twisted-Python mailing list