| """ | |
| requests._internal_utils | |
| ~~~~~~~~~~~~~~ | |
| Provides utility functions that are consumed internally by Requests | |
| which depend on extremely few external helpers (such as compat) | |
| """ | |
| import re | |
| from .compat import builtin_str | |
| _VALID_HEADER_NAME_RE_BYTE = re.compile(rb"^[^:\s][^:\r\n]*$") | |
| _VALID_HEADER_NAME_RE_STR = re.compile(r"^[^:\s][^:\r\n]*$") | |
| _VALID_HEADER_VALUE_RE_BYTE = re.compile(rb"^\S[^\r\n]*$|^$") | |
| _VALID_HEADER_VALUE_RE_STR = re.compile(r"^\S[^\r\n]*$|^$") | |
| _HEADER_VALIDATORS_STR = (_VALID_HEADER_NAME_RE_STR, _VALID_HEADER_VALUE_RE_STR) | |
| _HEADER_VALIDATORS_BYTE = (_VALID_HEADER_NAME_RE_BYTE, _VALID_HEADER_VALUE_RE_BYTE) | |
| HEADER_VALIDATORS = { | |
| bytes: _HEADER_VALIDATORS_BYTE, | |
| str: _HEADER_VALIDATORS_STR, | |
| } | |
| def to_native_string(string, encoding="ascii"): | |
| """Given a string object, regardless of type, returns a representation of | |
| that string in the native string type, encoding and decoding where | |
| necessary. This assumes ASCII unless told otherwise. | |
| """ | |
| if isinstance(string, builtin_str): | |
| out = string | |
| else: | |
| out = string.decode(encoding) | |
| return out | |
| def unicode_is_ascii(u_string): | |
| """Determine if unicode string only contains ASCII characters. | |
| :param str u_string: unicode string to check. Must be unicode | |
| and not Python 2 `str`. | |
| :rtype: bool | |
| """ | |
| assert isinstance(u_string, str) | |
| try: | |
| u_string.encode("ascii") | |
| return True | |
| except UnicodeEncodeError: | |
| return False | |