[Twisted-Python] Is a Viewable Cacheable a good idea?

Daniel Sank sank.daniel at gmail.com
Tue Nov 12 13:18:12 MST 2013


Suppose I want to make a networked stockroom program with perspective
broker. We have a user side client object,

class Client(pb.Referenceable):
    def connect(self):
        # host, port, factory, and credentials come from elsewhere
        reactor.connectTCP(host, port, factory)
        d = self.factory.login(credentials, self)
        d.addCallback(self.connected)

    def connected(self, perspective):
        if perspective:
            self.perspective = perspective

and a "corresponding" server side User,

class User(pb.Avatar):
    def __init__(self, name, server, mind):
        self.name = name
        self.server = server
        self.client = mind #This is a remote reference to a Client

    def logout(self):
        ...logic...

We have the IRealm implementer,

@implementer(portal.IRealm)
class Server(object):
    """I manage games and produce Avatars"""
    def __init__(self, loggingPath):
        self.users = {}
        self.stockrooms = set()

    def requestAvatar(self, avatarId, mind, *interfaces):
        assert pb.IPerspective in interfaces
        user = self.users.setdefault(avatarId, User(avatarId, self, mind))
        return pb.IPerspective, user, user.logout

and finally we have the Stockroom

class Stockroom(object):
    ...logic...

Now I'd like for my Clients to be able to remove/add items to the
stockroom. Using only the code above I'd have to add perspective_*
methods to the User. These methods would direct the Client's intent to
the appropriate Stockroom. Changes made to the Stockroom would then
have to be announced to any interested Clients by invoking the
appropriate Users' mind property.

This seems very awkward. I'd rather just have the Stockrooms be
Viewable so that Clients can invoke methods on them directly. If the
Stockroom were _also_ Cacheable then changes on a Stockroom would
automatically propagate to the client process.

Is simultaneously sub-classing Viewable and Cacheable a good idea?

Am I thinking about this properly?

Regards and thanks in advance,
Daniel Sank

-- 
Department of Physics
Broida Hall
University of California
Santa Barbara, CA 93117
(805)893-3899



More information about the Twisted-Python mailing list