Skip to content

Instantly share code, notes, and snippets.

@Parth-Vader
Last active August 25, 2017 16:18
Show Gist options
  • Save Parth-Vader/8707f42940a5f354963462853e05d9b4 to your computer and use it in GitHub Desktop.
Save Parth-Vader/8707f42940a5f354963462853e05d9b4 to your computer and use it in GitHub Desktop.
trying to add delay to server file
from twisted.web.server import Site, NOT_DONE_YET
from twisted.web.resource import Resource
from twisted.internet import reactor, endpoints
from twisted.internet.task import deferLater
def getarg(request, name, default=None, type=None):
if name in request.args:
value = request.args[name][0]
if type is not None:
value = type(value)
return value
else:
return default
class Home(Resource):
isLeaf = True
def __init__(self):
Resource.__init__(self)
#self.putChild(b"status", Status())
#self.putChild(b"follow", Follow())
#self.putChild(b"delay", Delay())
def deferRequest(self, request, delay, f, *a, **kw):
def _cancelrequest(_):
# silence CancelledError
d.addErrback(lambda _: None)
d.cancel()
d = deferLater(reactor, delay, f, *a, **kw)
request.notifyFinish().addErrback(_cancelrequest)
return d
def getChild(self, name, request):
return self
def render_GET(self, request):
path = "/var/www/html/books.toscrape.com/"
filepath = '/'.join(request.postpath)
fname = path + filepath
'''
if "delay" in fname:
n = getarg(request, b"n", 1, type=float)
b = getarg(request, b"b", 1, type=int)
if b:
# send headers now and delay body
request.write('')
self.deferRequest(request, n, self._delayedRender, request, n)
return NOT_DONE_YET
'''
n = 1
self.deferRequest(request, n, self._delayedRender, request, n)
return NOT_DONE_YET
with open(fname) as f:
s = f.read()
return s
def _delayedRender(self, request, n):
request.write(to_bytes("Response delayed for %0.3f seconds\n" % n))
print "hi"
request.finish()
resource = Home()
factory = Site(resource)
endpoint = endpoints.TCP4ServerEndpoint(reactor, 8880, interface='0.0.0.0')
endpoint.listen(factory)
reactor.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment