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)
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)
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)
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)
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)
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
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)
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
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
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)
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)
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)
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))
def publishTraverse(self, request, name): if name.startswith('++'): return DefaultPublishTraverse(self, request).publishTraverse( request, name) return ShippingMethodForm(self.context, request, name)
def __init__(self, context, request): self.default = DefaultPublishTraverse(context, request) self.context = context self.request = request