| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2001-2004 Twisted Matrix Laboratories. | |
| 2 # See LICENSE for details. | |
| 3 | |
| 4 | |
| 5 __version__ = "$Revision: 1.17 $"[11:-2] | |
| 6 | |
| 7 """ | |
| 8 Path-based references for PB, and other reference-based protocols. | |
| 9 | |
| 10 Maintainer: U{Glyph Lefkowitz<mailto:glyph@twistedmatrix.com>} | |
| 11 | |
| 12 Future Plans: None at this point besides a final overview and finalization | |
| 13 pass. | |
| 14 """ | |
| 15 | |
| 16 | |
| 17 from twisted.python import log | |
| 18 | |
| 19 from flavors import Referenceable, Viewable | |
| 20 from copy import copy | |
| 21 import os | |
| 22 | |
| 23 | |
| 24 | |
| 25 ### "Server"-side objects | |
| 26 | |
| 27 class PathReferenceContext: | |
| 28 def __init__(self, path, root): | |
| 29 self.metadata = {} | |
| 30 self.path = path | |
| 31 self.root = root | |
| 32 | |
| 33 def __setitem__(self, key, item): | |
| 34 self.metadata[key] = item | |
| 35 | |
| 36 def __getitem__(self, key): | |
| 37 return self.metadata[key] | |
| 38 | |
| 39 def getObject(self): | |
| 40 o = self.root | |
| 41 for p in self.path: | |
| 42 o = o.getChild(p, self) | |
| 43 return o | |
| 44 | |
| 45 class PathReference: | |
| 46 def __init__(self): | |
| 47 self.children = {} | |
| 48 def getChild(self, child, ctx): | |
| 49 return self.children[child] | |
| 50 | |
| 51 class PathReferenceDirectory(Referenceable): | |
| 52 def __init__(self, root, prefix="remote"): | |
| 53 self.root = root | |
| 54 self.prefix = prefix | |
| 55 def remote_callPath(self, path, name, *args, **kw): | |
| 56 ctx = PathReferenceContext(path, self) | |
| 57 obj = ctx.getObject() | |
| 58 return apply(getattr(obj, "%s_%s" % (self.prefix, name)), args, kw) | |
| 59 | |
| 60 class PathReferenceContextDirectory(Referenceable): | |
| 61 def __init__(self, root, prefix="remote"): | |
| 62 self.root = root | |
| 63 self.prefix = prefix | |
| 64 def remote_callPath(self, path, name, *args, **kw): | |
| 65 ctx = PathReferenceContext(path, self) | |
| 66 obj = ctx.getObject() | |
| 67 return apply(getattr(obj, "%s_%s" % (self.prefix, name)), | |
| 68 (ctx,)+args, kw) | |
| 69 | |
| 70 class PathViewDirectory(Viewable): | |
| 71 def __init__(self, root, prefix="view"): | |
| 72 self.root = root | |
| 73 self.prefix = prefix | |
| 74 def view_callPath(self, perspective, path, name, *args, **kw): | |
| 75 ctx = PathReferenceContext(path, self) | |
| 76 obj = ctx.getObject() | |
| 77 return apply(getattr(obj, "%s_%s" % (self.prefix, name)), | |
| 78 (perspective,)+args, kw) | |
| 79 | |
| 80 class PathViewContextDirectory(Viewable): | |
| 81 def __init__(self, root, prefix="view"): | |
| 82 self.root = root | |
| 83 self.prefix = prefix | |
| 84 def view_callPath(self, perspective, path, name, *args, **kw): | |
| 85 ctx = PathReferenceContext(path, self) | |
| 86 obj = ctx.getObject() | |
| 87 return apply(getattr(obj, "%s_%s" % (self.prefix, name)), | |
| 88 (perspective,ctx)+args, kw) | |
| 89 | |
| 90 ### "Client"-side objects | |
| 91 | |
| 92 class RemotePathReference: | |
| 93 def __init__(self, ref, path): | |
| 94 self.ref = ref | |
| 95 self.path = path | |
| 96 | |
| 97 def callRemote(self, name, *args, **kw): | |
| 98 apply(self.ref.callRemote, | |
| 99 ("callPath", self.path, name)+args, kw) | |
| OLD | NEW |