You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							206 lines
						
					
					
						
							6.2 KiB
						
					
					
				
			
		
		
	
	
							206 lines
						
					
					
						
							6.2 KiB
						
					
					
				# flake8: noqa
 | 
						|
# This whole file is full of lint errors
 | 
						|
import codecs
 | 
						|
import sys
 | 
						|
import operator
 | 
						|
import functools
 | 
						|
import warnings
 | 
						|
 | 
						|
try:
 | 
						|
    import builtins
 | 
						|
except ImportError:
 | 
						|
    import __builtin__ as builtins
 | 
						|
 | 
						|
 | 
						|
PY2 = sys.version_info[0] == 2
 | 
						|
WIN = sys.platform.startswith('win')
 | 
						|
 | 
						|
_identity = lambda x: x
 | 
						|
 | 
						|
if PY2:
 | 
						|
    unichr = unichr
 | 
						|
    text_type = unicode
 | 
						|
    string_types = (str, unicode)
 | 
						|
    integer_types = (int, long)
 | 
						|
 | 
						|
    iterkeys = lambda d, *args, **kwargs: d.iterkeys(*args, **kwargs)
 | 
						|
    itervalues = lambda d, *args, **kwargs: d.itervalues(*args, **kwargs)
 | 
						|
    iteritems = lambda d, *args, **kwargs: d.iteritems(*args, **kwargs)
 | 
						|
 | 
						|
    iterlists = lambda d, *args, **kwargs: d.iterlists(*args, **kwargs)
 | 
						|
    iterlistvalues = lambda d, *args, **kwargs: d.iterlistvalues(*args, **kwargs)
 | 
						|
 | 
						|
    int_to_byte = chr
 | 
						|
    iter_bytes = iter
 | 
						|
 | 
						|
    exec('def reraise(tp, value, tb=None):\n raise tp, value, tb')
 | 
						|
 | 
						|
    def fix_tuple_repr(obj):
 | 
						|
        def __repr__(self):
 | 
						|
            cls = self.__class__
 | 
						|
            return '%s(%s)' % (cls.__name__, ', '.join(
 | 
						|
                '%s=%r' % (field, self[index])
 | 
						|
                for index, field in enumerate(cls._fields)
 | 
						|
            ))
 | 
						|
        obj.__repr__ = __repr__
 | 
						|
        return obj
 | 
						|
 | 
						|
    def implements_iterator(cls):
 | 
						|
        cls.next = cls.__next__
 | 
						|
        del cls.__next__
 | 
						|
        return cls
 | 
						|
 | 
						|
    def implements_to_string(cls):
 | 
						|
        cls.__unicode__ = cls.__str__
 | 
						|
        cls.__str__ = lambda x: x.__unicode__().encode('utf-8')
 | 
						|
        return cls
 | 
						|
 | 
						|
    def native_string_result(func):
 | 
						|
        def wrapper(*args, **kwargs):
 | 
						|
            return func(*args, **kwargs).encode('utf-8')
 | 
						|
        return functools.update_wrapper(wrapper, func)
 | 
						|
 | 
						|
    def implements_bool(cls):
 | 
						|
        cls.__nonzero__ = cls.__bool__
 | 
						|
        del cls.__bool__
 | 
						|
        return cls
 | 
						|
 | 
						|
    from itertools import imap, izip, ifilter
 | 
						|
    range_type = xrange
 | 
						|
 | 
						|
    from StringIO import StringIO
 | 
						|
    from cStringIO import StringIO as BytesIO
 | 
						|
    NativeStringIO = BytesIO
 | 
						|
 | 
						|
    def make_literal_wrapper(reference):
 | 
						|
        return _identity
 | 
						|
 | 
						|
    def normalize_string_tuple(tup):
 | 
						|
        """Normalizes a string tuple to a common type. Following Python 2
 | 
						|
        rules, upgrades to unicode are implicit.
 | 
						|
        """
 | 
						|
        if any(isinstance(x, text_type) for x in tup):
 | 
						|
            return tuple(to_unicode(x) for x in tup)
 | 
						|
        return tup
 | 
						|
 | 
						|
    def try_coerce_native(s):
 | 
						|
        """Try to coerce a unicode string to native if possible. Otherwise,
 | 
						|
        leave it as unicode.
 | 
						|
        """
 | 
						|
        try:
 | 
						|
            return to_native(s)
 | 
						|
        except UnicodeError:
 | 
						|
            return s
 | 
						|
 | 
						|
    wsgi_get_bytes = _identity
 | 
						|
 | 
						|
    def wsgi_decoding_dance(s, charset='utf-8', errors='replace'):
 | 
						|
        return s.decode(charset, errors)
 | 
						|
 | 
						|
    def wsgi_encoding_dance(s, charset='utf-8', errors='replace'):
 | 
						|
        if isinstance(s, bytes):
 | 
						|
            return s
 | 
						|
        return s.encode(charset, errors)
 | 
						|
 | 
						|
    def to_bytes(x, charset=sys.getdefaultencoding(), errors='strict'):
 | 
						|
        if x is None:
 | 
						|
            return None
 | 
						|
        if isinstance(x, (bytes, bytearray, buffer)):
 | 
						|
            return bytes(x)
 | 
						|
        if isinstance(x, unicode):
 | 
						|
            return x.encode(charset, errors)
 | 
						|
        raise TypeError('Expected bytes')
 | 
						|
 | 
						|
    def to_native(x, charset=sys.getdefaultencoding(), errors='strict'):
 | 
						|
        if x is None or isinstance(x, str):
 | 
						|
            return x
 | 
						|
        return x.encode(charset, errors)
 | 
						|
 | 
						|
else:
 | 
						|
    unichr = chr
 | 
						|
    text_type = str
 | 
						|
    string_types = (str, )
 | 
						|
    integer_types = (int, )
 | 
						|
 | 
						|
    iterkeys = lambda d, *args, **kwargs: iter(d.keys(*args, **kwargs))
 | 
						|
    itervalues = lambda d, *args, **kwargs: iter(d.values(*args, **kwargs))
 | 
						|
    iteritems = lambda d, *args, **kwargs: iter(d.items(*args, **kwargs))
 | 
						|
 | 
						|
    iterlists = lambda d, *args, **kwargs: iter(d.lists(*args, **kwargs))
 | 
						|
    iterlistvalues = lambda d, *args, **kwargs: iter(d.listvalues(*args, **kwargs))
 | 
						|
 | 
						|
    int_to_byte = operator.methodcaller('to_bytes', 1, 'big')
 | 
						|
    iter_bytes = functools.partial(map, int_to_byte)
 | 
						|
 | 
						|
    def reraise(tp, value, tb=None):
 | 
						|
        if value.__traceback__ is not tb:
 | 
						|
            raise value.with_traceback(tb)
 | 
						|
        raise value
 | 
						|
 | 
						|
    fix_tuple_repr = _identity
 | 
						|
    implements_iterator = _identity
 | 
						|
    implements_to_string = _identity
 | 
						|
    implements_bool = _identity
 | 
						|
    native_string_result = _identity
 | 
						|
    imap = map
 | 
						|
    izip = zip
 | 
						|
    ifilter = filter
 | 
						|
    range_type = range
 | 
						|
 | 
						|
    from io import StringIO, BytesIO
 | 
						|
    NativeStringIO = StringIO
 | 
						|
 | 
						|
    _latin1_encode = operator.methodcaller('encode', 'latin1')
 | 
						|
 | 
						|
    def make_literal_wrapper(reference):
 | 
						|
        if isinstance(reference, text_type):
 | 
						|
            return _identity
 | 
						|
        return _latin1_encode
 | 
						|
 | 
						|
    def normalize_string_tuple(tup):
 | 
						|
        """Ensures that all types in the tuple are either strings
 | 
						|
        or bytes.
 | 
						|
        """
 | 
						|
        tupiter = iter(tup)
 | 
						|
        is_text = isinstance(next(tupiter, None), text_type)
 | 
						|
        for arg in tupiter:
 | 
						|
            if isinstance(arg, text_type) != is_text:
 | 
						|
                raise TypeError('Cannot mix str and bytes arguments (got %s)'
 | 
						|
                                % repr(tup))
 | 
						|
        return tup
 | 
						|
 | 
						|
    try_coerce_native = _identity
 | 
						|
    wsgi_get_bytes = _latin1_encode
 | 
						|
 | 
						|
    def wsgi_decoding_dance(s, charset='utf-8', errors='replace'):
 | 
						|
        return s.encode('latin1').decode(charset, errors)
 | 
						|
 | 
						|
    def wsgi_encoding_dance(s, charset='utf-8', errors='replace'):
 | 
						|
        if isinstance(s, text_type):
 | 
						|
            s = s.encode(charset)
 | 
						|
        return s.decode('latin1', errors)
 | 
						|
 | 
						|
    def to_bytes(x, charset=sys.getdefaultencoding(), errors='strict'):
 | 
						|
        if x is None:
 | 
						|
            return None
 | 
						|
        if isinstance(x, (bytes, bytearray, memoryview)):  # noqa
 | 
						|
            return bytes(x)
 | 
						|
        if isinstance(x, str):
 | 
						|
            return x.encode(charset, errors)
 | 
						|
        raise TypeError('Expected bytes')
 | 
						|
 | 
						|
    def to_native(x, charset=sys.getdefaultencoding(), errors='strict'):
 | 
						|
        if x is None or isinstance(x, str):
 | 
						|
            return x
 | 
						|
        return x.decode(charset, errors)
 | 
						|
 | 
						|
 | 
						|
def to_unicode(x, charset=sys.getdefaultencoding(), errors='strict',
 | 
						|
               allow_none_charset=False):
 | 
						|
    if x is None:
 | 
						|
        return None
 | 
						|
    if not isinstance(x, bytes):
 | 
						|
        return text_type(x)
 | 
						|
    if charset is None and allow_none_charset:
 | 
						|
        return x
 | 
						|
    return x.decode(charset, errors)
 | 
						|
 |