示例#1
0
 def render(self):
     """
     Renders the requested resource returned from the self.process() method.
     """
     # traverse the resource tree
     child = getChildForRequest(self.env.tree, self)
     # check result and either render direct or in thread
     if IFileSystemResource.providedBy(child):
         # render direct
         return child.render(self)
     elif IStatical.providedBy(child):
         # render direct
         return child.render(self)
     elif IScriptResource.providedBy(child):
         msg = "Script resources may not be called via SFTP."
         raise ForbiddenError(msg)
     elif IRESTResource.providedBy(child):
         return child.render(self)
     elif IResource.providedBy(child):
         return child.render(self)
     msg = "I don't know how to handle this resource type %s"
     raise InternalServerError(msg % type(child))
示例#2
0
     self.authenticate()
     return
 # check result and either render direct or in thread
 if IFileSystemResource.providedBy(result):
     # file system resources render direct
     data = result.render(self)
     if result.folderish:
         # check for default page
         for id in self.default_pages:
             if id in data and not data[id].folderish:
                 data = data[id].render(self)
                 return self._renderFileResource(data)
         return self._renderFolder(data)
     else:
         return self._renderFileResource(data)
 elif IStatical.providedBy(result):
     # static resources render direct
     data = result.render(self)
     if isinstance(data, basestring):
         return self._renderResource(data)
     elif isinstance(data, dict):
         return self._renderFolder(data)
 elif IRESTResource.providedBy(result):
     # REST resource render in thread
     d = threads.deferToThread(result.render, self)
     d.addCallback(self._cbSuccess)
     d.addErrback(self._cbFailed)
     return server.NOT_DONE_YET
 elif IResource.providedBy(result):
     # all other resources render in thread
     d = threads.deferToThread(result.render, self)