| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- from __future__ import absolute_import
- import re
- import sys
- PY2 = sys.version_info[0] == 2
- if not PY2:
- text_type = str
- string_types = (str,)
- else:
- text_type = unicode
- string_types = (str, unicode)
- from datetime import datetime
- KEYWORDS_UP = ('ssl', 'uri', 'url', 'uuid', 'eta')
- KEYWORDS_DOWN = ('args', 'kwargs')
- UUID_REGEX = re.compile(r'^[\w]{8}(-[\w]{4}){3}-[\w]{12}$')
- def format_time(time):
- dt = datetime.fromtimestamp(time)
- return '%s.%s' % (
- dt.strftime("%Y-%m-%d %H:%M:%S"), dt.microsecond)
- def humanize(obj, type=None, length=None):
- if obj is None:
- obj = ''
- elif type == 'time':
- obj = format_time(float(obj)) if obj else '-'
- elif isinstance(obj, string_types) and not re.match(UUID_REGEX, obj):
- obj = obj.replace('-', ' ').replace('_', ' ')
- obj = re.sub('|'.join(KEYWORDS_UP),
- lambda m: m.group(0).upper(), obj)
- if obj and obj not in KEYWORDS_DOWN:
- obj = obj[0].upper() + obj[1:]
- elif isinstance(obj, list):
- if all(isinstance(x, (int, float) + string_types) for x in obj):
- obj = ', '.join(map(str, obj))
- if length is not None and len(obj) > length:
- obj = obj[:length - 4] + ' ...'
- return obj
|