text.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf-8 -*-
  2. """
  3. celery.utils.text
  4. ~~~~~~~~~~~~~~~~~
  5. Text formatting utilities
  6. """
  7. from __future__ import absolute_import
  8. from textwrap import fill
  9. from pprint import pformat
  10. __all__ = ['dedent_initial', 'dedent', 'fill_paragraphs', 'join',
  11. 'ensure_2lines', 'abbr', 'abbrtask', 'indent', 'truncate',
  12. 'pluralize', 'pretty']
  13. def dedent_initial(s, n=4):
  14. return s[n:] if s[:n] == ' ' * n else s
  15. def dedent(s, n=4, sep='\n'):
  16. return sep.join(dedent_initial(l) for l in s.splitlines())
  17. def fill_paragraphs(s, width, sep='\n'):
  18. return sep.join(fill(p, width) for p in s.split(sep))
  19. def join(l, sep='\n'):
  20. return sep.join(v for v in l if v)
  21. def ensure_2lines(s, sep='\n'):
  22. if len(s.splitlines()) <= 2:
  23. return s + sep
  24. return s
  25. def abbr(S, max, ellipsis='...'):
  26. if S is None:
  27. return '???'
  28. if len(S) > max:
  29. return ellipsis and (S[:max - len(ellipsis)] + ellipsis) or S[:max]
  30. return S
  31. def abbrtask(S, max):
  32. if S is None:
  33. return '???'
  34. if len(S) > max:
  35. module, _, cls = S.rpartition('.')
  36. module = abbr(module, max - len(cls) - 3, False)
  37. return module + '[.]' + cls
  38. return S
  39. def indent(t, indent=0, sep='\n'):
  40. """Indent text."""
  41. return sep.join(' ' * indent + p for p in t.split(sep))
  42. def truncate(text, maxlen=128, suffix='...'):
  43. """Truncates text to a maximum number of characters."""
  44. if len(text) >= maxlen:
  45. return text[:maxlen].rsplit(' ', 1)[0] + suffix
  46. return text
  47. def pluralize(n, text, suffix='s'):
  48. if n > 1:
  49. return text + suffix
  50. return text
  51. def pretty(value, width=80, nl_width=80, sep='\n', **kw):
  52. if isinstance(value, dict):
  53. return '{{{0} {1}'.format(sep, pformat(value, 4, nl_width)[1:])
  54. elif isinstance(value, tuple):
  55. return '{0}{1}{2}'.format(
  56. sep, ' ' * 4, pformat(value, width=nl_width, **kw),
  57. )
  58. else:
  59. return pformat(value, width=width, **kw)