Пример #1
0
 def publishTraverse(self, request, name):
     """ Look up the field whose name matches the next URL path element, and wrap it.
     """
     try:
         return EasyFormFieldContext(self.schema[name], self.request).__of__(self)
     except KeyError:
         return DefaultPublishTraverse(self, request).publishTraverse(request, name)
Пример #2
0
    def publishTraverse(self, request, name):
        # Try to get an object using default traversal
        adapter = DefaultPublishTraverse(self.context, request)
        try:
            obj = adapter.publishTraverse(request, name)
            if (not IContentish.providedBy(obj)
                    and not IService.providedBy(obj)):
                raise KeyError

        # If there's no object with the given name, we get a KeyError.
        # In a non-folderish context a key lookup results in an AttributeError.
        except (KeyError, AttributeError):
            # No object, maybe a named rest service
            service = queryMultiAdapter((self.context, request),
                                        name=request._rest_service_id + name)
            if service is None:
                # No service, fallback to regular view
                view = queryMultiAdapter((self.context, request), name=name)
                if view is not None:
                    return view
                raise
            return service
        else:
            # Wrap object to ensure we handle further traversal
            return RESTWrapper(obj, request)
Пример #3
0
 def publishTraverse(self, request, name):
     """
     Make sure we don't end up in
     Products.Five.browser.metaconfigure.ViewMixinForTemplates's
     publishTraverse.
     """
     adapter = DefaultPublishTraverse(self, request)
     return adapter.publishTraverse(request, name)
 def publishTraverse(self, request, name):
     if name in self.getUniqueCountriesNames().keys():
         self.country = name
         return self
     try:
         return super(PloneInListing, self).publishTraverse(request, name)
     except NotFound:
         default = DefaultPublishTraverse(self, request)
         return default.publishTraverse(request, name)
Пример #5
0
    def publishTraverse(self, request, name):
        if name == self.__name__:
            editView = SQLEditView(self, request).__of__(self)
            #we need to know the fti in the field in order to get the correct columns vocabulary
            #from fti.sql_connection and fti.sql_table
            editView.field.context = self
            return editView

        return DefaultPublishTraverse(self, request).publishTraverse(request, name)
Пример #6
0
    def publishTraverse(self, request, name):
        """ It's not valid to traverse to anything below a field context.
        """
        # hack to make inline validation work
        # (plone.app.z3cform doesn't know the form is the default view)
        if name == self.__name__:
            return ActionEditView(self, request).__of__(self)

        return DefaultPublishTraverse(self,
                                      request).publishTraverse(request, name)
Пример #7
0
 def publishTraverse(self, request, name):
             
     if name in self.object_ids:
         return self.objects.get(name).__of__(self.context)
     else:
         
         import pdb; pdb.set_trace()
         
         default_adapter = DefaultPublishTraverse(object, self)
         ob2 = default_adapter.publishTraverse(self, name)
         return ob2
Пример #8
0
 def publishTraverse(self, request, name):
     """ Look up the field whose name matches the next URL path element, and wrap it.
     """
     ifaces = list(self.additionalSchemata)
     field = None
     for iface in ifaces:
         if name in list(iface):
             field = iface[name]
     if not field and name in list(self.schema):
         field = self.schema[name]
     if field:
         return SQLFieldContext(field, self.request).__of__(self)
     else: 
         return DefaultPublishTraverse(self, request).publishTraverse(request, name)
Пример #9
0
    def publishTraverse(self, request, name):
        """ 1. Try to find a content type whose name matches the next URL path element.
            2. Look up its schema.
            3. Return a schema context (an acquisition-aware wrapper of the schema).
        """
        try:
            fti = getUtility(IDexterityFTI, name=name)
        except ComponentLookupError:
            return DefaultPublishTraverse(self, request).publishTraverse(
                request, name)

        schema = fti.lookupSchema()
        schema_context = TypeSchemaContext(schema,
                                           request,
                                           name=name,
                                           title=fti.title).__of__(self)
        schema_context.fti = fti
        schema_context.schemaName = u''
        return schema_context
Пример #10
0
    def publishTraverse(self, request, name):
        try:
            fti = getUtility(IDexterityFTI, name=name)
        except ComponentLookupError:
            return DefaultPublishTraverse(self, request).publishTraverse(
                request,
                name
            )

        schema = fti.lookupSchema()
        if 'collective.behavior.sql.behavior.behaviors.ISQLContent' in fti.behaviors:
            schema_context = SQLTypeSchemaContext(
                schema, request, name=name, title=fti.title).__of__(self)
        else:
            schema_context = TypeSchemaContext(
                schema, request, name=name, title=fti.title).__of__(self)
        schema_context.fti = fti
        schema_context.schemaName = u''
        return schema_context
Пример #11
0
    def test_plone_app_blob_image_not_configured(self):
        request = self.portal.REQUEST
        view = self.portal['image'].unrestrictedTraverse('@@images')
        image = view.publishTraverse(request, 'image')

        # Rewrap image scale to leave out the image class
        # implementation. We do this to test the situation where we do
        # not have class-supported publishing (e.g. with schema
        # extension).
        image = image.aq_base.__of__(self.portal)

        adapter = DefaultPublishTraverse(image, request)
        ob2 = adapter.publishTraverse(request, 'index_html')

        request.set('HTTP_X_FORWARDED_FOR', '0.0.0.0')

        ob2()
        xsendfile = request.RESPONSE.getHeader('X-SENDFILE')
        self.assertIsNone(xsendfile)
Пример #12
0
    def test_publishTraverse_to_allowed_name(self):
        # The ``eagle.method`` view has a method ``eagle`` that is registered
        # with ``allowed_attributes`` in pages.zcml. This attribute should be
        # reachable through ``publishTraverse`` on the view.

        folder = self.folder
        view = folder.unrestrictedTraverse('testoid/eagle.method')

        # Publishing traversal with the default adapter should work:

        from ZPublisher.BaseRequest import DefaultPublishTraverse
        request = folder.REQUEST
        adapter = DefaultPublishTraverse(view, request)
        result = adapter.publishTraverse(request, 'eagle')()
        self.assertIn('The eagle has landed', result)

        # Publishing via browser works, too:

        self.browser.open(
            'http://localhost/test_folder_1_/testoid/eagle.method/eagle')
        self.assertEqual('The eagle has landed', self.browser.contents)
Пример #13
0
    def test_publishTraverse_to_allowed_interface(self):
        # The ``cheeseburger`` view has a method ``meat`` that is
        # registered via ``allowed_interface`` in pages.zcml. This attribute
        # should be reachable through ``publishTraverse`` on the view.

        folder = self.folder
        view = folder.unrestrictedTraverse('testoid/cheeseburger')

        # Publishing traversal with the default adapter should work:

        from ZPublisher.BaseRequest import DefaultPublishTraverse
        request = folder.REQUEST
        adapter = DefaultPublishTraverse(view, request)
        result = adapter.publishTraverse(request, 'meat')()
        self.assertIn('yummi', result)

        # Publishing via browser works, too:

        self.browser.open(
            'http://localhost/test_folder_1_/testoid/cheeseburger/meat')
        self.assertEqual('yummi', self.browser.contents)
Пример #14
0
    def test_plone_app_blob_image(self):
        request = self.portal.REQUEST
        view = self.portal['image'].unrestrictedTraverse('@@images')
        image = view.publishTraverse(request, 'image')

        # Rewrap image scale to leave out the image class
        # implementation. We do this to test the situation where we do
        # not have class-supported publishing (e.g. with schema
        # extension).
        image = image.aq_base.__of__(self.portal)

        adapter = DefaultPublishTraverse(image, request)
        ob2 = adapter.publishTraverse(request, 'index_html')

        os.environ['XSENDFILE_RESPONSEHEADER'] = 'X-SENDFILE'
        request.set('HTTP_X_FORWARDED_FOR', '0.0.0.0')

        ob2()
        content_type = request.RESPONSE.getHeader('content-type')
        self.assertEqual(content_type, 'image/gif')

        xsendfile = request.RESPONSE.getHeader('X-SENDFILE')
        self.assertIsNotNone(xsendfile)
        self.assertTrue(os.path.isfile(xsendfile))
Пример #15
0
 def publishTraverse(self, request, name):
     if name.startswith('++'):
         return DefaultPublishTraverse(self, request).publishTraverse(
             request, name)
     return ShippingMethodForm(self.context, request, name)
Пример #16
0
 def __init__(self, context, request):
     self.default = DefaultPublishTraverse(context, request)
     self.context = context
     self.request = request