PageRenderTime 40ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/web/test_gzip.py

https://bitbucket.org/prologic/circuits/
Python | 76 lines | 46 code | 29 blank | 1 comment | 0 complexity | 5418ada8f0e0b3f90d505d29b1447784 MD5 | raw file
  1. #!/usr/bin/env python
  2. from pytest import fixture
  3. from os import path
  4. from io import BytesIO
  5. from circuits.web import Controller
  6. from circuits.web.tools import gzip
  7. from circuits import handler, Component
  8. from .conftest import DOCROOT
  9. from .helpers import build_opener, Request
  10. class Gzip(Component):
  11. channel = "web"
  12. @handler("response", priority=1.0)
  13. def _on_response(self, event, *args, **kwargs):
  14. event[0] = gzip(event[0])
  15. class Root(Controller):
  16. def index(self):
  17. return "Hello World!"
  18. @fixture(scope="module")
  19. def gziptool(request, webapp):
  20. gziptool = Gzip().register(webapp)
  21. def finalizer():
  22. gziptool.unregister()
  23. request.addfinalizer(finalizer)
  24. return gziptool
  25. def decompress(body):
  26. import gzip
  27. zbuf = BytesIO()
  28. zbuf.write(body)
  29. zbuf.seek(0)
  30. zfile = gzip.GzipFile(mode='rb', fileobj=zbuf)
  31. data = zfile.read()
  32. zfile.close()
  33. return data
  34. def test1(webapp, gziptool):
  35. request = Request(webapp.server.http.base)
  36. request.add_header("Accept-Encoding", "gzip")
  37. opener = build_opener()
  38. f = opener.open(request)
  39. s = decompress(f.read())
  40. assert s == b"Hello World!"
  41. def test2(webapp, gziptool):
  42. request = Request("%s/static/largefile.txt" % webapp.server.http.base)
  43. request.add_header("Accept-Encoding", "gzip")
  44. opener = build_opener()
  45. f = opener.open(request)
  46. s = decompress(f.read())
  47. assert s == open(path.join(DOCROOT, "largefile.txt"), "rb").read()