예제 #1
0
def render(resource, query_args):
    """
    Render (in the manner of the Nevow appserver) a Nevow ``Page`` or a
    Twisted ``Resource`` against a request with the given query arguments .

    :param resource: The page or resource to render.

    :param query_args: The query arguments to put into the request being
        rendered.  A mapping from ``bytes`` to ``list`` of ``bytes``.

    :return Deferred: A Deferred that fires with the rendered response body as
        ``bytes``.
    """
    ctx = WebContext(tag=resource)
    req = FakeRequest(args=query_args)
    ctx.remember(DefaultExceptionHandler(), ICanHandleException)
    ctx.remember(req, IRequest)
    ctx.remember(None, IData)

    def maybe_concat(res):
        if isinstance(res, bytes):
            return req.v + res
        return req.v

    resource = INevowResource(resource)
    d = maybeDeferred(resource.renderHTTP, ctx)
    d.addErrback(processingFailed, req, ctx)
    d.addCallback(maybe_concat)
    return d
예제 #2
0
 def setUp(self):
     """
     Create a L{Store}, L{WebSite} and necessary request-related objects to
     test L{LoginPage}.
     """
     self.siteStore = Store(filesdir=self.mktemp())
     Mantissa().installSite(self.siteStore, self.domain, u"", False)
     self.site = self.siteStore.findUnique(SiteConfiguration)
     installOn(
         TCPPort(store=self.siteStore, factory=self.site, portNumber=80),
         self.siteStore)
     self.context = WebContext()
     self.request = FakeRequest()
     self.context.remember(self.request)