summaryrefslogtreecommitdiff
path: root/contrib/python/pypodman/lib/future_abstract.py
blob: 75a1d42dbf61dd5f131816a4885d7b51a6c17581 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"""Utilities for with-statement contexts.  See PEP 343."""

import abc

import _collections_abc

try:
    from contextlib import AbstractContextManager
except ImportError:
    # Copied from python3.7 library as "backport"
    class AbstractContextManager(abc.ABC):
        """An abstract base class for context managers."""

        def __enter__(self):
            """Return `self` upon entering the runtime context."""
            return self

        @abc.abstractmethod
        def __exit__(self, exc_type, exc_value, traceback):
            """Raise any exception triggered within the runtime context."""
            return None

        @classmethod
        def __subclasshook__(cls, C):
            """Check whether subclass is considered a subclass of this ABC."""
            if cls is AbstractContextManager:
                return _collections_abc._check_methods(C, "__enter__",
                                                       "__exit__")
            return NotImplemented