Use an inner JSONRequest class with renderJSON

Once nevow is removed from web/common.py, we can simplify
renderJSON(), like so:

  def renderJSON():
      req = Request()
      req.args = {"t": ["json"]}
      req.fields = {}
      return resource.render(req)

But for now we have to live with an inner class that implements the
nevow.inevow.IRequest interface.
This commit is contained in:
Sajith Sasidharan 2020-04-21 10:29:18 -04:00
parent 201c08dbe5
commit b3feaae644

View File

@ -11,7 +11,8 @@ from twisted.web.template import flattenString
# web/common.py, we can use `twisted.web.iweb.IRequest` here.
from nevow.inevow import IRequest
from twisted.web.test.requesthelper import DummyRequest
from twisted.web.server import Request
from twisted.web.test.requesthelper import DummyChannel
from zope.interface import implementer
from foolscap.api import fireEventually
@ -2989,24 +2990,20 @@ def renderDeferred(ss):
elem = StorageStatusElement(ss._storage, ss._nickname)
return flattenString(None, elem)
@implementer(IRequest)
class JSONRequest(DummyRequest):
"""
A Request with t=json argument added to it.
This is useful to invoke a Resouce.render_JSON() method.
"""
def __init__(self, **kwargs):
DummyRequest.__init__(self, b"/", **kwargs)
self.args = {"t": ["json"]}
self.fields = {}
def renderJSON(resource):
"""Exercise resouce.render_JSON()
"""Render a JSON from the given resource."""
@implementer(IRequest)
class JSONRequest(Request):
"""
A Request with t=json argument added to it. This is useful to
invoke a Resouce.render_JSON() method.
"""
def __init__(self):
Request.__init__(self, DummyChannel())
self.args = {"t": ["json"]}
self.fields = {}
:param _MultiFormatResource resouce: A `twisted.web.resouce.Resource`
that contains a render_JSON() method.
"""
return resource.render(JSONRequest())
class MyBucketCountingCrawler(BucketCountingCrawler):