Пример #1
0
 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
Пример #2
0
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
Пример #3
0
 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)
Пример #4
0
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
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
 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)
Пример #11
0
 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)
Пример #12
0
 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)
Пример #13
0
 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)
Пример #14
0
 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)
Пример #15
0
    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
Пример #16
0
    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
Пример #17
0
 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)
Пример #18
0
    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)
Пример #19
0
    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
Пример #20
0
 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
Пример #21
0
    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
Пример #22
0
 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
Пример #23
0
 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
Пример #24
0
 def getView(self):
     return components.getAdapter(self.model, interfaces.IView, None)
Пример #25
0
 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)
Пример #26
0
 def testParentInterface(self):
     o = Sub()
     adder = components.getAdapter(o, IAdder, None)
     self.assertIdentical(o, adder)
Пример #27
0
 def testGetSubAdapter(self):
     o = MultiplyAndAdd()
     self.assert_( not components.implements(o, IFoo) )
     foo = components.getAdapter(o, IFoo, None)
     self.assert_( isinstance(foo, FooAdapterForMAA) )
Пример #28
0
 def testNoAdapter(self):
     o = Sub()
     multiplier = components.getAdapter(o, IMultiply, None)
     self.assertEquals(multiplier, None)
Пример #29
0
def getCollection(obj):
    """Get an object implementing ICollection for obj."""
    if components.implements(obj, IConfigurator):
        obj = obj.getInstance()
    return components.getAdapter(obj, ICollection, None)
Пример #30
0
 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)
Пример #31
0
 def testSelfIsAdapter(self):
     o = IntAdder()
     adder = components.getAdapter(o, IAdder, None)
     self.assert_( o is adder )
Пример #32
0
 def testGetSubAdapter(self):
     o = MultiplyAndAdd()
     self.assert_( not components.implements(o, IFoo) )
     foo = components.getAdapter(o, IFoo, None)
     self.assert_( isinstance(foo, FooAdapterForMAA) )
Пример #33
0
 def testParentInterface(self):
     o = Sub()
     adder = components.getAdapter(o, IAdder, None)
     self.assertIdentical(o, adder)
Пример #34
0
 def getView(self):
     return components.getAdapter(self.model, interfaces.IView, None)
Пример #35
0
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
Пример #36
0
 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)
Пример #37
0
 def testNoAdapter(self):
     o = Sub()
     multiplier = components.getAdapter(o, IMultiply, None)
     self.assertEquals(multiplier, None)
Пример #38
0
 def modelFactory(self, outObj):
     adapt = getAdapter(outObj, interfaces.IModel, outObj)
     return adapt
Пример #39
0
 def testSelfIsAdapter(self):
     o = IntAdder()
     adder = components.getAdapter(o, IAdder, None)
     self.assert_( o is adder )
Пример #40
0
def getConfigurator(obj):
    """Get an object implement IConfigurator for obj."""
    return components.getAdapter(obj, IConfigurator, None)
Пример #41
0
 def modelFactory(self, outObj):
     adapt = getAdapter(outObj, interfaces.IModel, outObj)
     # print 'factorizing', adapt
     return adapt
Пример #42
0
 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)
Пример #43
0
 def modelFactory(self, outObj):
     adapt = getAdapter(outObj, interfaces.IModel, outObj)
     # print 'factorizing', adapt
     return adapt