def __bobo_traverse__(self, REQUEST, name): """Hook for Zope 2 traversal This method is called by Zope 2's ZPublisher upon traversal. It allows us to trick it into faking the Zope 3 traversal system by using an ITraverser adapter. """ if not IBrowserRequest.providedBy(REQUEST): # Try to get the REQUEST by acquisition REQUEST = getattr(self, 'REQUEST', None) if not IBrowserRequest.providedBy(REQUEST): REQUEST = FakeRequest() # set the default skin on the request if it doesn't have any # layers set on it yet if queryType(REQUEST, ILayer) is None: setDefaultSkin(REQUEST) # con Zope 3 into using Zope 2's checkPermission newInteraction() try: return ITraverser(self).traverse(path=[name], request=REQUEST).__of__(self) except (ComponentLookupError, LookupError, AttributeError, KeyError, NotFound): pass try: return getattr(self, name) except AttributeError: pass try: return self[name] except (AttributeError, KeyError): pass return self.__fallback_traverse__(REQUEST, name)
def __call__(self): context = self.context request = self.request response = request.response r = [] url = zapi.absoluteURL(context, request) r.append('url:%s' % url) adapted = IReadFile(context) if hasattr(adapted, 'contentType'): # Although IReadFile declares contentType, # the default adapter for File doesn't seem # to provide it. r.append('content_type:%s' % adapted.contentType) # There's no such thing as a meta_type # in Zope3, so we try to get as far as we can # using IContentType, which is a marker interface # Had to use removeSecurityProxy because # I was getting unauthorized on __iro__ meta_type = queryType(removeSecurityProxy(context), IContentType) if meta_type: r.append('meta_type:%s' % meta_type.__name__) auth = request._auth if auth is not None: if auth.endswith('\n'): auth = auth[:-1] r.append('auth:%s' % auth) r.append('cookie:%s' % request._environ.get('HTTP_COOKIE', '')) # TODO: Once we have lock, add the lock token here r.append('') response.setHeader('Pragma', 'no-cache') r.append(adapted.read()) response.setHeader('Content-Type', 'application/x-zope-edit') return '\n'.join(r)
def __bobo_traverse__(self, REQUEST, name): """Hook for Zope 2 traversal This method is called by Zope 2's ZPublisher upon traversal. It allows us to trick it into faking the Zope 3 traversal system by using an ITraverser adapter. """ if not IBrowserRequest.providedBy(REQUEST): # Try to get the REQUEST by acquisition REQUEST = getattr(self, 'REQUEST', None) if not IBrowserRequest.providedBy(REQUEST): REQUEST = FakeRequest() # set the default skin on the request if it doesn't have any # layers set on it yet if queryType(REQUEST, ILayer) is None: setDefaultSkin(REQUEST) # con Zope 3 into using Zope 2's checkPermission newInteraction() try: return ITraverser(self).traverse( path=[name], request=REQUEST).__of__(self) except (ComponentLookupError, LookupError, AttributeError, KeyError, NotFound): pass try: return self.__fallback_traverse__(REQUEST, name) except NotImplementedError: pass # TODO: This should at least make an attempt to deal with # potential WebDAV issues, in particular we should not perform # acquisition for webdav requests. See BaseRequest.traverse for # details. try: return getattr(self, name) except AttributeError: pass try: return self[name] except (AttributeError, KeyError): pass raise AttributeError, name
def queryContentType(object): """Returns the interface implemented by object which implements `IContentType`.""" return queryType(object, IContentType)