def getNodeController(self, request, node, submodel, model): """ Get a controller object to handle this node. If the node has no controller= attribute, first check to see if there is an IController adapter for our model. """ controllerName = node.attributes.get('controller') controller = None if model is None: model = peek(self.modelStack) if controllerName: controllerStack = self.controllerStack while controllerStack is not None: namespace, controllerStack = controllerStack if namespace is None: continue controller = namespace.getSubcontroller(request, node, model, controllerName) if controller is not None: break else: raise NotImplementedError("You specified controller name %s on " "a node, but no wcfactory_%s method " "was found in %s." % (controllerName, controllerName, filterStack(self.controllerStack) )) elif node.attributes.get("model"): controller = components.getAdapter( model, interfaces.IController, None, components.getAdapterClassWithInheritance) return controller
def adaptToIModel(m, parent=None, submodel=None): adapted = components.getAdapter(m, interfaces.IModel, None, components.getAdapterClassWithInheritance) if adapted is None: adapted = Wrapper(m) adapted.parent = parent adapted.name = submodel return adapted
def __init__(self, model, *args, **kwargs): view.View.__init__(self, model, *args, **kwargs) self.model.addView(self) # pretend self.foo is what the user now sees on their screen self.foo = self.model.foo self.random = self.model.random self.controller = components.getAdapter(self.model, interfaces.IController, None)
def renderView(self, request): if self.view is None: if self.viewFactory is not None: self.setView(self.makeView(self.model, None)) else: self.setView(components.getAdapter(self.model, interfaces.IView, None)) self.view.setController(self) return self.view.render(request, doneCallback=self.gatheredControllers)
def requestAvatar(self, avatarId, mind, *interfaces): if self.avatars.has_key(avatarId): avatar = self.avatars[avatarId] else: avatar = TestAvatar(avatarId) self.avatars[avatarId] = avatar avatar.login() return (interfaces[0], components.getAdapter(avatar, interfaces[0]), avatar.logout)
def testGetAdapter(self): o = IntAdder() self.assertEquals(o.add(3, 4), 7) # get an object implementing IMultiply multiplier = components.getAdapter(o, IMultiply, None) # check that it complies with the IMultiply interface self.assertEquals(multiplier.multiply(3, 4), 12)
def renderView(self, request): if self.view is None: if self.viewFactory is not None: self.setView(self.makeView(self.model, None)) else: self.setView( components.getAdapter(self.model, interfaces.IView, None)) self.view.setController(self) return self.view.render(request, doneCallback=self.gatheredControllers)
def getChild(self, path, request): if path == '': path = 'index' path = path.replace(".","_") cm = getattr(self, "wchild_"+path, None) if cm: p = cm(request) if isinstance(p, Deferred): return util.DeferredResource(p) adapter = components.getAdapter(p, IResource, None) if adapter is not None: return adapter return Resource.getChild(self, path, request)
def getChild(self, path, request): if path == '': path = 'index' path = path.replace(".","_") cm = getattr(self, "wchild_"+path, None) if cm: p = cm(request) if isinstance(p, Deferred): return util.DeferredResource(p) adapter = components.getAdapter(p, IResource, None) if adapter is not None: return adapter # maybe we want direct support for ModelLoader? # cl = getattr(self, "wload_"+path, None) #??? return Resource.getChild(self, path, request)
def getChild(self, path, request): if path == '': path = 'index' path = path.replace(".", "_") cm = getattr(self, "wchild_" + path, None) if cm: p = cm(request) if isinstance(p, Deferred): return util.DeferredResource(p) adapter = components.getAdapter(p, IResource, None) if adapter is not None: return adapter # maybe we want direct support for ModelLoader? # cl = getattr(self, "wload_"+path, None) #??? return Resource.getChild(self, path, request)
def getNodeView(self, request, node, submodel, model): view = None viewName = node.attributes.get('view') if model is None: model = peek(self.modelStack) # Look up a view factory. if viewName: viewStack = self.viewStack while viewStack is not None: namespace, viewStack = viewStack if namespace is None: continue try: view = namespace.getSubview(request, node, model, viewName) except AttributeError: # Was that from something in the viewStack that didn't # have a getSubview? if not hasattr(namespace, "getSubview"): log.msg("Warning: There is no getSubview on %r" % (namespace,)) continue else: # No, something else is really broken. raise if view is not None: break else: raise NotImplementedError( "You specified view name %s on a node %s, but no " "wvfactory_%s method was found in %s. (Or maybe they were " "found but they returned None.)" % ( viewName, node, viewName, filterStack(self.viewStack))) elif node.attributes.get("model"): # If no "view" attribute was specified on the node, see if there # is a IView adapter registerred for the model. # First, see if the model is Componentized. if isinstance(model, components.Componentized): view = model.getAdapter(interfaces.IView) if not view and hasattr(model, '__class__'): view = components.getAdapter(model, interfaces.IView, None, components.getAdapterClassWithInheritance) return view
def getNodeView(self, request, node, submodel, model): view = None viewName = node.attributes.get('view') if model is None: model = peek(self.modelStack) # Look up a view factory. if viewName: viewStack = self.viewStack while viewStack is not None: namespace, viewStack = viewStack if namespace is None: continue try: view = namespace.getSubview(request, node, model, viewName) except AttributeError: # Was that from something in the viewStack that didn't # have a getSubview? if not hasattr(namespace, "getSubview"): log.msg("Warning: There is no getSubview on %r" % (namespace, )) continue else: # No, something else is really broken. raise if view is not None: break else: raise NotImplementedError( "You specified view name %s on a node %s, but no " "wvfactory_%s method was found in %s. (Or maybe they were " "found but they returned None.)" % (viewName, node, viewName, filterStack(self.viewStack))) elif node.attributes.get("model"): # If no "view" attribute was specified on the node, see if there # is a IView adapter registerred for the model. # First, see if the model is Componentized. if isinstance(model, components.Componentized): view = model.getAdapter(interfaces.IView) if not view and hasattr(model, '__class__'): view = components.getAdapter( model, interfaces.IView, None, components.getAdapterClassWithInheritance) return view
def setDataCallback(self, result, request, node): model = result view = None if isinstance(model, components.Componentized): view = model.getAdapter(interfaces.IView) if not view and hasattr(model, '__class__'): view = components.getAdapter(model, interfaces.IView, None, components.getAdapterClassWithInheritance) if view: view["id"] = self.attributes.get('id', '') view.templateNode = node view.controller = self.controller return view.setDataCallback(result, request, node) else: return Widget.setDataCallback(self, result, request, node)
def setDataCallback(self, result, request, node): model = result view = None if isinstance(model, components.Componentized): view = model.getAdapter(interfaces.IView) if not view and hasattr(model, '__class__'): view = components.getAdapter( model, interfaces.IView, None, components.getAdapterClassWithInheritance) if view: view["id"] = self.attributes.get('id', '') view.templateNode = node view.controller = self.controller return view.setDataCallback(result, request, node) else: return Widget.setDataCallback(self, result, request, node)
def getNodeController(self, request, node, submodel, model): """ Get a controller object to handle this node. If the node has no controller= attribute, first check to see if there is an IController adapter for our model. """ controllerName = node.attributes.get('controller') controller = None if model is None: model = peek(self.modelStack) # Look up a controller factory. if controllerName: #if not node.hasAttribute('name'): # warnings.warn("POTENTIAL ERROR: %s had a controller, but not a " # "'name' attribute." % node) controllerStack = self.controllerStack while controllerStack is not None: namespace, controllerStack = controllerStack if namespace is None: continue controller = namespace.getSubcontroller(request, node, model, controllerName) if controller is not None: break else: raise NotImplementedError("You specified controller name %s on " "a node, but no wcfactory_%s method " "was found in %s." % (controllerName, controllerName, filterStack(self.controllerStack) )) elif node.attributes.get("model"): # If no "controller" attribute was specified on the node, see if # there is a IController adapter registerred for the model. controller = components.getAdapter( model, interfaces.IController, None, components.getAdapterClassWithInheritance) return controller
def dispatchResult(self, request, node, result): """ Check a given result from handling a node and hand it to a process* method which will convert the result into a node and insert it into the DOM tree. Return the new node. """ if not isinstance(result, defer.Deferred): adapter = components.getAdapter(result, INodeMutator, None, components.getAdapterClassWithInheritance) if adapter is None: raise NotImplementedError( "Your factory method returned %s, but there is no " "INodeMutator adapter registerred for %s." % (result, getattr(result, "__class__", None) or type(result))) result = adapter.generate(request, node) if isinstance(result, defer.Deferred): self.outstandingCallbacks += 1 result.addCallback(self.dispatchResultCallback, request, node) result.addErrback(self.renderFailure, request) return result
def getNodeController(self, request, node, submodel, model): """ Get a controller object to handle this node. If the node has no controller= attribute, first check to see if there is an IController adapter for our model. """ controllerName = node.attributes.get('controller') controller = None if model is None: model = peek(self.modelStack) # Look up a controller factory. if controllerName: #if not node.hasAttribute('name'): # warnings.warn("POTENTIAL ERROR: %s had a controller, but not a " # "'name' attribute." % node) controllerStack = self.controllerStack while controllerStack is not None: namespace, controllerStack = controllerStack if namespace is None: continue controller = namespace.getSubcontroller( request, node, model, controllerName) if controller is not None: break else: raise NotImplementedError( "You specified controller name %s on " "a node, but no wcfactory_%s method " "was found in %s." % (controllerName, controllerName, filterStack(self.controllerStack))) elif node.attributes.get("model"): # If no "controller" attribute was specified on the node, see if # there is a IController adapter registerred for the model. controller = components.getAdapter( model, interfaces.IController, None, components.getAdapterClassWithInheritance) return controller
def getNodeView(self, request, node, submodel, model): view = None viewName = node.attributes.get('view') if model is None: model = peek(self.modelStack) if viewName: viewStack = self.viewStack while viewStack is not None: namespace, viewStack = viewStack if namespace is None: continue try: view = namespace.getSubview(request, node, model, viewName) except AttributeError: if not hasattr(namespace, "getSubview"): log.msg("Warning: There is no getSubview on %r" % (namespace,)) continue else: raise if view is not None: break else: raise NotImplementedError( "You specified view name %s on a node %s, but no " "wvfactory_%s method was found in %s. (Or maybe they were " "found but they returned None.)" % ( viewName, node, viewName, filterStack(self.viewStack))) elif node.attributes.get("model"): if isinstance(model, components.Componentized): view = model.getAdapter(interfaces.IView) if not view and hasattr(model, '__class__'): view = components.getAdapter(model, interfaces.IView, None, components.getAdapterClassWithInheritance) return view
def dispatchResult(self, request, node, result): """ Check a given result from handling a node and hand it to a process* method which will convert the result into a node and insert it into the DOM tree. Return the new node. """ if not isinstance(result, defer.Deferred): adapter = components.getAdapter( result, INodeMutator, None, components.getAdapterClassWithInheritance) if adapter is None: raise NotImplementedError( "Your factory method returned %s, but there is no " "INodeMutator adapter registerred for %s." % (result, getattr(result, "__class__", None) or type(result))) result = adapter.generate(request, node) if isinstance(result, defer.Deferred): self.outstandingCallbacks += 1 result.addCallback(self.dispatchResultCallback, request, node) result.addErrback(self.renderFailure, request) # Got to wait until the callback comes in return result
def getView(self): return components.getAdapter(self.model, interfaces.IView, None)
def __init__(self, model, *args, **kwargs): view.View.__init__(self, model, *args, **kwargs) self.model.addView(self) self.foo = self.model.foo self.random = self.model.random self.controller = components.getAdapter(self.model, interfaces.IController, None)
def testParentInterface(self): o = Sub() adder = components.getAdapter(o, IAdder, None) self.assertIdentical(o, adder)
def testGetSubAdapter(self): o = MultiplyAndAdd() self.assert_( not components.implements(o, IFoo) ) foo = components.getAdapter(o, IFoo, None) self.assert_( isinstance(foo, FooAdapterForMAA) )
def testNoAdapter(self): o = Sub() multiplier = components.getAdapter(o, IMultiply, None) self.assertEquals(multiplier, None)
def getCollection(obj): """Get an object implementing ICollection for obj.""" if components.implements(obj, IConfigurator): obj = obj.getInstance() return components.getAdapter(obj, ICollection, None)
def testGetAdapter(self): o = IntAdder() self.assertEquals(o.add(3, 4), 7) multiplier = components.getAdapter(o, IMultiply, None) self.assertEquals(multiplier.multiply(3, 4), 12)
def testSelfIsAdapter(self): o = IntAdder() adder = components.getAdapter(o, IAdder, None) self.assert_( o is adder )
from twisted.python.components import getAdapter, registerAdapter, Interface class IA(Interface): # Define an interface that implements def a(self): # a sample method method, "a". "A sample method." class A: # define an adapter class __implements__ = IA # that implements our IA interface def __init__(self, original): # keep track of the object being wrapped self.original = original def a(self): # define the method required by our print 'a', # interface, and have it print 'a' self.original.b() # then call back to the object we're adapting class B: # the hapless B class doesn't know anything def b(self): # about its adapter, and it defines one print 'b' # method which displays 'b' registerAdapter(A, B, IA) # register A to adapt B for interface IA adapter = getAdapter(B(), IA, None) # adapt a new B instance with an A instance adapter.a() # call the method defined by interface IA
def render(self, request): self.setUp(request) self.view = components.getAdapter(self.model, interfaces.IView, None) self.view.setController(self) return self.view.render(request)
def modelFactory(self, outObj): adapt = getAdapter(outObj, interfaces.IModel, outObj) return adapt
def getConfigurator(obj): """Get an object implement IConfigurator for obj.""" return components.getAdapter(obj, IConfigurator, None)
def modelFactory(self, outObj): adapt = getAdapter(outObj, interfaces.IModel, outObj) # print 'factorizing', adapt return adapt