Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

compression.py 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. """
  2. kombu.compression
  3. =================
  4. Compression utilities.
  5. """
  6. from __future__ import absolute_import
  7. from kombu.utils.encoding import ensure_bytes
  8. import zlib
  9. _aliases = {}
  10. _encoders = {}
  11. _decoders = {}
  12. __all__ = ['register', 'encoders', 'get_encoder',
  13. 'get_decoder', 'compress', 'decompress']
  14. def register(encoder, decoder, content_type, aliases=[]):
  15. """Register new compression method.
  16. :param encoder: Function used to compress text.
  17. :param decoder: Function used to decompress previously compressed text.
  18. :param content_type: The mime type this compression method identifies as.
  19. :param aliases: A list of names to associate with this compression method.
  20. """
  21. _encoders[content_type] = encoder
  22. _decoders[content_type] = decoder
  23. _aliases.update((alias, content_type) for alias in aliases)
  24. def encoders():
  25. """Return a list of available compression methods."""
  26. return list(_encoders)
  27. def get_encoder(t):
  28. """Get encoder by alias name."""
  29. t = _aliases.get(t, t)
  30. return _encoders[t], t
  31. def get_decoder(t):
  32. """Get decoder by alias name."""
  33. return _decoders[_aliases.get(t, t)]
  34. def compress(body, content_type):
  35. """Compress text.
  36. :param body: The text to compress.
  37. :param content_type: mime-type of compression method to use.
  38. """
  39. encoder, content_type = get_encoder(content_type)
  40. return encoder(ensure_bytes(body)), content_type
  41. def decompress(body, content_type):
  42. """Decompress compressed text.
  43. :param body: Previously compressed text to uncompress.
  44. :param content_type: mime-type of compression method used.
  45. """
  46. return get_decoder(content_type)(body)
  47. register(zlib.compress,
  48. zlib.decompress,
  49. 'application/x-gzip', aliases=['gzip', 'zlib'])
  50. try:
  51. import bz2
  52. except ImportError:
  53. pass # Jython?
  54. else:
  55. register(bz2.compress,
  56. bz2.decompress,
  57. 'application/x-bz2', aliases=['bzip2', 'bzip'])