-
Notifications
You must be signed in to change notification settings - Fork 1.4k
build: update vendored six from 1.11.0 to 1.16.0 #2398
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
# pylint: skip-file | ||
|
||
# Copyright (c) 2010-2017 Benjamin Peterson | ||
# Copyright (c) 2010-2020 Benjamin Peterson | ||
# | ||
# Permission is hereby granted, free of charge, to any person obtaining a copy | ||
# of this software and associated documentation files (the "Software"), to deal | ||
|
@@ -31,7 +31,7 @@ | |
import types | ||
|
||
__author__ = "Benjamin Peterson <[email protected]>" | ||
__version__ = "1.11.0" | ||
__version__ = "1.16.0" | ||
|
||
|
||
# Useful for very coarse version differentiation. | ||
|
@@ -77,6 +77,11 @@ def __len__(self): | |
# https://github.com/dpkp/kafka-python/pull/979#discussion_r100403389 | ||
# del X | ||
|
||
if PY34: | ||
from importlib.util import spec_from_loader | ||
else: | ||
spec_from_loader = None | ||
|
||
|
||
def _add_doc(func, doc): | ||
"""Add documentation to a function.""" | ||
|
@@ -192,6 +197,11 @@ def find_module(self, fullname, path=None): | |
return self | ||
return None | ||
|
||
def find_spec(self, fullname, path, target=None): | ||
if fullname in self.known_modules: | ||
return spec_from_loader(fullname, self) | ||
return None | ||
|
||
def __get_module(self, fullname): | ||
try: | ||
return self.known_modules[fullname] | ||
|
@@ -229,6 +239,12 @@ def get_code(self, fullname): | |
return None | ||
get_source = get_code # same as get_code | ||
|
||
def create_module(self, spec): | ||
return self.load_module(spec.name) | ||
|
||
def exec_module(self, module): | ||
pass | ||
|
||
_importer = _SixMetaPathImporter(__name__) | ||
|
||
|
||
|
@@ -253,17 +269,19 @@ class _MovedItems(_LazyModule): | |
MovedAttribute("reduce", "__builtin__", "functools"), | ||
MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), | ||
MovedAttribute("StringIO", "StringIO", "io"), | ||
MovedAttribute("UserDict", "UserDict", "collections"), | ||
MovedAttribute("UserDict", "UserDict", "collections", "IterableUserDict", "UserDict"), | ||
MovedAttribute("UserList", "UserList", "collections"), | ||
MovedAttribute("UserString", "UserString", "collections"), | ||
MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), | ||
MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), | ||
MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), | ||
MovedModule("builtins", "__builtin__"), | ||
MovedModule("configparser", "ConfigParser"), | ||
MovedModule("collections_abc", "collections", "collections.abc" if sys.version_info >= (3, 3) else "collections"), | ||
MovedModule("copyreg", "copy_reg"), | ||
MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), | ||
MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), | ||
MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), | ||
MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"), | ||
MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), | ||
MovedModule("http_cookies", "Cookie", "http.cookies"), | ||
MovedModule("html_entities", "htmlentitydefs", "html.entities"), | ||
|
@@ -643,13 +661,16 @@ def u(s): | |
import io | ||
StringIO = io.StringIO | ||
BytesIO = io.BytesIO | ||
del io | ||
_assertCountEqual = "assertCountEqual" | ||
if sys.version_info[1] <= 1: | ||
_assertRaisesRegex = "assertRaisesRegexp" | ||
_assertRegex = "assertRegexpMatches" | ||
_assertNotRegex = "assertNotRegexpMatches" | ||
else: | ||
_assertRaisesRegex = "assertRaisesRegex" | ||
_assertRegex = "assertRegex" | ||
_assertNotRegex = "assertNotRegex" | ||
else: | ||
def b(s): | ||
return s | ||
|
@@ -671,6 +692,7 @@ def indexbytes(buf, i): | |
_assertCountEqual = "assertItemsEqual" | ||
_assertRaisesRegex = "assertRaisesRegexp" | ||
_assertRegex = "assertRegexpMatches" | ||
_assertNotRegex = "assertNotRegexpMatches" | ||
_add_doc(b, """Byte literal""") | ||
_add_doc(u, """Text literal""") | ||
|
||
|
@@ -687,6 +709,10 @@ def assertRegex(self, *args, **kwargs): | |
return getattr(self, _assertRegex)(*args, **kwargs) | ||
|
||
|
||
def assertNotRegex(self, *args, **kwargs): | ||
return getattr(self, _assertNotRegex)(*args, **kwargs) | ||
|
||
|
||
if PY3: | ||
exec_ = getattr(moves.builtins, "exec") | ||
|
||
|
@@ -722,16 +748,7 @@ def exec_(_code_, _globs_=None, _locs_=None): | |
""") | ||
|
||
|
||
if sys.version_info[:2] == (3, 2): | ||
exec_("""def raise_from(value, from_value): | ||
try: | ||
if from_value is None: | ||
raise value | ||
raise value from from_value | ||
finally: | ||
value = None | ||
""") | ||
elif sys.version_info[:2] > (3, 2): | ||
if sys.version_info[:2] > (3,): | ||
exec_("""def raise_from(value, from_value): | ||
try: | ||
raise value from from_value | ||
|
@@ -811,13 +828,33 @@ def print_(*args, **kwargs): | |
_add_doc(reraise, """Reraise an exception.""") | ||
|
||
if sys.version_info[0:2] < (3, 4): | ||
# This does exactly the same what the :func:`py3:functools.update_wrapper` | ||
# function does on Python versions after 3.2. It sets the ``__wrapped__`` | ||
# attribute on ``wrapper`` object and it doesn't raise an error if any of | ||
# the attributes mentioned in ``assigned`` and ``updated`` are missing on | ||
# ``wrapped`` object. | ||
def _update_wrapper(wrapper, wrapped, | ||
assigned=functools.WRAPPER_ASSIGNMENTS, | ||
updated=functools.WRAPPER_UPDATES): | ||
for attr in assigned: | ||
try: | ||
value = getattr(wrapped, attr) | ||
except AttributeError: | ||
continue | ||
else: | ||
setattr(wrapper, attr, value) | ||
for attr in updated: | ||
getattr(wrapper, attr).update(getattr(wrapped, attr, {})) | ||
wrapper.__wrapped__ = wrapped | ||
return wrapper | ||
_update_wrapper.__doc__ = functools.update_wrapper.__doc__ | ||
|
||
def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, | ||
updated=functools.WRAPPER_UPDATES): | ||
def wrapper(f): | ||
f = functools.wraps(wrapped, assigned, updated)(f) | ||
f.__wrapped__ = wrapped | ||
return f | ||
return wrapper | ||
return functools.partial(_update_wrapper, wrapped=wrapped, | ||
assigned=assigned, updated=updated) | ||
wraps.__doc__ = functools.wraps.__doc__ | ||
|
||
else: | ||
wraps = functools.wraps | ||
|
||
|
@@ -830,7 +867,15 @@ def with_metaclass(meta, *bases): | |
class metaclass(type): | ||
|
||
def __new__(cls, name, this_bases, d): | ||
return meta(name, bases, d) | ||
if sys.version_info[:2] >= (3, 7): | ||
# This version introduced PEP 560 that requires a bit | ||
# of extra care (we mimic what is done by __build_class__). | ||
resolved_bases = types.resolve_bases(bases) | ||
if resolved_bases is not bases: | ||
d['__orig_bases__'] = bases | ||
else: | ||
resolved_bases = bases | ||
return meta(name, resolved_bases, d) | ||
|
||
@classmethod | ||
def __prepare__(cls, name, this_bases): | ||
|
@@ -850,13 +895,75 @@ def wrapper(cls): | |
orig_vars.pop(slots_var) | ||
orig_vars.pop('__dict__', None) | ||
orig_vars.pop('__weakref__', None) | ||
if hasattr(cls, '__qualname__'): | ||
orig_vars['__qualname__'] = cls.__qualname__ | ||
return metaclass(cls.__name__, cls.__bases__, orig_vars) | ||
return wrapper | ||
|
||
|
||
def ensure_binary(s, encoding='utf-8', errors='strict'): | ||
"""Coerce **s** to six.binary_type. | ||
|
||
For Python 2: | ||
- `unicode` -> encoded to `str` | ||
- `str` -> `str` | ||
|
||
For Python 3: | ||
- `str` -> encoded to `bytes` | ||
- `bytes` -> `bytes` | ||
""" | ||
if isinstance(s, binary_type): | ||
return s | ||
if isinstance(s, text_type): | ||
return s.encode(encoding, errors) | ||
raise TypeError("not expecting type '%s'" % type(s)) | ||
|
||
|
||
def ensure_str(s, encoding='utf-8', errors='strict'): | ||
"""Coerce *s* to `str`. | ||
|
||
For Python 2: | ||
- `unicode` -> encoded to `str` | ||
- `str` -> `str` | ||
|
||
For Python 3: | ||
- `str` -> `str` | ||
- `bytes` -> decoded to `str` | ||
""" | ||
# Optimization: Fast return for the common case. | ||
if type(s) is str: | ||
return s | ||
if PY2 and isinstance(s, text_type): | ||
return s.encode(encoding, errors) | ||
elif PY3 and isinstance(s, binary_type): | ||
return s.decode(encoding, errors) | ||
elif not isinstance(s, (text_type, binary_type)): | ||
raise TypeError("not expecting type '%s'" % type(s)) | ||
return s | ||
|
||
|
||
def ensure_text(s, encoding='utf-8', errors='strict'): | ||
"""Coerce *s* to six.text_type. | ||
|
||
For Python 2: | ||
- `unicode` -> `unicode` | ||
- `str` -> `unicode` | ||
|
||
For Python 3: | ||
- `str` -> `str` | ||
- `bytes` -> decoded to `str` | ||
""" | ||
if isinstance(s, binary_type): | ||
return s.decode(encoding, errors) | ||
elif isinstance(s, text_type): | ||
return s | ||
else: | ||
raise TypeError("not expecting type '%s'" % type(s)) | ||
|
||
|
||
def python_2_unicode_compatible(klass): | ||
""" | ||
A decorator that defines __unicode__ and __str__ methods under Python 2. | ||
A class decorator that defines __unicode__ and __str__ methods under Python 2. | ||
Under Python 3 it does nothing. | ||
|
||
To support Python 2 and 3 with a single code base, define a __str__ method | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A new
del
statement. Does the same condition here apply as in #979 (comment)?