aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/deprecated/python/backports-abc
diff options
context:
space:
mode:
authornkozlovskiy <nmk@ydb.tech>2023-10-02 18:57:38 +0300
committernkozlovskiy <nmk@ydb.tech>2023-10-02 19:39:06 +0300
commit6295ef4d23465c11296e898b9dc4524ad9592b5d (patch)
treefc0c852877b2c52f365a1f6ed0710955844338c2 /contrib/deprecated/python/backports-abc
parentde63c80b75948ecc13894854514d147840ff8430 (diff)
downloadydb-6295ef4d23465c11296e898b9dc4524ad9592b5d.tar.gz
oss ydb: fix dstool building and test run
Diffstat (limited to 'contrib/deprecated/python/backports-abc')
-rw-r--r--contrib/deprecated/python/backports-abc/.dist-info/METADATA106
-rw-r--r--contrib/deprecated/python/backports-abc/.dist-info/top_level.txt1
-rw-r--r--contrib/deprecated/python/backports-abc/LICENSE254
-rw-r--r--contrib/deprecated/python/backports-abc/README.rst46
-rw-r--r--contrib/deprecated/python/backports-abc/backports_abc.py216
-rw-r--r--contrib/deprecated/python/backports-abc/ya.make22
6 files changed, 645 insertions, 0 deletions
diff --git a/contrib/deprecated/python/backports-abc/.dist-info/METADATA b/contrib/deprecated/python/backports-abc/.dist-info/METADATA
new file mode 100644
index 0000000000..40e0734c37
--- /dev/null
+++ b/contrib/deprecated/python/backports-abc/.dist-info/METADATA
@@ -0,0 +1,106 @@
+Metadata-Version: 2.0
+Name: backports-abc
+Version: 0.5
+Summary: A backport of recent additions to the 'collections.abc' module.
+Home-page: https://github.com/cython/backports_abc
+Author: Stefan Behnel et al.
+Author-email: cython-devel@python.org
+License: UNKNOWN
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: Python Software Foundation License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 3
+
+=============
+ABC-Backports
+=============
+
+Usage:
+
+.. code-block:: python
+
+ try:
+ # ABCs live in "collections.abc" in Python >= 3.3
+ from collections.abc import Coroutine, Generator
+ except ImportError:
+ # fall back to import from "backports_abc"
+ from backports_abc import Coroutine, Generator
+
+You can also install the ABCs into the stdlib by calling the ``patch()``
+function:
+
+.. code-block:: python
+
+ import backports_abc
+ backports_abc.patch()
+
+ try:
+ # ABCs live in "collections.abc" in Python >= 3.3
+ from collections.abc import Coroutine, Generator
+ except ImportError:
+ # fall back to import from "collections" in Python <= 3.2
+ from backports_abc import Coroutine, Generator
+
+Currently, ``patch()`` provides the following names if missing:
+
+* ``collections.abc.Generator``
+* ``collections.abc.Awaitable``
+* ``collections.abc.Coroutine``
+* ``inspect.isawaitable(obj)``
+
+All of them are also available directly from the ``backports_abc``
+module namespace.
+
+In Python 2.x and Python 3.2, it patches the ``collections`` module
+instead of the ``collections.abc`` module. Any names that are already
+available when importing this module will not be overwritten.
+
+The names that were previously patched by ``patch()`` can be queried
+through the mapping in ``backports_abc.PATCHED``.
+
+Changelog
+=========
+
+0.5 (2016-11-12)
+----------------
+
+* support old-style (mro-missing) classes
+
+0.4 (2015-09-14)
+----------------
+
+* direct wheel building support
+
+* make all names available at the module level instead of requiring patching
+
+
+0.3 (2015-07-03)
+----------------
+
+* removed patching of ``inspect.iscoroutine()`` as it is not ABC based
+
+
+0.2 (2015-07-03)
+----------------
+
+* require explicit ``backports_abc.patch()`` call to do the patching
+ (avoids side-effects on import and allows future configuration)
+
+* provide access to patched names through global ``PATCHED`` dict
+
+* add ABC based implementations of inspect.iscoroutine() and
+ inspect.isawaitable()
+
+
+0.1 (2015-06-24)
+----------------
+
+* initial public release
+
+* provided ABCs: Generator, Coroutine, Awaitable
+
+
diff --git a/contrib/deprecated/python/backports-abc/.dist-info/top_level.txt b/contrib/deprecated/python/backports-abc/.dist-info/top_level.txt
new file mode 100644
index 0000000000..2fff0c3c21
--- /dev/null
+++ b/contrib/deprecated/python/backports-abc/.dist-info/top_level.txt
@@ -0,0 +1 @@
+backports_abc
diff --git a/contrib/deprecated/python/backports-abc/LICENSE b/contrib/deprecated/python/backports-abc/LICENSE
new file mode 100644
index 0000000000..88251f5b6e
--- /dev/null
+++ b/contrib/deprecated/python/backports-abc/LICENSE
@@ -0,0 +1,254 @@
+A. HISTORY OF THE SOFTWARE
+==========================
+
+Python was created in the early 1990s by Guido van Rossum at Stichting
+Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
+as a successor of a language called ABC. Guido remains Python's
+principal author, although it includes many contributions from others.
+
+In 1995, Guido continued his work on Python at the Corporation for
+National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
+in Reston, Virginia where he released several versions of the
+software.
+
+In May 2000, Guido and the Python core development team moved to
+BeOpen.com to form the BeOpen PythonLabs team. In October of the same
+year, the PythonLabs team moved to Digital Creations (now Zope
+Corporation, see http://www.zope.com). In 2001, the Python Software
+Foundation (PSF, see http://www.python.org/psf/) was formed, a
+non-profit organization created specifically to own Python-related
+Intellectual Property. Zope Corporation is a sponsoring member of
+the PSF.
+
+All Python releases are Open Source (see http://www.opensource.org for
+the Open Source Definition). Historically, most, but not all, Python
+releases have also been GPL-compatible; the table below summarizes
+the various releases.
+
+ Release Derived Year Owner GPL-
+ from compatible? (1)
+
+ 0.9.0 thru 1.2 1991-1995 CWI yes
+ 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
+ 1.6 1.5.2 2000 CNRI no
+ 2.0 1.6 2000 BeOpen.com no
+ 1.6.1 1.6 2001 CNRI yes (2)
+ 2.1 2.0+1.6.1 2001 PSF no
+ 2.0.1 2.0+1.6.1 2001 PSF yes
+ 2.1.1 2.1+2.0.1 2001 PSF yes
+ 2.1.2 2.1.1 2002 PSF yes
+ 2.1.3 2.1.2 2002 PSF yes
+ 2.2 and above 2.1.1 2001-now PSF yes
+
+Footnotes:
+
+(1) GPL-compatible doesn't mean that we're distributing Python under
+ the GPL. All Python licenses, unlike the GPL, let you distribute
+ a modified version without making your changes open source. The
+ GPL-compatible licenses make it possible to combine Python with
+ other software that is released under the GPL; the others don't.
+
+(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
+ because its license has a choice of law clause. According to
+ CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
+ is "not incompatible" with the GPL.
+
+Thanks to the many outside volunteers who have worked under Guido's
+direction to make these releases possible.
+
+
+B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
+===============================================================
+
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF hereby
+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
+analyze, test, perform and/or display publicly, prepare derivative works,
+distribute, and otherwise use Python alone or in any derivative version,
+provided, however, that PSF's License Agreement and PSF's notice of copyright,
+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved"
+are retained in Python alone or in any derivative version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee. This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
+-------------------------------------------
+
+BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
+
+1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
+office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
+Individual or Organization ("Licensee") accessing and otherwise using
+this software in source or binary form and its associated
+documentation ("the Software").
+
+2. Subject to the terms and conditions of this BeOpen Python License
+Agreement, BeOpen hereby grants Licensee a non-exclusive,
+royalty-free, world-wide license to reproduce, analyze, test, perform
+and/or display publicly, prepare derivative works, distribute, and
+otherwise use the Software alone or in any derivative version,
+provided, however, that the BeOpen Python License is retained in the
+Software, alone or in any derivative version prepared by Licensee.
+
+3. BeOpen is making the Software available to Licensee on an "AS IS"
+basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
+SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
+AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
+DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+5. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+6. This License Agreement shall be governed by and interpreted in all
+respects by the law of the State of California, excluding conflict of
+law provisions. Nothing in this License Agreement shall be deemed to
+create any relationship of agency, partnership, or joint venture
+between BeOpen and Licensee. This License Agreement does not grant
+permission to use BeOpen trademarks or trade names in a trademark
+sense to endorse or promote products or services of Licensee, or any
+third party. As an exception, the "BeOpen Python" logos available at
+http://www.pythonlabs.com/logos.html may be used according to the
+permissions granted on that web page.
+
+7. By copying, installing or otherwise using the software, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
+---------------------------------------
+
+1. This LICENSE AGREEMENT is between the Corporation for National
+Research Initiatives, having an office at 1895 Preston White Drive,
+Reston, VA 20191 ("CNRI"), and the Individual or Organization
+("Licensee") accessing and otherwise using Python 1.6.1 software in
+source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, CNRI
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python 1.6.1
+alone or in any derivative version, provided, however, that CNRI's
+License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
+1995-2001 Corporation for National Research Initiatives; All Rights
+Reserved" are retained in Python 1.6.1 alone or in any derivative
+version prepared by Licensee. Alternately, in lieu of CNRI's License
+Agreement, Licensee may substitute the following text (omitting the
+quotes): "Python 1.6.1 is made available subject to the terms and
+conditions in CNRI's License Agreement. This Agreement together with
+Python 1.6.1 may be located on the Internet using the following
+unique, persistent identifier (known as a handle): 1895.22/1013. This
+Agreement may also be obtained from a proxy server on the Internet
+using the following URL: http://hdl.handle.net/1895.22/1013".
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python 1.6.1 or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python 1.6.1.
+
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
+basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. This License Agreement shall be governed by the federal
+intellectual property law of the United States, including without
+limitation the federal copyright law, and, to the extent such
+U.S. federal law does not apply, by the law of the Commonwealth of
+Virginia, excluding Virginia's conflict of law provisions.
+Notwithstanding the foregoing, with regard to derivative works based
+on Python 1.6.1 that incorporate non-separable material that was
+previously distributed under the GNU General Public License (GPL), the
+law of the Commonwealth of Virginia shall govern this License
+Agreement only as to issues arising under or with respect to
+Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
+License Agreement shall be deemed to create any relationship of
+agency, partnership, or joint venture between CNRI and Licensee. This
+License Agreement does not grant permission to use CNRI trademarks or
+trade name in a trademark sense to endorse or promote products or
+services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying,
+installing or otherwise using Python 1.6.1, Licensee agrees to be
+bound by the terms and conditions of this License Agreement.
+
+ ACCEPT
+
+
+CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
+--------------------------------------------------
+
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
+The Netherlands. All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/contrib/deprecated/python/backports-abc/README.rst b/contrib/deprecated/python/backports-abc/README.rst
new file mode 100644
index 0000000000..06cf94aefd
--- /dev/null
+++ b/contrib/deprecated/python/backports-abc/README.rst
@@ -0,0 +1,46 @@
+=============
+ABC-Backports
+=============
+
+Usage:
+
+.. code-block:: python
+
+ try:
+ # ABCs live in "collections.abc" in Python >= 3.3
+ from collections.abc import Coroutine, Generator
+ except ImportError:
+ # fall back to import from "backports_abc"
+ from backports_abc import Coroutine, Generator
+
+You can also install the ABCs into the stdlib by calling the ``patch()``
+function:
+
+.. code-block:: python
+
+ import backports_abc
+ backports_abc.patch()
+
+ try:
+ # ABCs live in "collections.abc" in Python >= 3.3
+ from collections.abc import Coroutine, Generator
+ except ImportError:
+ # fall back to import from "collections" in Python <= 3.2
+ from backports_abc import Coroutine, Generator
+
+Currently, ``patch()`` provides the following names if missing:
+
+* ``collections.abc.Generator``
+* ``collections.abc.Awaitable``
+* ``collections.abc.Coroutine``
+* ``inspect.isawaitable(obj)``
+
+All of them are also available directly from the ``backports_abc``
+module namespace.
+
+In Python 2.x and Python 3.2, it patches the ``collections`` module
+instead of the ``collections.abc`` module. Any names that are already
+available when importing this module will not be overwritten.
+
+The names that were previously patched by ``patch()`` can be queried
+through the mapping in ``backports_abc.PATCHED``.
diff --git a/contrib/deprecated/python/backports-abc/backports_abc.py b/contrib/deprecated/python/backports-abc/backports_abc.py
new file mode 100644
index 0000000000..da4cb32983
--- /dev/null
+++ b/contrib/deprecated/python/backports-abc/backports_abc.py
@@ -0,0 +1,216 @@
+"""
+Patch recently added ABCs into the standard lib module
+``collections.abc`` (Py3) or ``collections`` (Py2).
+
+Usage::
+
+ import backports_abc
+ backports_abc.patch()
+
+or::
+
+ try:
+ from collections.abc import Generator
+ except ImportError:
+ from backports_abc import Generator
+"""
+
+try:
+ import collections.abc as _collections_abc
+except ImportError:
+ import collections as _collections_abc
+
+
+def get_mro(cls):
+ try:
+ return cls.__mro__
+ except AttributeError:
+ return old_style_mro(cls)
+
+
+def old_style_mro(cls):
+ yield cls
+ for base in cls.__bases__:
+ for c in old_style_mro(base):
+ yield c
+
+
+def mk_gen():
+ from abc import abstractmethod
+
+ required_methods = (
+ '__iter__', '__next__' if hasattr(iter(()), '__next__') else 'next',
+ 'send', 'throw', 'close')
+
+ class Generator(_collections_abc.Iterator):
+ __slots__ = ()
+
+ if '__next__' in required_methods:
+ def __next__(self):
+ return self.send(None)
+ else:
+ def next(self):
+ return self.send(None)
+
+ @abstractmethod
+ def send(self, value):
+ raise StopIteration
+
+ @abstractmethod
+ def throw(self, typ, val=None, tb=None):
+ if val is None:
+ if tb is None:
+ raise typ
+ val = typ()
+ if tb is not None:
+ val = val.with_traceback(tb)
+ raise val
+
+ def close(self):
+ try:
+ self.throw(GeneratorExit)
+ except (GeneratorExit, StopIteration):
+ pass
+ else:
+ raise RuntimeError('generator ignored GeneratorExit')
+
+ @classmethod
+ def __subclasshook__(cls, C):
+ if cls is Generator:
+ mro = get_mro(C)
+ for method in required_methods:
+ for base in mro:
+ if method in base.__dict__:
+ break
+ else:
+ return NotImplemented
+ return True
+ return NotImplemented
+
+ generator = type((lambda: (yield))())
+ Generator.register(generator)
+ return Generator
+
+
+def mk_awaitable():
+ from abc import abstractmethod, ABCMeta
+
+ @abstractmethod
+ def __await__(self):
+ yield
+
+ @classmethod
+ def __subclasshook__(cls, C):
+ if cls is Awaitable:
+ for B in get_mro(C):
+ if '__await__' in B.__dict__:
+ if B.__dict__['__await__']:
+ return True
+ break
+ return NotImplemented
+
+ # calling metaclass directly as syntax differs in Py2/Py3
+ Awaitable = ABCMeta('Awaitable', (), {
+ '__slots__': (),
+ '__await__': __await__,
+ '__subclasshook__': __subclasshook__,
+ })
+
+ return Awaitable
+
+
+def mk_coroutine():
+ from abc import abstractmethod
+
+ class Coroutine(Awaitable):
+ __slots__ = ()
+
+ @abstractmethod
+ def send(self, value):
+ """Send a value into the coroutine.
+ Return next yielded value or raise StopIteration.
+ """
+ raise StopIteration
+
+ @abstractmethod
+ def throw(self, typ, val=None, tb=None):
+ """Raise an exception in the coroutine.
+ Return next yielded value or raise StopIteration.
+ """
+ if val is None:
+ if tb is None:
+ raise typ
+ val = typ()
+ if tb is not None:
+ val = val.with_traceback(tb)
+ raise val
+
+ def close(self):
+ """Raise GeneratorExit inside coroutine.
+ """
+ try:
+ self.throw(GeneratorExit)
+ except (GeneratorExit, StopIteration):
+ pass
+ else:
+ raise RuntimeError('coroutine ignored GeneratorExit')
+
+ @classmethod
+ def __subclasshook__(cls, C):
+ if cls is Coroutine:
+ mro = get_mro(C)
+ for method in ('__await__', 'send', 'throw', 'close'):
+ for base in mro:
+ if method in base.__dict__:
+ break
+ else:
+ return NotImplemented
+ return True
+ return NotImplemented
+
+ return Coroutine
+
+
+###
+# make all ABCs available in this module
+
+try:
+ Generator = _collections_abc.Generator
+except AttributeError:
+ Generator = mk_gen()
+
+try:
+ Awaitable = _collections_abc.Awaitable
+except AttributeError:
+ Awaitable = mk_awaitable()
+
+try:
+ Coroutine = _collections_abc.Coroutine
+except AttributeError:
+ Coroutine = mk_coroutine()
+
+try:
+ from inspect import isawaitable
+except ImportError:
+ def isawaitable(obj):
+ return isinstance(obj, Awaitable)
+
+
+###
+# allow patching the stdlib
+
+PATCHED = {}
+
+
+def patch(patch_inspect=True):
+ """
+ Main entry point for patching the ``collections.abc`` and ``inspect``
+ standard library modules.
+ """
+ PATCHED['collections.abc.Generator'] = _collections_abc.Generator = Generator
+ PATCHED['collections.abc.Coroutine'] = _collections_abc.Coroutine = Coroutine
+ PATCHED['collections.abc.Awaitable'] = _collections_abc.Awaitable = Awaitable
+
+ if patch_inspect:
+ import inspect
+ PATCHED['inspect.isawaitable'] = inspect.isawaitable = isawaitable
diff --git a/contrib/deprecated/python/backports-abc/ya.make b/contrib/deprecated/python/backports-abc/ya.make
new file mode 100644
index 0000000000..cc0330f80d
--- /dev/null
+++ b/contrib/deprecated/python/backports-abc/ya.make
@@ -0,0 +1,22 @@
+# Generated by devtools/yamaker (pypi).
+
+PY2_LIBRARY()
+
+VERSION(0.5)
+
+LICENSE(PSF-2.0)
+
+NO_LINT()
+
+PY_SRCS(
+ TOP_LEVEL
+ backports_abc.py
+)
+
+RESOURCE_FILES(
+ PREFIX contrib/deprecated/python/backports-abc/
+ .dist-info/METADATA
+ .dist-info/top_level.txt
+)
+
+END()