コード例 #1
0
ファイル: content.py プロジェクト: niteoweb/plone.api
def get_view(name=None, context=None, request=None):
    """Get a BrowserView object.

    :param name: [required] Name of the view.
    :type name: string
    :param context: [required] Context on which to get view.
    :type context: context object
    :param request: [required] Request on which to get view.
    :type request: request object
    :raises:
        :class:`~plone.api.exc.MissingParameterError`,
        :class:`~plone.api.exc.InvalidParameterError`
    :Example: :ref:`content_get_view_example`
    """

    try:
        return getMultiAdapter((context, request), name=name)
    except:
        # get a list of all views so we can display their names in the error
        # msg
        sm = getSiteManager()
        views = sm.adapters.lookupAll(
            required=(providedBy(context), providedBy(request)),
            provided=Interface,
        )
        views_names = [view[0] for view in views]

        raise InvalidParameterError(
            "Cannot find a view with name '{0}'.\n"
            "Available views are:\n"
            "{1}".format(name, '\n'.join(sorted(views_names)))
        )
コード例 #2
0
 def test_marker_interface(self):
     """Test that Folder and Collection provides IVirtualGalleryEnabled
     marker interface.
     """
     from hexagonit.virtualgallery.browser.interfaces import IVirtualgalleryEnabled
     self.assertTrue(IVirtualgalleryEnabled in providedBy(self.portal.folder))
     self.assertTrue(IVirtualgalleryEnabled in providedBy(self.portal.collection))
コード例 #3
0
    def test_backward_compat(self):

        class C1(object): __implemented__ = I1
        class C2(C1): __implemented__ = I2, I5
        class C3(C2): __implemented__ = I3, C2.__implemented__

        self.assert_(C3.__implemented__.__class__ is tuple)

        self.assertEqual(
            [i.getName() for i in providedBy(C3())],
            ['I3', 'I2', 'I5'],
            )

        class C4(C3):
            implements(I4)

        self.assertEqual(
            [i.getName() for i in providedBy(C4())],
            ['I4', 'I3', 'I2', 'I5'],
            )

        self.assertEqual(
            [i.getName() for i in C4.__implemented__],
            ['I4', 'I3', 'I2', 'I5'],
            )

        # Note that C3.__implemented__ should now be a sequence of interfaces
        self.assertEqual(
            [i.getName() for i in C3.__implemented__],
            ['I3', 'I2', 'I5'],
            )
        self.failIf(C3.__implemented__.__class__ is tuple)
コード例 #4
0
    def get_tree(self, node):
        '''Get the tree below of the node

        ARGUMENTS
            A node in the tree.

        RETURNS
            A 2-tuple of (node, (children\ldots)). The node supports
            the IGSContentManagerFolderMarker interface.

        SIDE EFFECTS
            None
        '''
        assert IGSContentManagerFolderMarker in providedBy(node)

        objectValueTypes = ('Folder (Ordered)', 'Folder')
        childFolders = node.objectValues(objectValueTypes)
        children = [self.get_tree(c) for c in childFolders
                    if(IGSContentManagerFolderMarker in providedBy(c))]
        retval = (node, tuple(children))

        assert len(retval) == 2
        assert retval[0] == node
        assert IGSContentManagerFolderMarker in providedBy(retval[0])
        return retval
コード例 #5
0
    def get_root(self, node):
        '''Get the root of the page-tree

        The root node is a node that provides the
        IGSContentManagerFolderMarker interface but does not have a
        parent that provides the IGSContentManagerFolderMarker
        interface.

        ARGUMENTS
          node  A node in the tree to start searching from.

        RETURNS
          The root node of the tree.

        SIDE EFFECTS
          None
        '''
        parent = node.aq_parent
        if (IGSContentManagerFolderMarker in providedBy(parent)):
            retval = self.get_root(parent)
        else:
            retval = node
        assert retval
        assert IGSContentManagerFolderMarker in providedBy(retval)
        return retval
コード例 #6
0
ファイル: layout.py プロジェクト: WouterVH/ptah
    def update(self):
        request = self.request
        context = self.context

        self.view_name = view_name = request.GET.get('view', '')

        adapters = request.registry.adapters

        view_callable = adapters.lookup(
            (IViewClassifier, providedBy(request), providedBy(context)),
            IView, name=view_name, default=None)

        if not isinstance(view_callable, PyramidView):
            raise HTTPNotFound()

        view_renderer = None
        layout_renderer = None

        for r in view_callable.renderers:
            if isinstance(r, view.LayoutRenderer):
                layout_renderer = r
            if isinstance(r, view.ViewRenderer):
                view_renderer = r

        if layout_renderer is not None:
            self.layout = view.query_layout_chain(
                context, request, layout_renderer.layout)

        self.view = view_renderer
        self.action = view_callable.__config_action__
        self.info = view_callable.__config_action__.info

        if self.layout is None:
            raise HTTPNotFound()
コード例 #7
0
    def test_directlyProvides(self):
        class IA1(Interface): pass
        class IA2(Interface): pass
        class IB(Interface): pass
        class IC(Interface): pass
        class A(Odd):
            pass
        classImplements(A, IA1, IA2)

        class B(Odd):
            pass
        classImplements(B, IB)

        class C(A, B):
            pass
        classImplements(C, IC)


        ob = C()
        directlyProvides(ob, I1, I2)
        self.assertTrue(I1 in providedBy(ob))
        self.assertTrue(I2 in providedBy(ob))
        self.assertTrue(IA1 in providedBy(ob))
        self.assertTrue(IA2 in providedBy(ob))
        self.assertTrue(IB in providedBy(ob))
        self.assertTrue(IC in providedBy(ob))

        directlyProvides(ob, directlyProvidedBy(ob)-I2)
        self.assertTrue(I1 in providedBy(ob))
        self.assertFalse(I2 in providedBy(ob))
        self.assertFalse(I2 in providedBy(ob))
        directlyProvides(ob, directlyProvidedBy(ob), I2)
        self.assertTrue(I2 in providedBy(ob))
コード例 #8
0
    def test_directlyProvides(self):
        class IA1(Interface): pass
        class IA2(Interface): pass
        class IB(Interface): pass
        class IC(Interface): pass
        class A(Odd):
            implements(IA1, IA2)

        class B(Odd):
            implements(IB)

        class C(A, B):
            implements(IC)


        ob = C()
        directlyProvides(ob, I1, I2)
        self.assert_(I1 in providedBy(ob))
        self.assert_(I2 in providedBy(ob))
        self.assert_(IA1 in providedBy(ob))
        self.assert_(IA2 in providedBy(ob))
        self.assert_(IB in providedBy(ob))
        self.assert_(IC in providedBy(ob))

        directlyProvides(ob, directlyProvidedBy(ob)-I2)
        self.assert_(I1 in providedBy(ob))
        self.failIf(I2 in providedBy(ob))
        self.failIf(I2 in providedBy(ob))
        directlyProvides(ob, directlyProvidedBy(ob), I2)
        self.assert_(I2 in providedBy(ob))
コード例 #9
0
ファイル: content.py プロジェクト: pingviini/plone.api
def get_view(name=None, context=None, request=None):
    """Get a BrowserView object.

    :param name: [required] Name of the view.
    :type name: string
    :param context: [required] Context on which to get view.
    :type context: context object
    :param request: [required] Request on which to get view.
    :type request: request object
    :raises:
        :class:`~plone.api.exc.MissingParameterError`,
        :class:`~plone.api.exc.InvalidParameterError`
    :Example: :ref:`content_get_view_example`
    """
    # It happens sometimes that ACTUAL_URL is not set in tests. To be nice
    # and not throw strange errors, we set it to be the same as URL.
    # TODO: if/when we have api.env.test_mode() boolean in the future, use that
    config = getConfiguration()
    if config.dbtab.__module__ == "plone.testing.z2":
        request["ACTUAL_URL"] = request["URL"]

    try:
        return getMultiAdapter((context, request), name=name)
    except:
        # get a list of all views so we can display their names in the error
        # msg
        sm = getSiteManager()
        views = sm.adapters.lookupAll(required=(providedBy(context), providedBy(request)), provided=Interface)
        views_names = [view[0] for view in views]

        raise InvalidParameterError(
            "Cannot find a view with name '{0}'.\n"
            "Available views are:\n"
            "{1}".format(name, "\n".join(sorted(views_names)))
        )
コード例 #10
0
 def getAvailableLayouts(self):
     # Get the layouts registered for this object from its FTI.
     fti = self.getTypeInfo()
     if fti is None:
         return ()
     result = []
     method_ids = fti.getAvailableViewMethods(self)
     spec = (providedBy(self), providedBy(self.REQUEST))
     gsm = getSiteManager()
     for mid in method_ids:
         if not isinstance(mid, six.string_types):
             mid = mid.decode()
         factory = gsm.adapters.lookup(spec, Interface, mid)
         if factory is not None:
             menu = getUtility(
                 IBrowserMenu,
                 'plone_displayviews'
             )
             item = menu.getMenuItemByAction(self, self.REQUEST, mid)
             title = item and item.title or mid
             result.append((mid, title))
         else:
             method = getattr(self, mid, None)
             if method is not None:
                 # a method might be a template, script or method
                 try:
                     title = method.aq_inner.aq_explicit.title_or_id()
                 except AttributeError:
                     title = mid
                 result.append((mid, title))
     return result
コード例 #11
0
 def execute(self, clear=True):
     for event in self._events:
         handler = None
         if event.origin is not None:
             # 1. Lookup customization with the original field
             required = (providedBy(event.origin), event.interface)
             # 1.a Original field and name
             handler = self._origin.lookup(
                 required, Interface, event.field.identifier)
             if handler is None:
                 # 1.b Original field without name
                 handler = self._origin.lookup(required, Interface)
             if handler is not None:
                 handler(event.field)
         if handler is None:
             # 2. No customization found, lookup with the zeam.form field
             required = (providedBy(event.field), event.interface)
             # 2.a zeam.form field and name
             handler = self._field.lookup(
                 required, Interface, event.field.identifier)
             if handler is None:
                 # 2.b zeam.form field without name
                 handler = self._field.lookup(required, Interface)
             if handler is not None:
                 handler(event.field)
     if clear:
         del self._events[:]
     self._scheduled = False
コード例 #12
0
    def getLayouts(self):
        context = self.context
        request = context.REQUEST

        if ICollageAlias.providedBy(self.context):
            target = self.context.get_target()
            if target is not None:
                context = target

        ifaces = mark_request(context, request)

        sm = getSiteManager()
        layouts = sm.adapters.lookupAll(
            required=(providedBy(context), providedBy(request)),
            provided=Interface
        )

        directlyProvides(request, *ifaces)
        layouts = [(name, getattr(layout, 'title', name))
                   for (name, layout) in layouts
                   if isinstance(layout, type) and
                   issubclass(layout, BrowserView) and
                   not getattr(layout, 'hide', False)]
        layouts.sort(lambda a, b: cmp(a[1], b[1]))
        return layouts
コード例 #13
0
ファイル: constraints.py プロジェクト: wpjunior/proled
def checkObject(container, name, object):
    """Check containement constraints for an object and container
    """

    # check __setitem__ precondition
    containerProvided = providedBy(container)
    __setitem__ = containerProvided.get("__setitem__")
    if __setitem__ is not None:
        precondition = __setitem__.queryTaggedValue("precondition")
        if precondition is not None:
            precondition(container, name, object)

    # check the constraint on __parent__
    __parent__ = providedBy(object).get("__parent__")
    if __parent__ is not None:
        try:
            validate = __parent__.validate
        except AttributeError:
            pass
        else:
            validate(container)

    if not containerProvided.extends(IContainer):
        # If it doesn't implement IContainer, it can't contain stuff.
        raise TypeError(_("Container is not a valid Zope container."))
コード例 #14
0
ファイル: callcc.py プロジェクト: perkinslr/schemepy
    def __call__(self, *args):
        if len(args) == 1:
            ast=args[0]
            processer = p
        else:
            processer, ast = args
        # raise Exception()
        continuation = processer.continuation
        continuation['initialCallDepth'] += 1
        continuation['targetCallDepth'] = processer.callDepth

        callback = callccCallback(continuation, self)
        # processer.popStack([ast[0], callback])
        # processer.stackPointer-=1
        
        if Procedure in providedBy(ast[0]):
            processer.pushStack([[ast[0], callback]])
            r = processer.process([[ast[0], callback]], processer.cenv)
#            processer.popStack(r)
        elif Macro in providedBy(ast[0]):
            r = ast[0](processer, [callback])
            processer.pushStack(r)
            r = processer.process(r, processer.cenv)
            processer.popStack(r)
        else:
            r = ast[0](callback)
        return r
コード例 #15
0
    def setUp(self):
        super(self.__class__, self).setUp()

        # load file content
        filedata = get_file_content('example.zip')

        # create an ATFile w/ the content
        self.loginAsPortalOwner()
        # self.portal.invokeFactory("File", 'archive')
        _createObjectByType("File", self.portal, id='archive')
        self.archive = archive = self.portal.archive

        # we should not have IArchiveFile
        self.assertTrue(IArchiveFile not in providedBy(archive))
        archive.setFile(filedata)

        # trigger modified event since we have a subscriber for that
        event = ObjectModifiedEvent(archive)
        notify(event)
        # now we must have IArchiveFile
        self.assertTrue(IArchiveFile in providedBy(archive))

        # look for a zip reader
        zipreader = component.queryAdapter(archive, IArchiveReader,
                                           name=archive.getContentType())
        self.failIf(zipreader is None)

        self.logout()
コード例 #16
0
def diff(source, target, *interfaces):
    """Get a list of (field, changed, result) 3-tuples, for "diff-able" fields.
    """
    if not len(interfaces):
        interfaces = interface.providedBy(source)
    results = []
    for iface in interfaces:
        # the order is locked on the order returned by of interface.names()
        for name in iface.names():
            #!+VERSIONS(miano, 2 may 2012) something changed in the last couple
            # of weeks that makes removeSecurityPolicy below required yet
            # it wasn't before.
            field = removeSecurityProxy(iface[name])
            # only consider for diffing fields of this type
            #!+VERSIONS(miano, 2 May 2012) This was an isinstance check before.
            # switched it to check on interfaces.
            if set((schema.interfaces.IText, schema.interfaces.ITextLine,
                schema.interfaces.ISet)).isdisjoint(
                    set(interface.providedBy(field))):
                continue
            bound = field.bind(source)
            source_value = bound.query(source, field.default)
            target_value = bound.query(target, field.default)
            if source_value is None or target_value is None:
                continue
            hresult = htmldiff(source_value, target_value)
            results.append((field, bool(hresult!=source_value), hresult))
    return results
コード例 #17
0
ファイル: content.py プロジェクト: gyst/plone.api
def get_view(name=None, context=None, request=None):
    """Get a BrowserView object.

    :param name: [required] Name of the view.
    :type name: string
    :param context: [required] Context on which to get view.
    :type context: context object
    :param request: [required] Request on which to get view.
    :type request: request object
    :raises:
        :class:`~plone.api.exc.MissingParameterError`,
        :class:`~plone.api.exc.InvalidParameterError`
    :Example: :ref:`content_get_view_example`
    """
    # We do not use exceptionhandling to detect if the requested view is
    # available, because the __init__ of said view will contain
    # errors in client code.

    # Get all available views...
    sm = getSiteManager()
    available_views = sm.adapters.lookupAll(
        required=(providedBy(context), providedBy(request)),
        provided=Interface,
    )
    # and get their names.
    available_view_names = [view[0] for view in available_views]

    # Raise an error if the requested view is not available.
    if name not in available_view_names:
        raise InvalidParameterError(
            "Cannot find a view with name '{0}'.\n"
            "Available views are:\n"
            "{1}".format(name, '\n'.join(sorted(available_view_names)))
        )
    return getMultiAdapter((context, request), name=name)
コード例 #18
0
def _fixup_zope_interface():
    # Make sure the provided and implementedBy objects
    # can be iterated.
    # Note that we DO NOT use the _iteratorChecker, but instead
    # we use NoProxy to be sure that the results (of iteration or not) are not
    # proxied. On Python 2, these objects are builtin and don't go through the
    # checking process at all, much like BTrees, so NoProxy is necessary for
    # compatibility. On Python 3, prior to this, iteration was simply not allowed.
    from zope.interface import providedBy
    from zope.interface import alsoProvides

    class I1(Interface):
        pass

    class I2(Interface):
        pass

    @implementer(I1)
    class O(object):
        pass

    o = O()


    # This will be athe zope.interface.implementedBy from the class
    # a zope.interface.declarations.Implements
    _default_checkers[type(providedBy(o))] = NoProxy

    alsoProvides(o, I2)
    # This will be the zope.interface.Provides from the instance
    _default_checkers[type(providedBy(o))] = NoProxy
コード例 #19
0
    def test_builtins(self):
        # Setup

        intspec = implementedBy(int)
        olddeclared = intspec.declared

        classImplements(int, I1)
        class myint(int):
            implements(I2)

        x = 42
        self.assertEqual([i.getName() for i in providedBy(x)],
                         ['I1'])

        x = myint(42)
        directlyProvides(x, I3)
        self.assertEqual([i.getName() for i in providedBy(x)],
                         ['I3', 'I2', 'I1'])

        # cleanup
        intspec.declared = olddeclared
        classImplements(int)

        x = 42
        self.assertEqual([i.getName() for i in providedBy(x)],
                         [])
コード例 #20
0
ファイル: vocabulary.py プロジェクト: marcosptf/fedora
    def __eq__(self, other):
        if other is self:
            return True

        if not isinstance(other, SimpleVocabulary):
            return False

        return self._terms == other._terms and providedBy(self) == providedBy(other)
コード例 #21
0
ファイル: view.py プロジェクト: mcdonc/ptah
def render_view(name, context, request):
    adapters = config.registry.adapters

    view_callable = adapters.lookup(
        (IViewClassifier, providedBy(request), providedBy(context)),
        IView, name=name, default=None)

    return view_callable(context, request)
コード例 #22
0
ファイル: test_view.py プロジェクト: WouterVH/ptah
    def _view(self, name, context, request):
        adapters = self.registry.adapters

        view_callable = adapters.lookup(
            (IViewClassifier,
             interface.providedBy(request),
             interface.providedBy(context)),
            IView, name=name, default=None)

        return view_callable(context, request)
コード例 #23
0
 def test_module(self):
     from zope.interface.tests import m1, m2
     #import zope.interface.tests.m2
     directlyProvides(m2,
                      m1.I1,
                      m1.I2,
                      )
     self.assertEqual(list(providedBy(m1)),
                      list(providedBy(m2)),
                      )
コード例 #24
0
 def __init__(self, context, request):
     super(CroppableImagesView, self).__init__(context, request)
     image_fields = [field
                     for field in self.context.Schema().fields()
                     if IBlobImageField in providedBy(field).interfaces()
                     or IImageField in providedBy(field).interfaces()]
     image_fields = [f
                     for f in image_fields
                     if f.get_size(self.context) > 0]
     self.image_fields = image_fields
コード例 #25
0
 def test_wrapped_instance(self):
     from zope.interface import Interface
     from zope.interface import implementer
     from zope.interface import providedBy
     class IFoo(Interface):
         pass
     @implementer(IFoo)
     class Foo(object):
         pass
     foo = Foo()
     proxy = self._makeOne(foo)
     self.assertEqual(list(providedBy(proxy)), list(providedBy(foo)))
コード例 #26
0
 def test___provides___w_field_w_provides(self):
     from zope.interface import implementedBy
     from zope.interface import providedBy
     from guillotina.schema import Text
     field = Text()
     field_provides = list(providedBy(field))
     wrapped = self._makeOne(field)
     wrapped_provides = list(providedBy(wrapped))
     self.assertEqual(wrapped_provides[:len(field_provides)],
                      list(providedBy(field)))
     for iface in list(implementedBy(self._getTargetClass())):
         self.assertTrue(iface in wrapped_provides)
コード例 #27
0
ファイル: test_view.py プロジェクト: runyaga/ptah
    def test_snippet_register(self):
        def TestSnippet(request):
            return 'test snippet'

        view.register_snippet('test', Context, TestSnippet)
        self.init_ptah()

        res = self.registry.adapters.lookup(
            (providedBy(Context()), providedBy(self.request)),
            view.ISnippet, 'test')

        self.assertEqual(res(Context(), self.request), 'test snippet')
コード例 #28
0
    def testUtil(self):
        self.assert_(IC in implementedBy(C))
        self.assert_(I1 in implementedBy(A))
        self.assert_(not I1 in implementedBy(C))
        self.assert_(I2 in implementedBy(B))
        self.assert_(not I2 in implementedBy(C))

        self.assert_(IC in providedBy(C()))
        self.assert_(I1 in providedBy(A()))
        self.assert_(not I1 in providedBy(C()))
        self.assert_(I2 in providedBy(B()))
        self.assert_(not I2 in providedBy(C()))
コード例 #29
0
ファイル: test_security.py プロジェクト: aregee/Mailman
 def test_proxy_delegates___provided_by__(self):
     from zope.interface import Interface
     from zope.interface import implementer
     from zope.interface import providedBy
     class IFoo(Interface):
         pass
     @implementer(IFoo)
     class Foo(object):
         pass
     foo = Foo()
     proxy = self._makeOne(foo)
     self.assertEqual(providedBy(proxy), providedBy(foo))
コード例 #30
0
ファイル: view.py プロジェクト: MatthewWilkes/pyramid
def render_view_to_response(context, request, name='', secure=True):
    """ Call the :term:`view callable` configured with a :term:`view
    configuration` that matches the :term:`view name` ``name``
    registered against the specified ``context`` and ``request`` and
    return a :term:`response` object.  This function will return
    ``None`` if a corresponding :term:`view callable` cannot be found
    (when no :term:`view configuration` matches the combination of
    ``name`` / ``context`` / and ``request``).

    If `secure`` is ``True``, and the :term:`view callable` found is
    protected by a permission, the permission will be checked before calling
    the view function.  If the permission check disallows view execution
    (based on the current :term:`authorization policy`), a
    :exc:`pyramid.httpexceptions.HTTPForbidden` exception will be raised.
    The exception's ``args`` attribute explains why the view access was
    disallowed.

    If ``secure`` is ``False``, no permission checking is done."""

    registry = getattr(request, 'registry', None)
    if registry is None:
        registry = get_current_registry()

    context_iface = providedBy(context)
    # We explicitly pass in the interfaces provided by the request as
    # request_iface to _call_view; we don't want _call_view to use
    # request.request_iface, because render_view_to_response and friends are
    # pretty much limited to finding views that are not views associated with
    # routes, and the only thing request.request_iface is used for is to find
    # route-based views.  The render_view_to_response API is (and always has
    # been) a stepchild API reserved for use of those who actually use
    # traversal.  Doing this fixes an infinite recursion bug introduced in
    # Pyramid 1.6a1, and causes the render_view* APIs to behave as they did in
    # 1.5 and previous. We should probably provide some sort of different API
    # that would allow people to find views for routes.  See
    # https://github.com/Pylons/pyramid/issues/1643 for more info.
    request_iface = providedBy(request)

    response = _call_view(
        registry,
        request,
        context,
        context_iface,
        name,
        secure=secure,
        request_iface=request_iface,
        )

    return response # NB: might be None
コード例 #31
0
 def updateImportance(self, remote_importance, malone_importance):
     """See `IBugWatch`."""
     if self.remote_importance != remote_importance:
         self.remote_importance = remote_importance
         self.lastchanged = UTC_NOW
         # Sync the object in order to convert the UTC_NOW sql
         # constant to a datetime value.
         self.sync()
     for linked_bugtask in self.bugtasks_to_update:
         old_bugtask = Snapshot(linked_bugtask,
                                providing=providedBy(linked_bugtask))
         linked_bugtask.transitionToImportance(
             malone_importance,
             getUtility(ILaunchpadCelebrities).bug_watch_updater)
         if linked_bugtask.importance != old_bugtask.importance:
             event = ObjectModifiedEvent(
                 linked_bugtask,
                 old_bugtask, ['importance'],
                 user=getUtility(ILaunchpadCelebrities).bug_watch_updater)
             notify(event)
コード例 #32
0
    def test_handler_step_provides_interfaces_implemented_by_upgrade_step_class(
            self):
        code = '\n'.join((
            'from ftw.upgrade import UpgradeStep',
            'from ftw.upgrade.tests.test_directory_meta_directive import IFoo',
            'from zope.interface import implementer', '', '@implementer(IFoo)',
            'class Foo(UpgradeStep):', '    pass'))

        self.profile.with_upgrade(
            Builder('ftw upgrade step').to(datetime(2011, 1, 1,
                                                    1)).with_code(code))

        with self.package_created():
            portal_setup = getToolByName(self.portal, 'portal_setup')
            steps = listUpgradeSteps(portal_setup, 'the.package:default',
                                     '10000000000000')
            self.assertEquals(1, len(steps))
            self.assertItemsEqual((IRecordableHandler, IUpgradeStep, IFoo),
                                  tuple(providedBy(steps[0]['step'].handler)))
            self.assertTrue(steps[0]['step'].handler.handler)
コード例 #33
0
    def test_register_class_as_content_type(self):
        from repoze.workflow.interfaces import IWorkflowList
        from zope.component import getSiteManager
        from zope.interface import providedBy
        from zope.interface import Interface

        class Foo:
            pass

        class IBar(Interface):
            pass

        workflow = object()
        self._callFUT(workflow, 'security', Foo)
        sm = getSiteManager()
        pb = providedBy(Foo)
        wf_list = sm.adapters.lookup((pb, ), IWorkflowList, name='security')
        self.assertEqual(wf_list, [{'elector': None, 'workflow': workflow}])
        other = sm.adapters.lookup((IBar, ), IWorkflowList, name='security')
        self.assertEqual(other, None)
コード例 #34
0
ファイル: zcml.py プロジェクト: rnixx/repoze.workflow
def register_workflow(workflow, type, content_type, elector, info=None):
    if content_type is None:
        content_type = IDefaultWorkflow

    if not IInterface.providedBy(content_type):
        content_type = providedBy(content_type)

    sm = getSiteManager()

    wf_list = sm.adapters.lookup((content_type, ),
                                 IWorkflowList,
                                 name=type,
                                 default=None)

    if wf_list is None:
        wf_list = []
        sm.registerAdapter(wf_list, (content_type, ), IWorkflowList, type,
                           info)

    wf_list.append({'workflow': workflow, 'elector': elector})
コード例 #35
0
    def test_workitems_deleted_notification_message(self):
        """ Test that we get a notification for deleting a work item."""
        stub.test_emails = []
        wi = self.factory.makeSpecificationWorkItem()
        spec = wi.specification
        old_spec = Snapshot(spec, providing=providedBy(spec))
        login_person(spec.owner)
        spec.updateWorkItems([])
        # In production this notification is fired by lazr.restful, but we
        # need to do it ourselves in this test.
        notify(ObjectModifiedEvent(
            spec, old_spec, edited_fields=['workitems_text']))
        transaction.commit()

        self.assertEqual(1, len(stub.test_emails))
        rationale = '- %s: %s' % (wi.title, wi.status.name)
        [email] = stub.test_emails
        # Actual message is part 2 of the e-mail.
        msg = email[2]
        self.assertIn(rationale, msg)
コード例 #36
0
    def requestAvatarId(self, credentials):
        """
        Part of the L{ICredentialsChecker} interface.  Called by a portal with
        some credentials to check if they'll authenticate a user.  We check the
        interfaces that the credentials provide against our list of acceptable
        checkers.  If one of them matches, we ask that checker to verify the
        credentials.  If they're valid, we call our L{_cbGoodAuthentication}
        method to continue.

        @param credentials: the credentials the L{Portal} wants us to verify
        """
        ifac = providedBy(credentials)
        for i in ifac:
            c = self.checkers.get(i)
            if c is not None:
                d = defer.maybeDeferred(c.requestAvatarId, credentials)
                return d.addCallback(self._cbGoodAuthentication,
                        credentials)
        return defer.fail(UnhandledCredentials("No checker for %s" % \
            ', '.join(map(reflect.qual, ifac))))
コード例 #37
0
def utility(_context,
            provides=None,
            component=None,
            factory=None,
            permission=None,
            name=''):
    if factory and component:
        raise TypeError("Can't specify factory and component.")

    if provides is None:
        if factory:
            provides = list(implementedBy(factory))
        else:
            provides = list(providedBy(component))
        if len(provides) == 1:
            provides = provides[0]
        else:
            raise TypeError("Missing 'provides' attribute")

    if name == '':
        if factory:
            name = getName(factory)
        else:
            name = getName(component)

    if permission is not None:
        component = proxify(component,
                            provides=provides,
                            permission=permission)

    _context.action(
        discriminator=('utility', provides, name),
        callable=handler,
        args=('registerUtility', component, provides, name, _context.info),
        kw=dict(factory=factory),
    )
    _context.action(
        discriminator=None,
        callable=provideInterface,
        args=('', provides),
    )
コード例 #38
0
 def get_portlets(self):
     portlets_schemata = {
         iface: name
         for name, iface in getUtilitiesFor(IPortletTypeInterface)
     }
     portlets = {}
     for manager_name, manager in getUtilitiesFor(IPortletManager):
         mapping = queryMultiAdapter(
             (self.context, manager), IPortletAssignmentMapping
         )
         if mapping is None:
             continue
         mapping = mapping.__of__(self.context)
         for name, assignment in mapping.items():
             type_ = None
             schema = None
             for schema in providedBy(assignment).flattened():
                 type_ = portlets_schemata.get(schema, None)
                 if type_ is not None:
                     break
             if type_ is None:
                 continue
             assignment = assignment.__of__(mapping)
             settings = IPortletAssignmentSettings(assignment)
             if manager_name not in portlets:
                 portlets[manager_name] = []
             title = getattr(assignment, "title", "") or getattr(
                 assignment, "header", ""
             )
             portlets[manager_name].append(
                 {
                     "type": type_,
                     "title": title,
                     "visible": settings.get("visible", True),
                     "assignment": {
                         name: getattr(assignment, name, None)
                         for name in schema.names()
                     },
                 }
             )
     self["portlets"] = portlets
コード例 #39
0
    def beforeTraversal(self, request):
        notify(StartRequestEvent(request))
        request._traversalticks_start = tickcount.tickcount()
        threadid = thread.get_ident()
        threadrequestfile = open_for_writing(
            'logs/thread-%s.request' % threadid, 'w')
        try:
            request_txt = unicode(request).encode('UTF-8')
        except Exception:
            request_txt = 'Exception converting request to string\n\n'
            try:
                request_txt += traceback.format_exc()
            except:
                request_txt += 'Unable to render traceback!'
        threadrequestfile.write(request_txt)
        threadrequestfile.close()

        # Tell our custom database adapter that the request has started.
        da.set_request_started()

        newInteraction(request)

        transaction.begin()

        # Now we are logged in, install the correct IDatabasePolicy for
        # this request.
        db_policy = IDatabasePolicy(request)
        getUtility(IStoreSelector).push(db_policy)

        getUtility(IOpenLaunchBag).clear()

        # Set the default layer.
        adapters = getGlobalSiteManager().adapters
        layer = adapters.lookup((providedBy(request), ), IDefaultSkin, '')
        if layer is not None:
            layers.setAdditionalLayer(request, layer)

        principal = self.getPrincipal(request)
        request.setPrincipal(principal)
        self.maybeRestrictToTeam(request)
        maybe_block_offsite_form_post(request)
コード例 #40
0
ファイル: base.py プロジェクト: lvh/sockjs-twisted
    def makeConnection(self, transport):
        directlyProvides(self, providedBy(transport))
        Protocol.makeConnection(self, transport)

        if not self.method in self.allowedMethods:
            self.sendHeaders({
                'status': '405 Method Not Supported',
                'allow': ', '.join(self.allowedMethods)
            })
            self.transport.write("\r\n")
            self.transport.loseConnection()
            return
        elif self.method == 'OPTIONS':
            self.sendHeaders()
            self.transport.write("")
            self.transport.loseConnection()
            return

        if not self.writeOnly:
            if self.session in self.factory.sessions:
                self.wrappedProtocol = self.factory.sessions[self.session]
            else:
                self.wrappedProtocol = RelayProtocol(
                    self.factory,
                    self.factory.wrappedFactory.buildProtocol(
                        self.transport.addr), self.session)

            if self.wrappedProtocol.attached:
                self.wrappedProtocol = None
                self.failConnect()
            else:
                if not self.prepConnection():
                    self.disconnecting = False
                    self.wrappedProtocol.makeConnection(self)
        else:
            if self.session in self.factory.sessions:
                self.wrappedProtocol = self.factory.sessions[self.session]
            else:
                self.sendHeaders({'status': '404 Not Found'})
                self.transport.write("\r\n")
                self.transport.loseConnection()
 def test__find_view_no_match_multiview_registered(self):
     from zope.interface import implements
     from zope.interface import providedBy
     from pyramid.interfaces import IRequest
     from pyramid.interfaces import IViewClassifier
     from pyramid.interfaces import IMultiView
     from pyramid.traversal import DefaultRootFactory
     from pyramid.registry import Registry
     registry = Registry()
     class View1(object):
         implements(IMultiView)
     request = DummyRequest({'PATH_INFO':'/a'})
     root = DefaultRootFactory(request)
     root_iface = providedBy(root)
     registry.registerAdapter(View1(),
                              (IViewClassifier, IRequest, root_iface),
                              IMultiView)
     self._register_mapper(registry, [])
     command = self._makeOne(registry=registry)
     result = command._find_view('/x', registry)
     self.assertEqual(result, None)
 def excview_tween(request):
     attrs = request.__dict__
     try:
         response = handler(request)
     except Exception, exc:
         # WARNING: do not assign the result of sys.exc_info() to a
         # local var here, doing so will cause a leak
         attrs['exc_info'] = sys.exc_info()
         attrs['exception'] = exc
         # clear old generated request.response, if any; it may
         # have been mutated by the view, and its state is not
         # sane (e.g. caching headers)
         if 'response' in attrs:
             del attrs['response']
         request_iface = attrs['request_iface']
         provides = providedBy(exc)
         for_ = (IExceptionViewClassifier, request_iface.combined, provides)
         view_callable = adapters.lookup(for_, IView, default=None)
         if view_callable is None:
             raise
         response = view_callable(exc, request)
コード例 #43
0
    def _updateContent(self, notification, data=None):

        try:
            util = getUtility(IAction, notification.action)
        except ComponentLookupError:
            raise InvalidTriggerActionType(
                "Invalid action type specified: %s" % notification.action
            )

        fields = {}
        for iface in providedBy(util.getInfo(notification)):
            f = getFields(iface)
            if f:
                fields.update(f)

        data = util.getDefaultData(self._dmd)
        for k, v in fields.iteritems():
            if k not in data:
                data[k] = v.default

        util.updateContent(notification.content, data)
コード例 #44
0
ファイル: events.py プロジェクト: enfold/collective.gsa64
def annotate_add(context):
    if IPloneSiteRoot in providedBy(context):
        return

    try:
        annotate_action(
            context.REQUEST,
            context.absolute_url(),
            "add",
            context.getContentType(),
            get_metadata(context),
        )
    except AttributeError:
        #dexterity content
        annotate_action(
            context.REQUEST,
            context.absolute_url(),
            "add",
            context.content_type(),
            get_metadata(context),
        )
コード例 #45
0
def diff(source, target, *interfaces):
    """Get a list of (field, changed, result) 3-tuples, for "diff-able" fields.
    """
    if not len(interfaces):
        interfaces = interface.providedBy(source)
    results = []
    for iface in interfaces:
        # the order is locked on the order returned by of interface.names()
        for name in iface.names():
            field = iface[name]
            # only consider for diffing fields of this type
            if not isinstance(field, (schema.Text, schema.TextLine, schema.Set)):
                continue
            bound = field.bind(source)
            source_value = bound.query(source, field.default)
            target_value = bound.query(target, field.default)
            if source_value is None or target_value is None:
                continue
            hresult = textDiff(source_value, target_value)
            results.append((field, bool(hresult!=source_value), hresult))
    return results
コード例 #46
0
ファイル: panel.py プロジェクト: stevepiercy/websauna
def render_panel(context, request, name='', *args, **kw):
    """Render a panel.

    TODO: Clean this up

    Renders the named panel, returning a `unicode` object that is the
    rendered HTML for the panel.  The panel is looked up using the current
    context (or the context given as keyword argument, to override the
    context in which the panel is called) and an optional given name
    (which defaults to an empty string).
    The panel is called passing in the current
    context, request and any additional parameters passed into the
    `render_panel` call.  In case a panel isn't found, `None` is returned.
    """
    if "controls" not in kw:
        kw["controls"] = True

    adapters = request.registry.adapters
    panel = adapters.lookup((providedBy(context), ), IPanel, name=name)
    assert panel, "Could not find panel {name}".format(name=name)
    return Markup(panel(context, request, *args, **kw))
コード例 #47
0
    def getExportImportHandler(self, field):
        """Returns an IWidgetExportImportHandler suitable for this widget."""
        widgetName = self.getWidgetFactoryName()
        if widgetName is None:
            # Find default widget factory for this field.
            # We use lookup instead of getAdapter b/c we don't want to
            # instantiate the widget.
            sm = getSiteManager()
            widgetFactory = sm.adapters.lookup((providedBy(field), IFormLayer),
                                               IFieldWidget)
            if widgetFactory is not None:
                widgetName = '{0}.{1}'.format(widgetFactory.__module__,
                                              widgetFactory.__name__)
            else:
                widgetName = u''

        widgetHandler = queryUtility(IWidgetExportImportHandler,
                                     name=widgetName)
        if widgetHandler is None:
            widgetHandler = WidgetExportImportHandler(IHTMLFormElement)
        return widgetHandler
コード例 #48
0
ファイル: uiactions.py プロジェクト: timgates42/ptah
def list_uiactions(content, request=None, registry=None, category=''):
    """ List ui actions for specific content """
    if request is not None:
        registry = request.registry
        url = request.resource_url(content)
    else:
        url = ''

    actions = []
    for name, action in registry.adapters.lookupAll((providedBy(content), ),
                                                    IAction):
        if (action.category == category) and action.check(content, request):
            actions.append((action.sort_weight, {
                'id': action.id,
                'url': action.url(content, request, url),
                'title': action.title,
                'description': action.description,
                'data': action.data
            }))

    return [ac for _w, ac in sorted(actions, key=lambda action: action[0])]
コード例 #49
0
ファイル: test_exportimport.py プロジェクト: bendavis78/zope
def _makeFolder(id, site_folder=False):
    from zope.interface import directlyProvides
    from zope.interface import providedBy
    from Products.CMFCore.PortalFolder import PortalFolder
    from Products.CMFCore.interfaces import ISiteRoot
    from Products.CMFCore.TypesTool import TypesTool
    from Products.CMFCore.tests.base.dummy import DummyType

    class _TypeInfo(DummyType):
        def _getId(self):
            return self._id

        def constructInstance(self, container, id, *args, **kw):
            portal_type = self._getId()
            if portal_type == TEST_FOLDER:
                content = PortalFolder(id)
            elif portal_type == TEST_CONTENT:
                content = _makeItem()
                content._setId(id)
            elif portal_type == TEST_INI_AWARE:
                content = _makeINIAware(id)
            elif portal_type == TEST_CSV_AWARE:
                content = _makeCSVAware(id)
            else:
                raise ValueError, 'Ugh'
            content.portal_type = portal_type
            container._setObject(id, content)
            return container._getOb(id)

    folder = PortalFolder(id)
    folder.portal_type = TEST_FOLDER
    if site_folder:
        directlyProvides(folder, ISiteRoot + providedBy(folder))
        tool = folder.portal_types = TypesTool()
        tool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE))
        tool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE))
        tool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT))
        tool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER))

    return folder
コード例 #50
0
def event(obj, event=None):

    if event is None:
        # some events don't include object
        event = obj
        obj = None

    iface = providedBy(event).declared[0]
    if iface in _registered:
        try:
            registry = getUtility(IRegistry)
        except ComponentLookupError:
            return
        if not registry.get(
                'collective.elasticsearch.interfaces.IElasticSettings.enabled',
                False):  # noqa
            return

        if obj is not None and ITrashed.providedBy(obj):
            # special handling for ITrashed...
            # we don't want to record transition events for trashing
            # and we want a special psuedo trash event
            # then, we still want an event when it gets deleted for good
            if iface not in (IAfterTransitionEvent, IObjectRemovedEvent):
                # dive out if not IAfterTransitionEvent or object removed event
                return
            if iface == IObjectRemovedEvent:
                audit_data = _registered[iface]
            else:
                audit_data = _registered[ITrashed]
        else:
            audit_data = _registered[iface]

        recorder = audit_data.get_recorder(event, obj)
        site_path = '/'.join(api.portal.get().getPhysicalPath())
        transaction.get().addAfterCommitHook(
            record,
            args=(recorder, site_path, ESConnectionFactoryFactory(registry)))
    else:
        pass
コード例 #51
0
    def doCustomizeTemplate(self, viewname):
        # find the nearest site
        site = findSite(self.context, IObjectManagerSite)
        if site is None:
            raise TypeError("No site found")  # TODO find right exception

        # we're using the original filename of the template, not the
        # view name to avoid potential conflicts and/or confusion in
        # URLs
        template = self.templateFromViewName(viewname)
        zpt_id = basename(template.filename)

        template_file = self.templateCodeFromViewName(viewname)
        viewclass = self.viewClassFromViewName(viewname)
        permission = self.permissionFromViewName(viewname)
        viewzpt = TTWViewTemplate(zpt_id,
                                  template_file,
                                  view=viewclass,
                                  permission=permission)
        container = queryUtility(IViewTemplateContainer)
        if container is not None:
            viewzpt = container.addTemplate(zpt_id, viewzpt)
        else:
            site._setObject(zpt_id,
                            viewzpt)  #XXXthere could be a naming conflict
            viewzpt = getattr(site, zpt_id)

        # find out the view registration object so we can get at the
        # provided and required interfaces
        for reg in getViews(providedBy(self.context), IBrowserRequest):
            if reg.name == viewname:
                break

        components = site.getSiteManager()
        components.registerAdapter(viewzpt,
                                   required=reg.required,
                                   provided=reg.provided,
                                   name=viewname)  #XXX info?

        return viewzpt
コード例 #52
0
    def update(self):
        need("yui-dragdrop")
        need("yui-container")

        sitting = self._parent._parent.context
        scheduled_item_ids = [item.item_id for item in sitting.item_schedule]
        
        # add location to items
        gsm = component.getSiteManager()
        adapter = gsm.adapters.lookup(
            (interface.implementedBy(self.model), interface.providedBy(self)), 
            ILocation
        )
        
        date_formatter = self.get_date_formatter("date", "medium")
        items = [ adapter(item, None) for item in self._query_items() ]
        # for each item, format dictionary for use in template
        self.items = [{
                "title": properties.title,
                "name": item.__class__.__name__,
                "description": properties.description,
                #"date": _(u"$F", mapping={"F":
                #       datetimedict.fromdatetime(item.changes[-1].date)}),
                #"date":item.changes[-1].date,
                # not every item has a auditlog (headings) 
                # use last status change instead.
                "date": date_formatter.format(self._item_date(item)),
                "state": IWorkflow(item).get_state(item.status).title,
                "id": item.parliamentary_item_id,
                "class": (
                    (item.parliamentary_item_id in scheduled_item_ids and
                        "dd-disable") or 
                    ""),
                "url": self._item_url(item),
                "type": item.type
            } for item, properties in [
                (item, (IDCDescriptiveProperties.providedBy(item) and item or
                        IDCDescriptiveProperties(item))) 
                for item in items ]
        ]
コード例 #53
0
ファイル: test_directives.py プロジェクト: bendavis78/zope
    def testDefaultSkin(self):
        request = TestRequest()
        self.assertEqual(
            component.queryMultiAdapter((ob, request), name='test'), None)

        XMLConfig('meta.zcml', zope.app.component)()
        xmlconfig(
            StringIO(template % ('''
            <interface
                interface="
                  zope.app.publisher.browser.tests.test_directives.ITestSkin"
                type="zope.publisher.interfaces.browser.IBrowserSkinType"
                name="Test Skin"
                />
            <browser:defaultSkin name="Test Skin" />
            <browser:page
                name="test"
                class="zope.app.component.tests.views.VZMI"
                layer="
                  zope.app.publisher.browser.tests.test_directives.ITestLayer"
                for="zope.app.component.tests.views.IC"
                permission="zope.Public"
                attribute="index"
                />
            <browser:page name="test"
                class="zope.app.component.tests.views.V1"
                for="zope.app.component.tests.views.IC"
                permission="zope.Public"
                attribute="index"
                />
            ''')))

        # Simulate Zope Publication behavior in beforeTraversal()
        adapters = component.getSiteManager().adapters
        skin = adapters.lookup((providedBy(request), ), IDefaultSkin, '')
        directlyProvides(request, skin)

        v = component.queryMultiAdapter((ob, request), name='test')
        self.assert_(issubclass(v.__class__, VZMI))
コード例 #54
0
 def test_no_adapts(self):
     from zope.interface import Interface
     from zope.interface import implementer
     from zope.interface import providedBy
     from zope.component.globalregistry import getGlobalSiteManager
     from zope.component._api import adapter
     class IFoo(Interface):
         pass
     @implementer(IFoo)
     class Foo(object):
         pass
     @adapter(IFoo)
     def _handler(context):
         assert 0, "DON'T GO HERE"
     self._callFUT(_handler)
     gsm = getGlobalSiteManager()
     regs = list(gsm.registeredHandlers())
     self.assertEqual(len(regs), 1)
     hr = regs[0]
     self.assertEqual(list(hr.required), list(providedBy(Foo())))
     self.assertEqual(hr.name, '')
     self.assertTrue(hr.factory is _handler)
コード例 #55
0
ファイル: sharing.py プロジェクト: eea/bise.country
    def share_with_principal(self, principal_id, role):
        """ Setup proper share role for this principal
        """
        logger.info("Setting up proper %s role for %s", role, principal_id)
        print "Sharing", principal_id, role

        contexts = [self.context]
        wc = self.get_wc(self.context)
        if wc:
            contexts.append(wc)

        site = getSite()
        for location in PLONE_LOCATIONS:
            if self.context.aq_parent.id != 'countries':
                continue
            obj = site.unrestrictedTraverse(location + self.context.id)
            if obj:
                contexts.append(obj)
        for folder in contexts:
            self.assign_role_to_principal(folder, role, principal_id)
            if ICountryPage not in list(providedBy(folder)):
                mark(folder, ICountryPage)
コード例 #56
0
 def updateStatus(self, remote_status, malone_status):
     """See `IBugWatch`."""
     if self.remotestatus != remote_status:
         self.remotestatus = remote_status
         self.lastchanged = UTC_NOW
         # Sync the object in order to convert the UTC_NOW sql
         # constant to a datetime value.
         self.sync()
     for linked_bugtask in self.bugtasks_to_update:
         old_bugtask = Snapshot(linked_bugtask,
                                providing=providedBy(linked_bugtask))
         linked_bugtask.transitionToStatus(
             malone_status,
             getUtility(ILaunchpadCelebrities).bug_watch_updater)
         # We don't yet support updating the assignee of bug watches.
         linked_bugtask.transitionToAssignee(None)
         if linked_bugtask.status != old_bugtask.status:
             event = ObjectModifiedEvent(
                 linked_bugtask,
                 old_bugtask, ['status'],
                 user=getUtility(ILaunchpadCelebrities).bug_watch_updater)
             notify(event)
コード例 #57
0
def find_service(request, iface=Interface, context=_marker, name=''):
    if context is _marker:
        context = getattr(request, 'context', None)

    context_iface = providedBy(context)
    svc_types = (IServiceClassifier, context_iface)

    cache = request.service_cache
    svc = cache.lookup(svc_types, iface, name=name, default=None)
    if svc is None:
        adapters = request.registry.adapters
        info = adapters.lookup(svc_types, iface, name=name)
        if info is None:
            raise ValueError('could not find registered service')
        svc = info.factory(context, request)
        cache.register(
            (IServiceClassifier, info.context_iface),
            iface,
            name,
            svc,
        )
    return svc
コード例 #58
0
ファイル: configurable.py プロジェクト: msdemlei/nevow
 def getBindingNames(self, context):
     ## Todo: remove this getattr
     ifs = providedBy(getattr(self, 'boundTo', self))
     ifs = [
         x for x in ifs if x is not IConfigurable and x is not TypedInterface
     ]
     bindingNames = []
     self.bindingDict = bindingDict = {}
     for interface in ifs:
         ## TypedInterfaces have a __spec__ attribute which is a list of all Typed properties and
         ## autocallable methods
         for binding in getattr(interface, '__spec__', []):
             bindingDict[binding.name] = binding
             if binding.name not in bindingNames:
                 bindingNames.append(binding.name)
             if IActionableType.providedBy(binding.typedValue):
                 acts = binding.typedValue.actions
                 if acts is None:
                     acts = []
                 for action in acts:
                     bindingDict[action.name] = action
     return bindingNames
コード例 #59
0
    def test_getAdditionalSchemata(self):
        from plone.dexterity.interfaces import IDexterityFTI
        from plone.behavior.interfaces import IBehavior
        from plone.autoform.interfaces import IFormFieldProvider
        from zope.interface import Interface
        from zope.interface import providedBy

        class IBehaviorInterface(Interface):
            pass

        class IBehaviorSchema(Interface):
            pass

        behavior_mock = Mock()
        fti_mock = DexterityFTI(u'testtype')

        portal_type = 'prefix_0_type_0_schema'
        behavior_name = 'behavior_0'

        fti_mock.behaviors = (behavior_name,)
        behavior_mock.interface = IBehaviorInterface

        provider_mock = Mock(return_value=IBehaviorSchema)

        self.mock_utility(behavior_mock, IBehavior, behavior_name)
        self.mock_utility(fti_mock, IDexterityFTI, portal_type)

        self.mock_adapter(
            provider_mock,
            IFormFieldProvider,
            (providedBy(IBehaviorInterface), )
        )

        generator = utils.getAdditionalSchemata(None, portal_type)
        schematas = tuple(generator)

        self.assertEqual(len(schematas), 1)
        schemata = schematas[0]
        self.assertTrue(schemata is IBehaviorSchema)
コード例 #60
0
    def makeConnection(self, transport):
        """
        Connect this wrapper to the given transport and initialize the
        necessary L{OpenSSL.SSL.Connection} with a memory BIO.
        """
        tlsContext = self.factory._contextFactory.getContext()
        self._tlsConnection = Connection(tlsContext, None)
        if self.factory._isClient:
            self._tlsConnection.set_connect_state()
        else:
            self._tlsConnection.set_accept_state()
        self._appSendBuffer = []

        # Add interfaces provided by the transport we are wrapping:
        for interface in providedBy(transport):
            directlyProvides(self, interface)

        # Intentionally skip ProtocolWrapper.makeConnection - it might call
        # wrappedProtocol.makeConnection, which we want to make conditional.
        Protocol.makeConnection(self, transport)
        self.factory.registerProtocol(self)
        if self._connectWrapped:
            # Now that the TLS layer is initialized, notify the application of
            # the connection.
            ProtocolWrapper.makeConnection(self, transport)

        # Now that we ourselves have a transport (initialized by the
        # ProtocolWrapper.makeConnection call above), kick off the TLS
        # handshake.
        try:
            self._tlsConnection.do_handshake()
        except WantReadError:
            # This is the expected case - there's no data in the connection's
            # input buffer yet, so it won't be able to complete the whole
            # handshake now.  If this is the speak-first side of the
            # connection, then some bytes will be in the send buffer now; flush
            # them.
            self._flushSendBIO()