"""
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 = {
bytes : ( _VALID_HEADER_NAME_RE_BYTE , _VALID_HEADER_VALUE_RE_BYTE ) ,
str : ( _VALID_HEADER_NAME_RE_STR , _VALID_HEADER_VALUE_RE_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