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.

46 lines
938 B

4 years ago
  1. import base64
  2. import io
  3. import sys
  4. if sys.version_info[0] < 3:
  5. text_type = unicode # noqa: F821
  6. StringIO = io.BytesIO
  7. def native(s, encoding='utf-8'):
  8. if isinstance(s, unicode): # noqa: F821
  9. return s.encode(encoding)
  10. return s
  11. else:
  12. text_type = str
  13. StringIO = io.StringIO
  14. def native(s, encoding='utf-8'):
  15. if isinstance(s, bytes):
  16. return s.decode(encoding)
  17. return s
  18. def urlsafe_b64encode(data):
  19. """urlsafe_b64encode without padding"""
  20. return base64.urlsafe_b64encode(data).rstrip(b'=')
  21. def urlsafe_b64decode(data):
  22. """urlsafe_b64decode without padding"""
  23. pad = b'=' * (4 - (len(data) & 3))
  24. return base64.urlsafe_b64decode(data + pad)
  25. def as_unicode(s):
  26. if isinstance(s, bytes):
  27. return s.decode('utf-8')
  28. return s
  29. def as_bytes(s):
  30. if isinstance(s, text_type):
  31. return s.encode('utf-8')
  32. return s