1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
__version__ = "$Revision: 1.17 $"[11:-2]
9
Path-based references for PB, and other reference-based protocols.
11
Maintainer: U{Glyph Lefkowitz<mailto:glyph@twistedmatrix.com>}
13
Stability: semi-stable
15
Future Plans: None at this point besides a final overview and finalization
21
from twisted.python import log
23
from flavors import Referenceable, Viewable
29
### "Server"-side objects
31
class PathReferenceContext:
32
def __init__(self, path, root):
37
def __setitem__(self, key, item):
38
self.metadata[key] = item
40
def __getitem__(self, key):
41
return self.metadata[key]
46
o = o.getChild(p, self)
52
def getChild(self, child, ctx):
53
return self.children[child]
55
class PathReferenceDirectory(Referenceable):
56
def __init__(self, root, prefix="remote"):
59
def remote_callPath(self, path, name, *args, **kw):
60
ctx = PathReferenceContext(path, self)
62
return apply(getattr(obj, "%s_%s" % (self.prefix, name)), args, kw)
64
class PathReferenceContextDirectory(Referenceable):
65
def __init__(self, root, prefix="remote"):
68
def remote_callPath(self, path, name, *args, **kw):
69
ctx = PathReferenceContext(path, self)
71
return apply(getattr(obj, "%s_%s" % (self.prefix, name)),
74
class PathViewDirectory(Viewable):
75
def __init__(self, root, prefix="view"):
78
def view_callPath(self, perspective, path, name, *args, **kw):
79
ctx = PathReferenceContext(path, self)
81
return apply(getattr(obj, "%s_%s" % (self.prefix, name)),
82
(perspective,)+args, kw)
84
class PathViewContextDirectory(Viewable):
85
def __init__(self, root, prefix="view"):
88
def view_callPath(self, perspective, path, name, *args, **kw):
89
ctx = PathReferenceContext(path, self)
91
return apply(getattr(obj, "%s_%s" % (self.prefix, name)),
92
(perspective,ctx)+args, kw)
94
### "Client"-side objects
96
class RemotePathReference:
97
def __init__(self, ref, path):
101
def callRemote(self, name, *args, **kw):
102
apply(self.ref.callRemote,
103
("callPath", self.path, name)+args, kw)