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)
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): 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()) return resource.render(JSONRequest())
class MyBucketCountingCrawler(BucketCountingCrawler): class MyBucketCountingCrawler(BucketCountingCrawler):