aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorelty <elty@yandex-team.ru>2022-02-10 16:48:40 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:48:40 +0300
commite88e9e70b37bc6a796d4e28c592f143c68e78b12 (patch)
tree5d5cb817648f650d76cf1076100726fd9b8448e8
parentf9b677a9d07a4ec1659bdde9228864bbbbbe4f16 (diff)
downloadydb-e88e9e70b37bc6a796d4e28c592f143c68e78b12.tar.gz
Restoring authorship annotation for <elty@yandex-team.ru>. Commit 2 of 2.
-rw-r--r--contrib/python/future/past/__init__.py174
-rw-r--r--contrib/python/future/past/builtins/__init__.py142
-rw-r--r--contrib/python/future/past/builtins/misc.py170
-rw-r--r--contrib/python/future/past/builtins/noniterators.py496
-rw-r--r--contrib/python/future/past/types/__init__.py58
-rw-r--r--contrib/python/future/past/types/basestring.py78
-rw-r--r--contrib/python/future/past/types/olddict.py190
-rw-r--r--contrib/python/future/past/types/oldstr.py256
-rw-r--r--contrib/python/future/past/utils/__init__.py192
-rw-r--r--contrib/python/future/ya.make20
-rw-r--r--contrib/python/ya.make2
11 files changed, 889 insertions, 889 deletions
diff --git a/contrib/python/future/past/__init__.py b/contrib/python/future/past/__init__.py
index 1b429e911b..1471303933 100644
--- a/contrib/python/future/past/__init__.py
+++ b/contrib/python/future/past/__init__.py
@@ -1,90 +1,90 @@
-# coding=utf-8
-"""
-past: compatibility with Python 2 from Python 3
-===============================================
-
-``past`` is a package to aid with Python 2/3 compatibility. Whereas ``future``
-contains backports of Python 3 constructs to Python 2, ``past`` provides
-implementations of some Python 2 constructs in Python 3 and tools to import and
-run Python 2 code in Python 3. It is intended to be used sparingly, as a way of
-running old Python 2 code from Python 3 until the code is ported properly.
-
-Potential uses for libraries:
-
-- as a step in porting a Python 2 codebase to Python 3 (e.g. with the ``futurize`` script)
-- to provide Python 3 support for previously Python 2-only libraries with the
- same APIs as on Python 2 -- particularly with regard to 8-bit strings (the
- ``past.builtins.str`` type).
-- to aid in providing minimal-effort Python 3 support for applications using
- libraries that do not yet wish to upgrade their code properly to Python 3, or
- wish to upgrade it gradually to Python 3 style.
-
-
-Here are some code examples that run identically on Python 3 and 2::
-
- >>> from past.builtins import str as oldstr
-
- >>> philosopher = oldstr(u'\u5b54\u5b50'.encode('utf-8'))
- >>> # This now behaves like a Py2 byte-string on both Py2 and Py3.
- >>> # For example, indexing returns a Python 2-like string object, not
- >>> # an integer:
- >>> philosopher[0]
- '\xe5'
- >>> type(philosopher[0])
- <past.builtins.oldstr>
-
- >>> # List-producing versions of range, reduce, map, filter
- >>> from past.builtins import range, reduce
- >>> range(10)
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- >>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
- 15
-
- >>> # Other functions removed in Python 3 are resurrected ...
- >>> from past.builtins import execfile
- >>> execfile('myfile.py')
-
- >>> from past.builtins import raw_input
- >>> name = raw_input('What is your name? ')
- What is your name? [cursor]
-
- >>> from past.builtins import reload
- >>> reload(mymodule) # equivalent to imp.reload(mymodule) in Python 3
-
- >>> from past.builtins import xrange
- >>> for i in xrange(10):
- ... pass
-
-
-It also provides import hooks so you can import and use Python 2 modules like
-this::
-
- $ python3
-
+# coding=utf-8
+"""
+past: compatibility with Python 2 from Python 3
+===============================================
+
+``past`` is a package to aid with Python 2/3 compatibility. Whereas ``future``
+contains backports of Python 3 constructs to Python 2, ``past`` provides
+implementations of some Python 2 constructs in Python 3 and tools to import and
+run Python 2 code in Python 3. It is intended to be used sparingly, as a way of
+running old Python 2 code from Python 3 until the code is ported properly.
+
+Potential uses for libraries:
+
+- as a step in porting a Python 2 codebase to Python 3 (e.g. with the ``futurize`` script)
+- to provide Python 3 support for previously Python 2-only libraries with the
+ same APIs as on Python 2 -- particularly with regard to 8-bit strings (the
+ ``past.builtins.str`` type).
+- to aid in providing minimal-effort Python 3 support for applications using
+ libraries that do not yet wish to upgrade their code properly to Python 3, or
+ wish to upgrade it gradually to Python 3 style.
+
+
+Here are some code examples that run identically on Python 3 and 2::
+
+ >>> from past.builtins import str as oldstr
+
+ >>> philosopher = oldstr(u'\u5b54\u5b50'.encode('utf-8'))
+ >>> # This now behaves like a Py2 byte-string on both Py2 and Py3.
+ >>> # For example, indexing returns a Python 2-like string object, not
+ >>> # an integer:
+ >>> philosopher[0]
+ '\xe5'
+ >>> type(philosopher[0])
+ <past.builtins.oldstr>
+
+ >>> # List-producing versions of range, reduce, map, filter
+ >>> from past.builtins import range, reduce
+ >>> range(10)
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ >>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
+ 15
+
+ >>> # Other functions removed in Python 3 are resurrected ...
+ >>> from past.builtins import execfile
+ >>> execfile('myfile.py')
+
+ >>> from past.builtins import raw_input
+ >>> name = raw_input('What is your name? ')
+ What is your name? [cursor]
+
+ >>> from past.builtins import reload
+ >>> reload(mymodule) # equivalent to imp.reload(mymodule) in Python 3
+
+ >>> from past.builtins import xrange
+ >>> for i in xrange(10):
+ ... pass
+
+
+It also provides import hooks so you can import and use Python 2 modules like
+this::
+
+ $ python3
+
>>> from past.translation import autotranslate
- >>> authotranslate('mypy2module')
- >>> import mypy2module
-
-until the authors of the Python 2 modules have upgraded their code. Then, for
-example::
-
- >>> mypy2module.func_taking_py2_string(oldstr(b'abcd'))
-
-
-Credits
--------
-
+ >>> authotranslate('mypy2module')
+ >>> import mypy2module
+
+until the authors of the Python 2 modules have upgraded their code. Then, for
+example::
+
+ >>> mypy2module.func_taking_py2_string(oldstr(b'abcd'))
+
+
+Credits
+-------
+
:Author: Ed Schofield, Jordan M. Adler, et al
-:Sponsor: Python Charmers Pty Ltd, Australia: http://pythoncharmers.com
-
-
-Licensing
----------
+:Sponsor: Python Charmers Pty Ltd, Australia: http://pythoncharmers.com
+
+
+Licensing
+---------
Copyright 2013-2019 Python Charmers Pty Ltd, Australia.
-The software is distributed under an MIT licence. See LICENSE.txt.
-"""
-
-from future import __version__, __copyright__, __license__
-
-__title__ = 'past'
-__author__ = 'Ed Schofield'
+The software is distributed under an MIT licence. See LICENSE.txt.
+"""
+
+from future import __version__, __copyright__, __license__
+
+__title__ = 'past'
+__author__ = 'Ed Schofield'
diff --git a/contrib/python/future/past/builtins/__init__.py b/contrib/python/future/past/builtins/__init__.py
index 2e0093b7ff..1b19e373c8 100644
--- a/contrib/python/future/past/builtins/__init__.py
+++ b/contrib/python/future/past/builtins/__init__.py
@@ -1,72 +1,72 @@
-"""
-A resurrection of some old functions from Python 2 for use in Python 3. These
-should be used sparingly, to help with porting efforts, since code using them
-is no longer standard Python 3 code.
-
-This module provides the following:
-
-1. Implementations of these builtin functions which have no equivalent on Py3:
-
-- apply
-- chr
-- cmp
-- execfile
-
-2. Aliases:
-
-- intern <- sys.intern
-- raw_input <- input
-- reduce <- functools.reduce
-- reload <- imp.reload
-- unichr <- chr
-- unicode <- str
-- xrange <- range
-
-3. List-producing versions of the corresponding Python 3 iterator-producing functions:
-
-- filter
-- map
-- range
-- zip
-
-4. Forward-ported Py2 types:
-
-- basestring
-- dict
-- str
-- long
-- unicode
-
-"""
-
-from future.utils import PY3
-from past.builtins.noniterators import (filter, map, range, reduce, zip)
-# from past.builtins.misc import (ascii, hex, input, oct, open)
-if PY3:
- from past.types import (basestring,
- olddict as dict,
- oldstr as str,
- long,
- unicode)
-else:
- from __builtin__ import (basestring, dict, str, long, unicode)
-
-from past.builtins.misc import (apply, chr, cmp, execfile, intern, oct,
- raw_input, reload, unichr, unicode, xrange)
-from past import utils
-
-
-if utils.PY3:
- # We only import names that shadow the builtins on Py3. No other namespace
- # pollution on Py3.
-
- # Only shadow builtins on Py3; no new names
+"""
+A resurrection of some old functions from Python 2 for use in Python 3. These
+should be used sparingly, to help with porting efforts, since code using them
+is no longer standard Python 3 code.
+
+This module provides the following:
+
+1. Implementations of these builtin functions which have no equivalent on Py3:
+
+- apply
+- chr
+- cmp
+- execfile
+
+2. Aliases:
+
+- intern <- sys.intern
+- raw_input <- input
+- reduce <- functools.reduce
+- reload <- imp.reload
+- unichr <- chr
+- unicode <- str
+- xrange <- range
+
+3. List-producing versions of the corresponding Python 3 iterator-producing functions:
+
+- filter
+- map
+- range
+- zip
+
+4. Forward-ported Py2 types:
+
+- basestring
+- dict
+- str
+- long
+- unicode
+
+"""
+
+from future.utils import PY3
+from past.builtins.noniterators import (filter, map, range, reduce, zip)
+# from past.builtins.misc import (ascii, hex, input, oct, open)
+if PY3:
+ from past.types import (basestring,
+ olddict as dict,
+ oldstr as str,
+ long,
+ unicode)
+else:
+ from __builtin__ import (basestring, dict, str, long, unicode)
+
+from past.builtins.misc import (apply, chr, cmp, execfile, intern, oct,
+ raw_input, reload, unichr, unicode, xrange)
+from past import utils
+
+
+if utils.PY3:
+ # We only import names that shadow the builtins on Py3. No other namespace
+ # pollution on Py3.
+
+ # Only shadow builtins on Py3; no new names
__all__ = ['filter', 'map', 'range', 'reduce', 'zip',
- 'basestring', 'dict', 'str', 'long', 'unicode',
- 'apply', 'chr', 'cmp', 'execfile', 'intern', 'raw_input',
- 'reload', 'unichr', 'xrange'
- ]
-
-else:
- # No namespace pollution on Py2
- __all__ = []
+ 'basestring', 'dict', 'str', 'long', 'unicode',
+ 'apply', 'chr', 'cmp', 'execfile', 'intern', 'raw_input',
+ 'reload', 'unichr', 'xrange'
+ ]
+
+else:
+ # No namespace pollution on Py2
+ __all__ = []
diff --git a/contrib/python/future/past/builtins/misc.py b/contrib/python/future/past/builtins/misc.py
index 44e916518b..a1bae82f5b 100644
--- a/contrib/python/future/past/builtins/misc.py
+++ b/contrib/python/future/past/builtins/misc.py
@@ -1,97 +1,97 @@
-from __future__ import unicode_literals
+from __future__ import unicode_literals
+
+import inspect
-import inspect
-
from future.utils import PY2, PY3, exec_
-
+
if PY2:
from collections import Mapping
else:
from collections.abc import Mapping
-
-if PY3:
- import builtins
+
+if PY3:
+ import builtins
from collections.abc import Mapping
-
- def apply(f, *args, **kw):
- return f(*args, **kw)
-
- from past.builtins import str as oldstr
-
- def chr(i):
- """
- Return a byte-string of one character with ordinal i; 0 <= i <= 256
- """
- return oldstr(bytes((i,)))
-
- def cmp(x, y):
- """
- cmp(x, y) -> integer
-
- Return negative if x<y, zero if x==y, positive if x>y.
- """
- return (x > y) - (x < y)
-
- from sys import intern
-
- def oct(number):
- """oct(number) -> string
-
- Return the octal representation of an integer
- """
- return '0' + builtins.oct(number)[2:]
-
+
+ def apply(f, *args, **kw):
+ return f(*args, **kw)
+
+ from past.builtins import str as oldstr
+
+ def chr(i):
+ """
+ Return a byte-string of one character with ordinal i; 0 <= i <= 256
+ """
+ return oldstr(bytes((i,)))
+
+ def cmp(x, y):
+ """
+ cmp(x, y) -> integer
+
+ Return negative if x<y, zero if x==y, positive if x>y.
+ """
+ return (x > y) - (x < y)
+
+ from sys import intern
+
+ def oct(number):
+ """oct(number) -> string
+
+ Return the octal representation of an integer
+ """
+ return '0' + builtins.oct(number)[2:]
+
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning, module="past.builtins.misc")
- raw_input = input
- from imp import reload
- unicode = str
- unichr = chr
- xrange = range
-else:
- import __builtin__
+ raw_input = input
+ from imp import reload
+ unicode = str
+ unichr = chr
+ xrange = range
+else:
+ import __builtin__
from collections import Mapping
- apply = __builtin__.apply
- chr = __builtin__.chr
- cmp = __builtin__.cmp
- execfile = __builtin__.execfile
- intern = __builtin__.intern
- oct = __builtin__.oct
- raw_input = __builtin__.raw_input
- reload = __builtin__.reload
- unicode = __builtin__.unicode
- unichr = __builtin__.unichr
- xrange = __builtin__.xrange
-
-
-if PY3:
- def execfile(filename, myglobals=None, mylocals=None):
- """
- Read and execute a Python script from a file in the given namespaces.
- The globals and locals are dictionaries, defaulting to the current
- globals and locals. If only globals is given, locals defaults to it.
- """
- if myglobals is None:
- # There seems to be no alternative to frame hacking here.
- caller_frame = inspect.stack()[1]
- myglobals = caller_frame[0].f_globals
- mylocals = caller_frame[0].f_locals
- elif mylocals is None:
- # Only if myglobals is given do we set mylocals to it.
- mylocals = myglobals
- if not isinstance(myglobals, Mapping):
- raise TypeError('globals must be a mapping')
- if not isinstance(mylocals, Mapping):
- raise TypeError('locals must be a mapping')
+ apply = __builtin__.apply
+ chr = __builtin__.chr
+ cmp = __builtin__.cmp
+ execfile = __builtin__.execfile
+ intern = __builtin__.intern
+ oct = __builtin__.oct
+ raw_input = __builtin__.raw_input
+ reload = __builtin__.reload
+ unicode = __builtin__.unicode
+ unichr = __builtin__.unichr
+ xrange = __builtin__.xrange
+
+
+if PY3:
+ def execfile(filename, myglobals=None, mylocals=None):
+ """
+ Read and execute a Python script from a file in the given namespaces.
+ The globals and locals are dictionaries, defaulting to the current
+ globals and locals. If only globals is given, locals defaults to it.
+ """
+ if myglobals is None:
+ # There seems to be no alternative to frame hacking here.
+ caller_frame = inspect.stack()[1]
+ myglobals = caller_frame[0].f_globals
+ mylocals = caller_frame[0].f_locals
+ elif mylocals is None:
+ # Only if myglobals is given do we set mylocals to it.
+ mylocals = myglobals
+ if not isinstance(myglobals, Mapping):
+ raise TypeError('globals must be a mapping')
+ if not isinstance(mylocals, Mapping):
+ raise TypeError('locals must be a mapping')
with open(filename, "rb") as fin:
- source = fin.read()
- code = compile(source, filename, "exec")
- exec_(code, myglobals, mylocals)
-
-
-if PY3:
- __all__ = ['apply', 'chr', 'cmp', 'execfile', 'intern', 'raw_input',
- 'reload', 'unichr', 'unicode', 'xrange']
-else:
- __all__ = []
+ source = fin.read()
+ code = compile(source, filename, "exec")
+ exec_(code, myglobals, mylocals)
+
+
+if PY3:
+ __all__ = ['apply', 'chr', 'cmp', 'execfile', 'intern', 'raw_input',
+ 'reload', 'unichr', 'unicode', 'xrange']
+else:
+ __all__ = []
diff --git a/contrib/python/future/past/builtins/noniterators.py b/contrib/python/future/past/builtins/noniterators.py
index 869c88418b..183ffffda4 100644
--- a/contrib/python/future/past/builtins/noniterators.py
+++ b/contrib/python/future/past/builtins/noniterators.py
@@ -1,272 +1,272 @@
-"""
-This module is designed to be used as follows::
-
- from past.builtins.noniterators import filter, map, range, reduce, zip
-
-And then, for example::
-
- assert isinstance(range(5), list)
+"""
+This module is designed to be used as follows::
+
+ from past.builtins.noniterators import filter, map, range, reduce, zip
+
+And then, for example::
+
+ assert isinstance(range(5), list)
+
+The list-producing functions this brings in are::
+
+- ``filter``
+- ``map``
+- ``range``
+- ``reduce``
+- ``zip``
+
+"""
+
+from __future__ import division, absolute_import, print_function
-The list-producing functions this brings in are::
-
-- ``filter``
-- ``map``
-- ``range``
-- ``reduce``
-- ``zip``
-
-"""
-
-from __future__ import division, absolute_import, print_function
-
from itertools import chain, starmap
-import itertools # since zip_longest doesn't exist on Py2
-from past.types import basestring
-from past.utils import PY3
-
-
-def flatmap(f, items):
- return chain.from_iterable(map(f, items))
-
-
-if PY3:
- import builtins
-
- # list-producing versions of the major Python iterating functions
- def oldfilter(*args):
- """
- filter(function or None, sequence) -> list, tuple, or string
+import itertools # since zip_longest doesn't exist on Py2
+from past.types import basestring
+from past.utils import PY3
+
+
+def flatmap(f, items):
+ return chain.from_iterable(map(f, items))
+
+
+if PY3:
+ import builtins
- Return those items of sequence for which function(item) is true.
- If function is None, return the items that are true. If sequence
- is a tuple or string, return the same type, else return a list.
- """
- mytype = type(args[1])
- if isinstance(args[1], basestring):
- return mytype().join(builtins.filter(*args))
- elif isinstance(args[1], (tuple, list)):
- return mytype(builtins.filter(*args))
- else:
- # Fall back to list. Is this the right thing to do?
- return list(builtins.filter(*args))
-
- # This is surprisingly difficult to get right. For example, the
- # solutions here fail with the test cases in the docstring below:
- # http://stackoverflow.com/questions/8072755/
- def oldmap(func, *iterables):
- """
- map(function, sequence[, sequence, ...]) -> list
+ # list-producing versions of the major Python iterating functions
+ def oldfilter(*args):
+ """
+ filter(function or None, sequence) -> list, tuple, or string
- Return a list of the results of applying the function to the
- items of the argument sequence(s). If more than one sequence is
- given, the function is called with an argument list consisting of
- the corresponding item of each sequence, substituting None for
- missing values when not all sequences have the same length. If
- the function is None, return a list of the items of the sequence
- (or a list of tuples if more than one sequence).
+ Return those items of sequence for which function(item) is true.
+ If function is None, return the items that are true. If sequence
+ is a tuple or string, return the same type, else return a list.
+ """
+ mytype = type(args[1])
+ if isinstance(args[1], basestring):
+ return mytype().join(builtins.filter(*args))
+ elif isinstance(args[1], (tuple, list)):
+ return mytype(builtins.filter(*args))
+ else:
+ # Fall back to list. Is this the right thing to do?
+ return list(builtins.filter(*args))
+
+ # This is surprisingly difficult to get right. For example, the
+ # solutions here fail with the test cases in the docstring below:
+ # http://stackoverflow.com/questions/8072755/
+ def oldmap(func, *iterables):
+ """
+ map(function, sequence[, sequence, ...]) -> list
+
+ Return a list of the results of applying the function to the
+ items of the argument sequence(s). If more than one sequence is
+ given, the function is called with an argument list consisting of
+ the corresponding item of each sequence, substituting None for
+ missing values when not all sequences have the same length. If
+ the function is None, return a list of the items of the sequence
+ (or a list of tuples if more than one sequence).
+
+ Test cases:
+ >>> oldmap(None, 'hello world')
+ ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
+
+ >>> oldmap(None, range(4))
+ [0, 1, 2, 3]
- Test cases:
- >>> oldmap(None, 'hello world')
- ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
-
- >>> oldmap(None, range(4))
- [0, 1, 2, 3]
-
More test cases are in test_past.test_builtins.
- """
- zipped = itertools.zip_longest(*iterables)
- l = list(zipped)
- if len(l) == 0:
- return []
- if func is None:
- result = l
- else:
- result = list(starmap(func, l))
-
- # Inspect to see whether it's a simple sequence of tuples
- try:
- if max([len(item) for item in result]) == 1:
- return list(chain.from_iterable(result))
- # return list(flatmap(func, result))
- except TypeError as e:
- # Simple objects like ints have no len()
- pass
- return result
-
- ############################
- ### For reference, the source code for Py2.7 map function:
- # static PyObject *
- # builtin_map(PyObject *self, PyObject *args)
- # {
- # typedef struct {
- # PyObject *it; /* the iterator object */
- # int saw_StopIteration; /* bool: did the iterator end? */
- # } sequence;
+ """
+ zipped = itertools.zip_longest(*iterables)
+ l = list(zipped)
+ if len(l) == 0:
+ return []
+ if func is None:
+ result = l
+ else:
+ result = list(starmap(func, l))
+
+ # Inspect to see whether it's a simple sequence of tuples
+ try:
+ if max([len(item) for item in result]) == 1:
+ return list(chain.from_iterable(result))
+ # return list(flatmap(func, result))
+ except TypeError as e:
+ # Simple objects like ints have no len()
+ pass
+ return result
+
+ ############################
+ ### For reference, the source code for Py2.7 map function:
+ # static PyObject *
+ # builtin_map(PyObject *self, PyObject *args)
+ # {
+ # typedef struct {
+ # PyObject *it; /* the iterator object */
+ # int saw_StopIteration; /* bool: did the iterator end? */
+ # } sequence;
#
- # PyObject *func, *result;
- # sequence *seqs = NULL, *sqp;
- # Py_ssize_t n, len;
- # register int i, j;
+ # PyObject *func, *result;
+ # sequence *seqs = NULL, *sqp;
+ # Py_ssize_t n, len;
+ # register int i, j;
#
- # n = PyTuple_Size(args);
- # if (n < 2) {
- # PyErr_SetString(PyExc_TypeError,
- # "map() requires at least two args");
- # return NULL;
- # }
+ # n = PyTuple_Size(args);
+ # if (n < 2) {
+ # PyErr_SetString(PyExc_TypeError,
+ # "map() requires at least two args");
+ # return NULL;
+ # }
#
- # func = PyTuple_GetItem(args, 0);
- # n--;
+ # func = PyTuple_GetItem(args, 0);
+ # n--;
#
- # if (func == Py_None) {
- # if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
- # "use list(...)", 1) < 0)
- # return NULL;
- # if (n == 1) {
- # /* map(None, S) is the same as list(S). */
- # return PySequence_List(PyTuple_GetItem(args, 1));
- # }
- # }
+ # if (func == Py_None) {
+ # if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
+ # "use list(...)", 1) < 0)
+ # return NULL;
+ # if (n == 1) {
+ # /* map(None, S) is the same as list(S). */
+ # return PySequence_List(PyTuple_GetItem(args, 1));
+ # }
+ # }
#
- # /* Get space for sequence descriptors. Must NULL out the iterator
- # * pointers so that jumping to Fail_2 later doesn't see trash.
- # */
- # if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
- # PyErr_NoMemory();
- # return NULL;
- # }
- # for (i = 0; i < n; ++i) {
- # seqs[i].it = (PyObject*)NULL;
- # seqs[i].saw_StopIteration = 0;
- # }
+ # /* Get space for sequence descriptors. Must NULL out the iterator
+ # * pointers so that jumping to Fail_2 later doesn't see trash.
+ # */
+ # if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
+ # PyErr_NoMemory();
+ # return NULL;
+ # }
+ # for (i = 0; i < n; ++i) {
+ # seqs[i].it = (PyObject*)NULL;
+ # seqs[i].saw_StopIteration = 0;
+ # }
#
- # /* Do a first pass to obtain iterators for the arguments, and set len
- # * to the largest of their lengths.
- # */
- # len = 0;
- # for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
- # PyObject *curseq;
- # Py_ssize_t curlen;
+ # /* Do a first pass to obtain iterators for the arguments, and set len
+ # * to the largest of their lengths.
+ # */
+ # len = 0;
+ # for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
+ # PyObject *curseq;
+ # Py_ssize_t curlen;
#
- # /* Get iterator. */
- # curseq = PyTuple_GetItem(args, i+1);
- # sqp->it = PyObject_GetIter(curseq);
- # if (sqp->it == NULL) {
- # static char errmsg[] =
- # "argument %d to map() must support iteration";
- # char errbuf[sizeof(errmsg) + 25];
- # PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
- # PyErr_SetString(PyExc_TypeError, errbuf);
- # goto Fail_2;
- # }
+ # /* Get iterator. */
+ # curseq = PyTuple_GetItem(args, i+1);
+ # sqp->it = PyObject_GetIter(curseq);
+ # if (sqp->it == NULL) {
+ # static char errmsg[] =
+ # "argument %d to map() must support iteration";
+ # char errbuf[sizeof(errmsg) + 25];
+ # PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
+ # PyErr_SetString(PyExc_TypeError, errbuf);
+ # goto Fail_2;
+ # }
#
- # /* Update len. */
- # curlen = _PyObject_LengthHint(curseq, 8);
- # if (curlen > len)
- # len = curlen;
- # }
+ # /* Update len. */
+ # curlen = _PyObject_LengthHint(curseq, 8);
+ # if (curlen > len)
+ # len = curlen;
+ # }
#
- # /* Get space for the result list. */
- # if ((result = (PyObject *) PyList_New(len)) == NULL)
- # goto Fail_2;
+ # /* Get space for the result list. */
+ # if ((result = (PyObject *) PyList_New(len)) == NULL)
+ # goto Fail_2;
#
- # /* Iterate over the sequences until all have stopped. */
- # for (i = 0; ; ++i) {
- # PyObject *alist, *item=NULL, *value;
- # int numactive = 0;
+ # /* Iterate over the sequences until all have stopped. */
+ # for (i = 0; ; ++i) {
+ # PyObject *alist, *item=NULL, *value;
+ # int numactive = 0;
#
- # if (func == Py_None && n == 1)
- # alist = NULL;
- # else if ((alist = PyTuple_New(n)) == NULL)
- # goto Fail_1;
+ # if (func == Py_None && n == 1)
+ # alist = NULL;
+ # else if ((alist = PyTuple_New(n)) == NULL)
+ # goto Fail_1;
#
- # for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
- # if (sqp->saw_StopIteration) {
- # Py_INCREF(Py_None);
- # item = Py_None;
- # }
- # else {
- # item = PyIter_Next(sqp->it);
- # if (item)
- # ++numactive;
- # else {
- # if (PyErr_Occurred()) {
- # Py_XDECREF(alist);
- # goto Fail_1;
- # }
- # Py_INCREF(Py_None);
- # item = Py_None;
- # sqp->saw_StopIteration = 1;
- # }
- # }
- # if (alist)
- # PyTuple_SET_ITEM(alist, j, item);
- # else
- # break;
- # }
+ # for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
+ # if (sqp->saw_StopIteration) {
+ # Py_INCREF(Py_None);
+ # item = Py_None;
+ # }
+ # else {
+ # item = PyIter_Next(sqp->it);
+ # if (item)
+ # ++numactive;
+ # else {
+ # if (PyErr_Occurred()) {
+ # Py_XDECREF(alist);
+ # goto Fail_1;
+ # }
+ # Py_INCREF(Py_None);
+ # item = Py_None;
+ # sqp->saw_StopIteration = 1;
+ # }
+ # }
+ # if (alist)
+ # PyTuple_SET_ITEM(alist, j, item);
+ # else
+ # break;
+ # }
#
- # if (!alist)
- # alist = item;
+ # if (!alist)
+ # alist = item;
#
- # if (numactive == 0) {
- # Py_DECREF(alist);
- # break;
- # }
+ # if (numactive == 0) {
+ # Py_DECREF(alist);
+ # break;
+ # }
#
- # if (func == Py_None)
- # value = alist;
- # else {
- # value = PyEval_CallObject(func, alist);
- # Py_DECREF(alist);
- # if (value == NULL)
- # goto Fail_1;
- # }
- # if (i >= len) {
- # int status = PyList_Append(result, value);
- # Py_DECREF(value);
- # if (status < 0)
- # goto Fail_1;
- # }
- # else if (PyList_SetItem(result, i, value) < 0)
- # goto Fail_1;
- # }
+ # if (func == Py_None)
+ # value = alist;
+ # else {
+ # value = PyEval_CallObject(func, alist);
+ # Py_DECREF(alist);
+ # if (value == NULL)
+ # goto Fail_1;
+ # }
+ # if (i >= len) {
+ # int status = PyList_Append(result, value);
+ # Py_DECREF(value);
+ # if (status < 0)
+ # goto Fail_1;
+ # }
+ # else if (PyList_SetItem(result, i, value) < 0)
+ # goto Fail_1;
+ # }
#
- # if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
- # goto Fail_1;
+ # if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
+ # goto Fail_1;
#
- # goto Succeed;
+ # goto Succeed;
#
- # Fail_1:
- # Py_DECREF(result);
- # Fail_2:
- # result = NULL;
- # Succeed:
- # assert(seqs);
- # for (i = 0; i < n; ++i)
- # Py_XDECREF(seqs[i].it);
- # PyMem_DEL(seqs);
- # return result;
- # }
-
- def oldrange(*args, **kwargs):
- return list(builtins.range(*args, **kwargs))
-
- def oldzip(*args, **kwargs):
- return list(builtins.zip(*args, **kwargs))
-
- filter = oldfilter
- map = oldmap
- range = oldrange
- from functools import reduce
- zip = oldzip
- __all__ = ['filter', 'map', 'range', 'reduce', 'zip']
-
-else:
- import __builtin__
- # Python 2-builtin ranges produce lists
- filter = __builtin__.filter
- map = __builtin__.map
- range = __builtin__.range
- reduce = __builtin__.reduce
- zip = __builtin__.zip
- __all__ = []
+ # Fail_1:
+ # Py_DECREF(result);
+ # Fail_2:
+ # result = NULL;
+ # Succeed:
+ # assert(seqs);
+ # for (i = 0; i < n; ++i)
+ # Py_XDECREF(seqs[i].it);
+ # PyMem_DEL(seqs);
+ # return result;
+ # }
+
+ def oldrange(*args, **kwargs):
+ return list(builtins.range(*args, **kwargs))
+
+ def oldzip(*args, **kwargs):
+ return list(builtins.zip(*args, **kwargs))
+
+ filter = oldfilter
+ map = oldmap
+ range = oldrange
+ from functools import reduce
+ zip = oldzip
+ __all__ = ['filter', 'map', 'range', 'reduce', 'zip']
+
+else:
+ import __builtin__
+ # Python 2-builtin ranges produce lists
+ filter = __builtin__.filter
+ map = __builtin__.map
+ range = __builtin__.range
+ reduce = __builtin__.reduce
+ zip = __builtin__.zip
+ __all__ = []
diff --git a/contrib/python/future/past/types/__init__.py b/contrib/python/future/past/types/__init__.py
index a62e503670..91dd270f2d 100644
--- a/contrib/python/future/past/types/__init__.py
+++ b/contrib/python/future/past/types/__init__.py
@@ -1,29 +1,29 @@
-"""
-Forward-ports of types from Python 2 for use with Python 3:
-
-- ``basestring``: equivalent to ``(str, bytes)`` in ``isinstance`` checks
-- ``dict``: with list-producing .keys() etc. methods
-- ``str``: bytes-like, but iterating over them doesn't product integers
-- ``long``: alias of Py3 int with ``L`` suffix in the ``repr``
-- ``unicode``: alias of Py3 str with ``u`` prefix in the ``repr``
-
-"""
-
-from past import utils
-
-if utils.PY2:
- import __builtin__
- basestring = __builtin__.basestring
- dict = __builtin__.dict
- str = __builtin__.str
- long = __builtin__.long
- unicode = __builtin__.unicode
- __all__ = []
-else:
- from .basestring import basestring
- from .olddict import olddict
- from .oldstr import oldstr
- long = int
- unicode = str
- # from .unicode import unicode
- __all__ = ['basestring', 'olddict', 'oldstr', 'long', 'unicode']
+"""
+Forward-ports of types from Python 2 for use with Python 3:
+
+- ``basestring``: equivalent to ``(str, bytes)`` in ``isinstance`` checks
+- ``dict``: with list-producing .keys() etc. methods
+- ``str``: bytes-like, but iterating over them doesn't product integers
+- ``long``: alias of Py3 int with ``L`` suffix in the ``repr``
+- ``unicode``: alias of Py3 str with ``u`` prefix in the ``repr``
+
+"""
+
+from past import utils
+
+if utils.PY2:
+ import __builtin__
+ basestring = __builtin__.basestring
+ dict = __builtin__.dict
+ str = __builtin__.str
+ long = __builtin__.long
+ unicode = __builtin__.unicode
+ __all__ = []
+else:
+ from .basestring import basestring
+ from .olddict import olddict
+ from .oldstr import oldstr
+ long = int
+ unicode = str
+ # from .unicode import unicode
+ __all__ = ['basestring', 'olddict', 'oldstr', 'long', 'unicode']
diff --git a/contrib/python/future/past/types/basestring.py b/contrib/python/future/past/types/basestring.py
index 022863c153..1cab22f6ca 100644
--- a/contrib/python/future/past/types/basestring.py
+++ b/contrib/python/future/past/types/basestring.py
@@ -1,39 +1,39 @@
-"""
-An implementation of the basestring type for Python 3
-
-Example use:
-
->>> s = b'abc'
->>> assert isinstance(s, basestring)
->>> from past.types import str as oldstr
->>> s2 = oldstr(b'abc')
->>> assert isinstance(s2, basestring)
-
-"""
-
-import sys
-
-from past.utils import with_metaclass, PY2
-
-if PY2:
- str = unicode
-
-ver = sys.version_info[:2]
-
-
-class BaseBaseString(type):
- def __instancecheck__(cls, instance):
- return isinstance(instance, (bytes, str))
-
- def __subclasshook__(cls, thing):
- # TODO: What should go here?
- raise NotImplemented
-
-
-class basestring(with_metaclass(BaseBaseString)):
- """
- A minimal backport of the Python 2 basestring type to Py3
- """
-
-
-__all__ = ['basestring']
+"""
+An implementation of the basestring type for Python 3
+
+Example use:
+
+>>> s = b'abc'
+>>> assert isinstance(s, basestring)
+>>> from past.types import str as oldstr
+>>> s2 = oldstr(b'abc')
+>>> assert isinstance(s2, basestring)
+
+"""
+
+import sys
+
+from past.utils import with_metaclass, PY2
+
+if PY2:
+ str = unicode
+
+ver = sys.version_info[:2]
+
+
+class BaseBaseString(type):
+ def __instancecheck__(cls, instance):
+ return isinstance(instance, (bytes, str))
+
+ def __subclasshook__(cls, thing):
+ # TODO: What should go here?
+ raise NotImplemented
+
+
+class basestring(with_metaclass(BaseBaseString)):
+ """
+ A minimal backport of the Python 2 basestring type to Py3
+ """
+
+
+__all__ = ['basestring']
diff --git a/contrib/python/future/past/types/olddict.py b/contrib/python/future/past/types/olddict.py
index ca300af795..f4f92a26a6 100644
--- a/contrib/python/future/past/types/olddict.py
+++ b/contrib/python/future/past/types/olddict.py
@@ -1,96 +1,96 @@
-"""
-A dict subclass for Python 3 that behaves like Python 2's dict
-
-Example use:
-
->>> from past.builtins import dict
->>> d1 = dict() # instead of {} for an empty dict
->>> d2 = dict(key1='value1', key2='value2')
-
-The keys, values and items methods now return lists on Python 3.x and there are
-methods for iterkeys, itervalues, iteritems, and viewkeys etc.
-
->>> for d in (d1, d2):
-... assert isinstance(d.keys(), list)
-... assert isinstance(d.values(), list)
-... assert isinstance(d.items(), list)
-"""
-
-import sys
-
-from past.utils import with_metaclass
-
-
-_builtin_dict = dict
-ver = sys.version_info[:2]
-
-
-class BaseOldDict(type):
- def __instancecheck__(cls, instance):
- return isinstance(instance, _builtin_dict)
-
-
-class olddict(with_metaclass(BaseOldDict, _builtin_dict)):
- """
- A backport of the Python 3 dict object to Py2
- """
- iterkeys = _builtin_dict.keys
- viewkeys = _builtin_dict.keys
-
- def keys(self):
- return list(super(olddict, self).keys())
-
- itervalues = _builtin_dict.values
- viewvalues = _builtin_dict.values
-
- def values(self):
- return list(super(olddict, self).values())
-
- iteritems = _builtin_dict.items
- viewitems = _builtin_dict.items
-
- def items(self):
- return list(super(olddict, self).items())
-
- def has_key(self, k):
- """
- D.has_key(k) -> True if D has a key k, else False
- """
- return k in self
-
- # def __new__(cls, *args, **kwargs):
- # """
- # dict() -> new empty dictionary
- # dict(mapping) -> new dictionary initialized from a mapping object's
- # (key, value) pairs
- # dict(iterable) -> new dictionary initialized as if via:
- # d = {}
- # for k, v in iterable:
- # d[k] = v
- # dict(**kwargs) -> new dictionary initialized with the name=value pairs
- # in the keyword argument list. For example: dict(one=1, two=2)
-
- # """
+"""
+A dict subclass for Python 3 that behaves like Python 2's dict
+
+Example use:
+
+>>> from past.builtins import dict
+>>> d1 = dict() # instead of {} for an empty dict
+>>> d2 = dict(key1='value1', key2='value2')
+
+The keys, values and items methods now return lists on Python 3.x and there are
+methods for iterkeys, itervalues, iteritems, and viewkeys etc.
+
+>>> for d in (d1, d2):
+... assert isinstance(d.keys(), list)
+... assert isinstance(d.values(), list)
+... assert isinstance(d.items(), list)
+"""
+
+import sys
+
+from past.utils import with_metaclass
+
+
+_builtin_dict = dict
+ver = sys.version_info[:2]
+
+
+class BaseOldDict(type):
+ def __instancecheck__(cls, instance):
+ return isinstance(instance, _builtin_dict)
+
+
+class olddict(with_metaclass(BaseOldDict, _builtin_dict)):
+ """
+ A backport of the Python 3 dict object to Py2
+ """
+ iterkeys = _builtin_dict.keys
+ viewkeys = _builtin_dict.keys
+
+ def keys(self):
+ return list(super(olddict, self).keys())
+
+ itervalues = _builtin_dict.values
+ viewvalues = _builtin_dict.values
+
+ def values(self):
+ return list(super(olddict, self).values())
+
+ iteritems = _builtin_dict.items
+ viewitems = _builtin_dict.items
+
+ def items(self):
+ return list(super(olddict, self).items())
+
+ def has_key(self, k):
+ """
+ D.has_key(k) -> True if D has a key k, else False
+ """
+ return k in self
+
+ # def __new__(cls, *args, **kwargs):
+ # """
+ # dict() -> new empty dictionary
+ # dict(mapping) -> new dictionary initialized from a mapping object's
+ # (key, value) pairs
+ # dict(iterable) -> new dictionary initialized as if via:
+ # d = {}
+ # for k, v in iterable:
+ # d[k] = v
+ # dict(**kwargs) -> new dictionary initialized with the name=value pairs
+ # in the keyword argument list. For example: dict(one=1, two=2)
+
+ # """
#
- # if len(args) == 0:
- # return super(olddict, cls).__new__(cls)
- # # Was: elif isinstance(args[0], newbytes):
- # # We use type() instead of the above because we're redefining
- # # this to be True for all unicode string subclasses. Warning:
- # # This may render newstr un-subclassable.
- # elif type(args[0]) == olddict:
- # return args[0]
- # # elif isinstance(args[0], _builtin_dict):
- # # value = args[0]
- # else:
- # value = args[0]
- # return super(olddict, cls).__new__(cls, value)
-
- def __native__(self):
- """
- Hook for the past.utils.native() function
- """
- return super(oldbytes, self)
-
-
-__all__ = ['olddict']
+ # if len(args) == 0:
+ # return super(olddict, cls).__new__(cls)
+ # # Was: elif isinstance(args[0], newbytes):
+ # # We use type() instead of the above because we're redefining
+ # # this to be True for all unicode string subclasses. Warning:
+ # # This may render newstr un-subclassable.
+ # elif type(args[0]) == olddict:
+ # return args[0]
+ # # elif isinstance(args[0], _builtin_dict):
+ # # value = args[0]
+ # else:
+ # value = args[0]
+ # return super(olddict, cls).__new__(cls, value)
+
+ def __native__(self):
+ """
+ Hook for the past.utils.native() function
+ """
+ return super(oldbytes, self)
+
+
+__all__ = ['olddict']
diff --git a/contrib/python/future/past/types/oldstr.py b/contrib/python/future/past/types/oldstr.py
index f765bdf4f7..a477d8844e 100644
--- a/contrib/python/future/past/types/oldstr.py
+++ b/contrib/python/future/past/types/oldstr.py
@@ -1,135 +1,135 @@
-"""
-Pure-Python implementation of a Python 2-like str object for Python 3.
-"""
-
-from numbers import Integral
-
-from past.utils import PY2, with_metaclass
-
+"""
+Pure-Python implementation of a Python 2-like str object for Python 3.
+"""
+
+from numbers import Integral
+
+from past.utils import PY2, with_metaclass
+
if PY2:
from collections import Iterable
else:
from collections.abc import Iterable
-
-_builtin_bytes = bytes
-
-
-class BaseOldStr(type):
- def __instancecheck__(cls, instance):
- return isinstance(instance, _builtin_bytes)
-
-
-def unescape(s):
- """
- Interprets strings with escape sequences
-
- Example:
- >>> s = unescape(r'abc\\def') # i.e. 'abc\\\\def'
- >>> print(s)
- 'abc\def'
- >>> s2 = unescape('abc\\ndef')
- >>> len(s2)
- 8
- >>> print(s2)
- abc
- def
- """
- return s.encode().decode('unicode_escape')
-
-
-class oldstr(with_metaclass(BaseOldStr, _builtin_bytes)):
- """
- A forward port of the Python 2 8-bit string object to Py3
- """
- # Python 2 strings have no __iter__ method:
- @property
- def __iter__(self):
- raise AttributeError
-
- def __dir__(self):
- return [thing for thing in dir(_builtin_bytes) if thing != '__iter__']
-
- # def __new__(cls, *args, **kwargs):
- # """
- # From the Py3 bytes docstring:
-
- # bytes(iterable_of_ints) -> bytes
- # bytes(string, encoding[, errors]) -> bytes
- # bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
- # bytes(int) -> bytes object of size given by the parameter initialized with null bytes
- # bytes() -> empty bytes object
+
+_builtin_bytes = bytes
+
+
+class BaseOldStr(type):
+ def __instancecheck__(cls, instance):
+ return isinstance(instance, _builtin_bytes)
+
+
+def unescape(s):
+ """
+ Interprets strings with escape sequences
+
+ Example:
+ >>> s = unescape(r'abc\\def') # i.e. 'abc\\\\def'
+ >>> print(s)
+ 'abc\def'
+ >>> s2 = unescape('abc\\ndef')
+ >>> len(s2)
+ 8
+ >>> print(s2)
+ abc
+ def
+ """
+ return s.encode().decode('unicode_escape')
+
+
+class oldstr(with_metaclass(BaseOldStr, _builtin_bytes)):
+ """
+ A forward port of the Python 2 8-bit string object to Py3
+ """
+ # Python 2 strings have no __iter__ method:
+ @property
+ def __iter__(self):
+ raise AttributeError
+
+ def __dir__(self):
+ return [thing for thing in dir(_builtin_bytes) if thing != '__iter__']
+
+ # def __new__(cls, *args, **kwargs):
+ # """
+ # From the Py3 bytes docstring:
+
+ # bytes(iterable_of_ints) -> bytes
+ # bytes(string, encoding[, errors]) -> bytes
+ # bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
+ # bytes(int) -> bytes object of size given by the parameter initialized with null bytes
+ # bytes() -> empty bytes object
#
- # Construct an immutable array of bytes from:
- # - an iterable yielding integers in range(256)
- # - a text string encoded using the specified encoding
- # - any object implementing the buffer API.
- # - an integer
- # """
+ # Construct an immutable array of bytes from:
+ # - an iterable yielding integers in range(256)
+ # - a text string encoded using the specified encoding
+ # - any object implementing the buffer API.
+ # - an integer
+ # """
#
- # if len(args) == 0:
- # return super(newbytes, cls).__new__(cls)
- # # Was: elif isinstance(args[0], newbytes):
- # # We use type() instead of the above because we're redefining
- # # this to be True for all unicode string subclasses. Warning:
- # # This may render newstr un-subclassable.
- # elif type(args[0]) == newbytes:
- # return args[0]
- # elif isinstance(args[0], _builtin_bytes):
- # value = args[0]
- # elif isinstance(args[0], unicode):
- # if 'encoding' not in kwargs:
- # raise TypeError('unicode string argument without an encoding')
- # ###
- # # Was: value = args[0].encode(**kwargs)
- # # Python 2.6 string encode() method doesn't take kwargs:
- # # Use this instead:
- # newargs = [kwargs['encoding']]
- # if 'errors' in kwargs:
- # newargs.append(kwargs['errors'])
- # value = args[0].encode(*newargs)
+ # if len(args) == 0:
+ # return super(newbytes, cls).__new__(cls)
+ # # Was: elif isinstance(args[0], newbytes):
+ # # We use type() instead of the above because we're redefining
+ # # this to be True for all unicode string subclasses. Warning:
+ # # This may render newstr un-subclassable.
+ # elif type(args[0]) == newbytes:
+ # return args[0]
+ # elif isinstance(args[0], _builtin_bytes):
+ # value = args[0]
+ # elif isinstance(args[0], unicode):
+ # if 'encoding' not in kwargs:
+ # raise TypeError('unicode string argument without an encoding')
+ # ###
+ # # Was: value = args[0].encode(**kwargs)
+ # # Python 2.6 string encode() method doesn't take kwargs:
+ # # Use this instead:
+ # newargs = [kwargs['encoding']]
+ # if 'errors' in kwargs:
+ # newargs.append(kwargs['errors'])
+ # value = args[0].encode(*newargs)
# ###
- # elif isinstance(args[0], Iterable):
- # if len(args[0]) == 0:
- # # What is this?
- # raise ValueError('unknown argument type')
- # elif len(args[0]) > 0 and isinstance(args[0][0], Integral):
- # # It's a list of integers
- # value = b''.join([chr(x) for x in args[0]])
- # else:
- # raise ValueError('item cannot be interpreted as an integer')
- # elif isinstance(args[0], Integral):
- # if args[0] < 0:
- # raise ValueError('negative count')
- # value = b'\x00' * args[0]
- # else:
- # value = args[0]
- # return super(newbytes, cls).__new__(cls, value)
-
- def __repr__(self):
- s = super(oldstr, self).__repr__() # e.g. b'abc' on Py3, b'abc' on Py3
- return s[1:]
-
- def __str__(self):
- s = super(oldstr, self).__str__() # e.g. "b'abc'" or "b'abc\\ndef'
- # TODO: fix this:
- assert s[:2] == "b'" and s[-1] == "'"
- return unescape(s[2:-1]) # e.g. 'abc' or 'abc\ndef'
-
- def __getitem__(self, y):
- if isinstance(y, Integral):
- return super(oldstr, self).__getitem__(slice(y, y+1))
- else:
- return super(oldstr, self).__getitem__(y)
-
- def __getslice__(self, *args):
- return self.__getitem__(slice(*args))
-
- def __contains__(self, key):
- if isinstance(key, int):
- return False
-
- def __native__(self):
- return bytes(self)
-
-
-__all__ = ['oldstr']
+ # elif isinstance(args[0], Iterable):
+ # if len(args[0]) == 0:
+ # # What is this?
+ # raise ValueError('unknown argument type')
+ # elif len(args[0]) > 0 and isinstance(args[0][0], Integral):
+ # # It's a list of integers
+ # value = b''.join([chr(x) for x in args[0]])
+ # else:
+ # raise ValueError('item cannot be interpreted as an integer')
+ # elif isinstance(args[0], Integral):
+ # if args[0] < 0:
+ # raise ValueError('negative count')
+ # value = b'\x00' * args[0]
+ # else:
+ # value = args[0]
+ # return super(newbytes, cls).__new__(cls, value)
+
+ def __repr__(self):
+ s = super(oldstr, self).__repr__() # e.g. b'abc' on Py3, b'abc' on Py3
+ return s[1:]
+
+ def __str__(self):
+ s = super(oldstr, self).__str__() # e.g. "b'abc'" or "b'abc\\ndef'
+ # TODO: fix this:
+ assert s[:2] == "b'" and s[-1] == "'"
+ return unescape(s[2:-1]) # e.g. 'abc' or 'abc\ndef'
+
+ def __getitem__(self, y):
+ if isinstance(y, Integral):
+ return super(oldstr, self).__getitem__(slice(y, y+1))
+ else:
+ return super(oldstr, self).__getitem__(y)
+
+ def __getslice__(self, *args):
+ return self.__getitem__(slice(*args))
+
+ def __contains__(self, key):
+ if isinstance(key, int):
+ return False
+
+ def __native__(self):
+ return bytes(self)
+
+
+__all__ = ['oldstr']
diff --git a/contrib/python/future/past/utils/__init__.py b/contrib/python/future/past/utils/__init__.py
index ef33f9efee..f6b2642df5 100644
--- a/contrib/python/future/past/utils/__init__.py
+++ b/contrib/python/future/past/utils/__init__.py
@@ -1,97 +1,97 @@
-"""
-Various non-built-in utility functions and definitions for Py2
-compatibility in Py3.
-
-For example:
-
- >>> # The old_div() function behaves like Python 2's / operator
- >>> # without "from __future__ import division"
- >>> from past.utils import old_div
- >>> old_div(3, 2) # like 3/2 in Py2
- 0
- >>> old_div(3, 2.0) # like 3/2.0 in Py2
- 1.5
-"""
-
-import sys
-import numbers
-
+"""
+Various non-built-in utility functions and definitions for Py2
+compatibility in Py3.
+
+For example:
+
+ >>> # The old_div() function behaves like Python 2's / operator
+ >>> # without "from __future__ import division"
+ >>> from past.utils import old_div
+ >>> old_div(3, 2) # like 3/2 in Py2
+ 0
+ >>> old_div(3, 2.0) # like 3/2.0 in Py2
+ 1.5
+"""
+
+import sys
+import numbers
+
PY3 = sys.version_info[0] >= 3
-PY2 = sys.version_info[0] == 2
-PYPY = hasattr(sys, 'pypy_translation_info')
-
-
-def with_metaclass(meta, *bases):
- """
- Function from jinja2/_compat.py. License: BSD.
-
- Use it like this::
-
- class BaseForm(object):
- pass
-
- class FormType(type):
- pass
-
- class Form(with_metaclass(FormType, BaseForm)):
- pass
-
- This requires a bit of explanation: the basic idea is to make a
- dummy metaclass for one level of class instantiation that replaces
- itself with the actual metaclass. Because of internal type checks
- we also need to make sure that we downgrade the custom metaclass
- for one level to something closer to type (that's why __call__ and
- __init__ comes back from type etc.).
-
- This has the advantage over six.with_metaclass of not introducing
- dummy classes into the final MRO.
- """
- class metaclass(meta):
- __call__ = type.__call__
- __init__ = type.__init__
- def __new__(cls, name, this_bases, d):
- if this_bases is None:
- return type.__new__(cls, name, (), d)
- return meta(name, bases, d)
- return metaclass('temporary_class', None, {})
-
-
-def native(obj):
- """
- On Py2, this is a no-op: native(obj) -> obj
-
- On Py3, returns the corresponding native Py3 types that are
- superclasses for forward-ported objects from Py2:
-
- >>> from past.builtins import str, dict
-
- >>> native(str(b'ABC')) # Output on Py3 follows. On Py2, output is 'ABC'
- b'ABC'
- >>> type(native(str(b'ABC')))
- bytes
-
- Existing native types on Py3 will be returned unchanged:
-
- >>> type(native(b'ABC'))
- bytes
- """
- if hasattr(obj, '__native__'):
- return obj.__native__()
- else:
- return obj
-
-
-# An alias for future.utils.old_div():
-def old_div(a, b):
- """
- Equivalent to ``a / b`` on Python 2 without ``from __future__ import
- division``.
-
- TODO: generalize this to other objects (like arrays etc.)
- """
- if isinstance(a, numbers.Integral) and isinstance(b, numbers.Integral):
- return a // b
- else:
- return a / b
-
-__all__ = ['PY3', 'PY2', 'PYPY', 'with_metaclass', 'native', 'old_div']
+PY2 = sys.version_info[0] == 2
+PYPY = hasattr(sys, 'pypy_translation_info')
+
+
+def with_metaclass(meta, *bases):
+ """
+ Function from jinja2/_compat.py. License: BSD.
+
+ Use it like this::
+
+ class BaseForm(object):
+ pass
+
+ class FormType(type):
+ pass
+
+ class Form(with_metaclass(FormType, BaseForm)):
+ pass
+
+ This requires a bit of explanation: the basic idea is to make a
+ dummy metaclass for one level of class instantiation that replaces
+ itself with the actual metaclass. Because of internal type checks
+ we also need to make sure that we downgrade the custom metaclass
+ for one level to something closer to type (that's why __call__ and
+ __init__ comes back from type etc.).
+
+ This has the advantage over six.with_metaclass of not introducing
+ dummy classes into the final MRO.
+ """
+ class metaclass(meta):
+ __call__ = type.__call__
+ __init__ = type.__init__
+ def __new__(cls, name, this_bases, d):
+ if this_bases is None:
+ return type.__new__(cls, name, (), d)
+ return meta(name, bases, d)
+ return metaclass('temporary_class', None, {})
+
+
+def native(obj):
+ """
+ On Py2, this is a no-op: native(obj) -> obj
+
+ On Py3, returns the corresponding native Py3 types that are
+ superclasses for forward-ported objects from Py2:
+
+ >>> from past.builtins import str, dict
+
+ >>> native(str(b'ABC')) # Output on Py3 follows. On Py2, output is 'ABC'
+ b'ABC'
+ >>> type(native(str(b'ABC')))
+ bytes
+
+ Existing native types on Py3 will be returned unchanged:
+
+ >>> type(native(b'ABC'))
+ bytes
+ """
+ if hasattr(obj, '__native__'):
+ return obj.__native__()
+ else:
+ return obj
+
+
+# An alias for future.utils.old_div():
+def old_div(a, b):
+ """
+ Equivalent to ``a / b`` on Python 2 without ``from __future__ import
+ division``.
+
+ TODO: generalize this to other objects (like arrays etc.)
+ """
+ if isinstance(a, numbers.Integral) and isinstance(b, numbers.Integral):
+ return a // b
+ else:
+ return a / b
+
+__all__ = ['PY3', 'PY2', 'PYPY', 'with_metaclass', 'native', 'old_div']
diff --git a/contrib/python/future/ya.make b/contrib/python/future/ya.make
index 6241251f64..ba24f13341 100644
--- a/contrib/python/future/ya.make
+++ b/contrib/python/future/ya.make
@@ -126,15 +126,15 @@ PY_SRCS(
future/types/newstr.py
future/utils/__init__.py
future/utils/surrogateescape.py
- past/builtins/__init__.py
- past/builtins/misc.py
- past/builtins/noniterators.py
- past/tests/__init__.py
- past/types/__init__.py
- past/types/basestring.py
- past/types/olddict.py
- past/types/oldstr.py
- past/utils/__init__.py
+ past/builtins/__init__.py
+ past/builtins/misc.py
+ past/builtins/noniterators.py
+ past/tests/__init__.py
+ past/types/__init__.py
+ past/types/basestring.py
+ past/types/olddict.py
+ past/types/oldstr.py
+ past/utils/__init__.py
)
IF (MODULE_TAG == "PY2")
@@ -154,7 +154,7 @@ IF (MODULE_TAG == "PY2")
http/cookiejar.py
http/cookies.py
http/server.py
- past/__init__.py
+ past/__init__.py
queue/__init__.py
reprlib/__init__.py
socketserver/__init__.py
diff --git a/contrib/python/ya.make b/contrib/python/ya.make
index feb83823e1..d01ced9f3a 100644
--- a/contrib/python/ya.make
+++ b/contrib/python/ya.make
@@ -368,7 +368,7 @@ RECURSE(
faulthandler
fbprophet
feedparser
- ffmpeg-python
+ ffmpeg-python
fido2
filelock
fingerprints