1
# Copyright (c) 2001-2009 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
Path-based references for PB, and other reference-based protocols.
7
Maintainer: Glyph Lefkowitz
14
from twisted.python import log
15
from twisted.spread.flavors import Referenceable, Viewable
18
"twisted.spread.refpath is deprecated since Twisted 9.0.",
19
category=DeprecationWarning, stacklevel=2)
21
### "Server"-side objects
23
class PathReferenceContext:
24
def __init__(self, path, root):
29
def __setitem__(self, key, item):
30
self.metadata[key] = item
32
def __getitem__(self, key):
33
return self.metadata[key]
38
o = o.getChild(p, self)
44
def getChild(self, child, ctx):
45
return self.children[child]
47
class PathReferenceDirectory(Referenceable):
48
def __init__(self, root, prefix="remote"):
51
def remote_callPath(self, path, name, *args, **kw):
52
ctx = PathReferenceContext(path, self)
54
return apply(getattr(obj, "%s_%s" % (self.prefix, name)), args, kw)
56
class PathReferenceContextDirectory(Referenceable):
57
def __init__(self, root, prefix="remote"):
60
def remote_callPath(self, path, name, *args, **kw):
61
ctx = PathReferenceContext(path, self)
63
return apply(getattr(obj, "%s_%s" % (self.prefix, name)),
66
class PathViewDirectory(Viewable):
67
def __init__(self, root, prefix="view"):
70
def view_callPath(self, perspective, path, name, *args, **kw):
71
ctx = PathReferenceContext(path, self)
73
return apply(getattr(obj, "%s_%s" % (self.prefix, name)),
74
(perspective,)+args, kw)
76
class PathViewContextDirectory(Viewable):
77
def __init__(self, root, prefix="view"):
80
def view_callPath(self, perspective, path, name, *args, **kw):
81
ctx = PathReferenceContext(path, self)
83
return apply(getattr(obj, "%s_%s" % (self.prefix, name)),
84
(perspective,ctx)+args, kw)
86
### "Client"-side objects
88
class RemotePathReference:
89
def __init__(self, ref, path):
93
def callRemote(self, name, *args, **kw):
94
apply(self.ref.callRemote,
95
("callPath", self.path, name)+args, kw)