strings.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from __future__ import absolute_import
  2. # Copyright (c) 2010-2019 openpyxl
  3. from datetime import datetime
  4. from math import isnan, isinf
  5. import sys
  6. VER = sys.version_info
  7. from .numbers import NUMERIC_TYPES
  8. if VER[0] >= 3:
  9. basestring = str
  10. unicode = str
  11. from io import BufferedReader
  12. file = BufferedReader
  13. from io import BufferedRandom
  14. tempfile = BufferedRandom
  15. bytes = bytes
  16. else:
  17. basestring = basestring
  18. unicode = unicode
  19. file = file
  20. tempfile = file
  21. bytes = str
  22. def safe_string(value):
  23. """Safely and consistently format numeric values"""
  24. if isinstance(value, NUMERIC_TYPES):
  25. if isnan(value) or isinf(value):
  26. value = ""
  27. else:
  28. value = "%.16g" % value
  29. elif value is None:
  30. value = "none"
  31. elif isinstance(value, datetime):
  32. value = value.isoformat()
  33. elif not isinstance(value, basestring):
  34. value = str(value)
  35. return value
  36. def safe_repr(value):
  37. """
  38. Safely convert unicode to ASCII for Python 2
  39. """
  40. if VER[0] == 3:
  41. return value
  42. return value.encode("ascii", 'backslashreplace')