mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-01 00:45:52 +00:00
combine common_web and common_tweb now that there is no nevow renderer
This commit is contained in:
parent
0f574dc019
commit
612cbb583a
@ -1,70 +0,0 @@
|
||||
from twisted.python.reflect import (
|
||||
fullyQualifiedName,
|
||||
)
|
||||
from twisted.internet.defer import (
|
||||
succeed,
|
||||
)
|
||||
from twisted.web.test.requesthelper import (
|
||||
DummyChannel,
|
||||
)
|
||||
from twisted.web.error import (
|
||||
UnsupportedMethod,
|
||||
)
|
||||
from twisted.web.http import (
|
||||
NOT_ALLOWED,
|
||||
)
|
||||
from twisted.web.server import (
|
||||
NOT_DONE_YET,
|
||||
)
|
||||
|
||||
from ..webish import (
|
||||
TahoeLAFSRequest,
|
||||
)
|
||||
|
||||
|
||||
def render(resource, query_args):
|
||||
"""
|
||||
Render (in the manner of the Twisted Web Site) 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``.
|
||||
"""
|
||||
channel = DummyChannel()
|
||||
request = TahoeLAFSRequest(channel)
|
||||
request.method = b"GET"
|
||||
request.args = query_args
|
||||
request.prepath = [b""]
|
||||
request.postpath = []
|
||||
try:
|
||||
result = resource.render(request)
|
||||
except UnsupportedMethod:
|
||||
request.setResponseCode(NOT_ALLOWED)
|
||||
result = b""
|
||||
|
||||
if isinstance(result, bytes):
|
||||
request.write(result)
|
||||
done = succeed(None)
|
||||
elif result == NOT_DONE_YET:
|
||||
if request.finished:
|
||||
done = succeed(None)
|
||||
else:
|
||||
done = request.notifyFinish()
|
||||
else:
|
||||
raise ValueError(
|
||||
"{!r} returned {!r}, required bytes or NOT_DONE_YET.".format(
|
||||
fullyQualifiedName(resource.render),
|
||||
result,
|
||||
),
|
||||
)
|
||||
def get_body(ignored):
|
||||
complete_response = channel.transport.written.getvalue()
|
||||
header, body = complete_response.split(b"\r\n\r\n", 1)
|
||||
return body
|
||||
done.addCallback(get_body)
|
||||
return done
|
@ -4,15 +4,36 @@ __all__ = [
|
||||
"render",
|
||||
]
|
||||
|
||||
import treq
|
||||
from twisted.internet.defer import (
|
||||
inlineCallbacks,
|
||||
returnValue,
|
||||
)
|
||||
from twisted.web.error import Error
|
||||
from twisted.web.error import (
|
||||
Error,
|
||||
)
|
||||
from twisted.python.reflect import (
|
||||
fullyQualifiedName,
|
||||
)
|
||||
from twisted.internet.defer import (
|
||||
succeed,
|
||||
)
|
||||
from twisted.web.test.requesthelper import (
|
||||
DummyChannel,
|
||||
)
|
||||
from twisted.web.error import (
|
||||
UnsupportedMethod,
|
||||
)
|
||||
from twisted.web.http import (
|
||||
NOT_ALLOWED,
|
||||
)
|
||||
from twisted.web.server import (
|
||||
NOT_DONE_YET,
|
||||
)
|
||||
|
||||
from .common_tweb import (
|
||||
render,
|
||||
import treq
|
||||
|
||||
from ..webish import (
|
||||
TahoeLAFSRequest,
|
||||
)
|
||||
|
||||
@inlineCallbacks
|
||||
@ -24,3 +45,51 @@ def do_http(method, url, **kwargs):
|
||||
if 400 <= response.code < 600:
|
||||
raise Error(response.code, response=body)
|
||||
returnValue(body)
|
||||
|
||||
|
||||
def render(resource, query_args):
|
||||
"""
|
||||
Render (in the manner of the Twisted Web Site) 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``.
|
||||
"""
|
||||
channel = DummyChannel()
|
||||
request = TahoeLAFSRequest(channel)
|
||||
request.method = b"GET"
|
||||
request.args = query_args
|
||||
request.prepath = [b""]
|
||||
request.postpath = []
|
||||
try:
|
||||
result = resource.render(request)
|
||||
except UnsupportedMethod:
|
||||
request.setResponseCode(NOT_ALLOWED)
|
||||
result = b""
|
||||
|
||||
if isinstance(result, bytes):
|
||||
request.write(result)
|
||||
done = succeed(None)
|
||||
elif result == NOT_DONE_YET:
|
||||
if request.finished:
|
||||
done = succeed(None)
|
||||
else:
|
||||
done = request.notifyFinish()
|
||||
else:
|
||||
raise ValueError(
|
||||
"{!r} returned {!r}, required bytes or NOT_DONE_YET.".format(
|
||||
fullyQualifiedName(resource.render),
|
||||
result,
|
||||
),
|
||||
)
|
||||
def get_body(ignored):
|
||||
complete_response = channel.transport.written.getvalue()
|
||||
header, body = complete_response.split(b"\r\n\r\n", 1)
|
||||
return body
|
||||
done.addCallback(get_body)
|
||||
return done
|
||||
|
Loading…
x
Reference in New Issue
Block a user