Esempio n. 1
0
 def display(self, request):
     tm = []
     flip = 0
     namespace = {}
     self.prePresent(request)
     self.addVariables(namespace, request)
     # This variable may not be obscured...
     namespace['request'] = request
     namespace['self'] = self
     for elem in self.tmpl:
         flip = not flip
         if flip:
             if elem:
                 tm.append(elem)
         else:
             try:
                 x = eval(elem, namespace, namespace)
             except:
                 log.deferr()
                 tm.append(webutil.formatFailure(failure.Failure()))
             else:
                 if isinstance(x, types.ListType):
                     tm.extend(x)
                 elif isinstance(x, Widget):
                     val = x.display(request)
                     if not isinstance(val, types.ListType):
                         raise Exception("%s.display did not return a list, it returned %s!" % (x.__class__, repr(val)))
                     tm.extend(val)
                 else:
                     # Only two allowed types here should be deferred and
                     # string.
                     tm.append(x)
     return tm
Esempio n. 2
0
 def keepRendering(self):
     while self.pauseList:
         pl = self.pauseList
         self.pauseList = []
         for deferred in pl:
             deferred.unpause()
         return
     if self.needsHeaders:
         return
     assert self.lst is not None, "This shouldn't happen."
     while 1:
         item = self.lst[0]
         if self.beforeBody and FORGET_IT in self.lst:
             self.forgotten = 1
             return
         if isinstance(item, types.StringType):
             self.beforeBody = 0
             self.request.write(item)
         elif type(item) is types.TupleType and len(item) > 0:
             if isinstance(item[0], self.Sentinel):
                 return
         elif isinstance(item, failure.Failure):
             self.request.write(webutil.formatFailure(item))
         else:
             self.beforeBody = 0
             unknown = html.PRE(repr(item))
             self.request.write("RENDERING UNKNOWN: %s" % unknown)
         del self.lst[0]
         if len(self.lst) == 0:
             self.lst = None
             self.request.finish()
             return
Esempio n. 3
0
 def display(self, request):
     """Produce a list containing a single string.
     """
     l = []
     try:
         result = self.stream(l.append, request)
         if result is not None:
             return result
         return l
     except:
         return [webutil.formatFailure(failure.Failure())]
Esempio n. 4
0
    def keepRendering(self):
        while self.pauseList:
            pl = self.pauseList
            self.pauseList = []
            for deferred in pl:
                deferred.unpause()
            return

        if self.needsHeaders:
            # short circuit actual rendering process until we're sure no
            # more deferreds need to set headers...
            return

        assert self.lst is not None, "This shouldn't happen."
        while 1:
            item = self.lst[0]
            if self.beforeBody and FORGET_IT in self.lst:
                # If I haven't moved yet, and the widget wants to take
                # over the page, let it do so!
                self.forgotten = 1
                return

            if isinstance(item, types.StringType):
                self.beforeBody = 0
                self.request.write(item)
            elif type(item) is types.TupleType and len(item) > 0:
                if isinstance(item[0], self.Sentinel):
                    return
            elif isinstance(item, failure.Failure):
                self.request.write(webutil.formatFailure(item))
            else:
                self.beforeBody = 0
                unknown = html.PRE(repr(item))
                self.request.write("RENDERING UNKNOWN: %s" % unknown)

            del self.lst[0]
            if len(self.lst) == 0:
                self.lst = None
                self.request.finish()
                return