def normalize_str(value): import re is_bytes = isinstance(value, bytes) regex, sep = r'(\S+)\s*', ' ' if is_bytes: regex, sep = bytes(regex), bytes(sep) regex = re.compile(regex) matches = regex.findall(value) names = (m.capitalize() if len(m) >= 3 else m.lower() for m in matches) return sep.join(names)
def safe_encode(u, encoding=None): '''Similar to unicode `encode` method returning bytes. Encodes `u` using the given `encoding`, or determining one from the system. Returning type is always `bytes`; but in python 2.x is also `str`. .. versionadded:: 1.1.3 ''' # TODO: This is not nice for Python 3, bytes is not valid string any more # See :func:`json.encoder.py_encode_basestring_ascii` of Python 2.x from xoutil.eight import string_types, text_type if isinstance(u, bytes): return u else: encoding = force_encoding(encoding) try: try: if isinstance(u, string_types): # In Python 2.x bytes does not allows an encoding argument. return bytes(u) else: return text_type(u).encode(encoding, 'replace') except: return text_type(u).encode(encoding, 'replace') except LookupError: return safe_encode(u)