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