PHP 8.2.30
Preview: abc.py Size: 7.87 KB
/opt/alt/python33/lib64/python3.3/abc.py

# Copyright 2007 Google, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Abstract Base Classes (ABCs) according to PEP 3119."""

from _weakrefset import WeakSet

def abstractmethod(funcobj):
    """A decorator indicating abstract methods.

    Requires that the metaclass is ABCMeta or derived from it.  A
    class that has a metaclass derived from ABCMeta cannot be
    instantiated unless all of its abstract methods are overridden.
    The abstract methods can be called using any of the normal
    'super' call mechanisms.

    Usage:

        class C(metaclass=ABCMeta):
            @abstractmethod
            def my_abstract_method(self, ...):
                ...
    """
    funcobj.__isabstractmethod__ = True
    return funcobj


class abstractclassmethod(classmethod):
    """
    A decorator indicating abstract classmethods.

    Similar to abstractmethod.

    Usage:

        class C(metaclass=ABCMeta):
            @abstractclassmethod
            def my_abstract_classmethod(cls, ...):
                ...

    'abstractclassmethod' is deprecated. Use 'classmethod' with
    'abstractmethod' instead.
    """

    __isabstractmethod__ = True

    def __init__(self, callable):
        callable.__isabstractmethod__ = True
        super().__init__(callable)


class abstractstaticmethod(staticmethod):
    """
    A decorator indicating abstract staticmethods.

    Similar to abstractmethod.

    Usage:

        class C(metaclass=ABCMeta):
            @abstractstaticmethod
            def my_abstract_staticmethod(...):
                ...

    'abstractstaticmethod' is deprecated. Use 'staticmethod' with
    'abstractmethod' instead.
    """

    __isabstractmethod__ = True

    def __init__(self, callable):
        callable.__isabstractmethod__ = True
        super().__init__(callable)


class abstractproperty(property):
    """
    A decorator indicating abstract properties.

    Requires that the metaclass is ABCMeta or derived from it.  A
    class that has a metaclass derived from ABCMeta cannot be
    instantiated unless all of its abstract properties are overridden.
    The abstract properties can be called using any of the normal
    'super' call mechanisms.

    Usage:

        class C(metaclass=ABCMeta):
            @abstractproperty
            def my_abstract_property(self):
                ...

    This defines a read-only property; you can also define a read-write
    abstract property using the 'long' form of property declaration:

        class C(metaclass=ABCMeta):
            def getx(self): ...
            def setx(self, value): ...
            x = abstractproperty(getx, setx)

    'abstractproperty' is deprecated. Use 'property' with 'abstractmethod'
    instead.
    """

    __isabstractmethod__ = True


class ABCMeta(type):

    """Metaclass for defining Abstract Base Classes (ABCs).

    Use this metaclass to create an ABC.  An ABC can be subclassed
    directly, and then acts as a mix-in class.  You can also register
    unrelated concrete classes (even built-in classes) and unrelated
    ABCs as 'virtual subclasses' -- these and their descendants will
    be considered subclasses of the registering ABC by the built-in
    issubclass() function, but the registering ABC won't show up in
    their MRO (Method Resolution Order) nor will method
    implementations defined by the registering ABC be callable (not
    even via super()).

    """

    # A global counter that is incremented each time a class is
    # registered as a virtual subclass of anything.  It forces the
    # negative cache to be cleared before its next use.
    _abc_invalidation_counter = 0

    def __new__(mcls, name, bases, namespace):
        cls = super().__new__(mcls, name, bases, namespace)
        # Compute set of abstract method names
        abstracts = {name
                     for name, value in namespace.items()
                     if getattr(value, "__isabstractmethod__", False)}
        for base in bases:
            for name in getattr(base, "__abstractmethods__", set()):
                value = getattr(cls, name, None)
                if getattr(value, "__isabstractmethod__", False):
                    abstracts.add(name)
        cls.__abstractmethods__ = frozenset(abstracts)
        # Set up inheritance registry
        cls._abc_registry = WeakSet()
        cls._abc_cache = WeakSet()
        cls._abc_negative_cache = WeakSet()
        cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter
        return cls

    def register(cls, subclass):
        """Register a virtual subclass of an ABC.

        Returns the subclass, to allow usage as a class decorator.
        """
        if not isinstance(subclass, type):
            raise TypeError("Can only register classes")
        if issubclass(subclass, cls):
            return subclass  # Already a subclass
        # Subtle: test for cycles *after* testing for "already a subclass";
        # this means we allow X.register(X) and interpret it as a no-op.
        if issubclass(cls, subclass):
            # This would create a cycle, which is bad for the algorithm below
            raise RuntimeError("Refusing to create an inheritance cycle")
        cls._abc_registry.add(subclass)
        ABCMeta._abc_invalidation_counter += 1  # Invalidate negative cache
        return subclass

    def _dump_registry(cls, file=None):
        """Debug helper to print the ABC registry."""
        print("Class: %s.%s" % (cls.__module__, cls.__name__), file=file)
        print("Inv.counter: %s" % ABCMeta._abc_invalidation_counter, file=file)
        for name in sorted(cls.__dict__.keys()):
            if name.startswith("_abc_"):
                value = getattr(cls, name)
                print("%s: %r" % (name, value), file=file)

    def __instancecheck__(cls, instance):
        """Override for isinstance(instance, cls)."""
        # Inline the cache checking
        subclass = instance.__class__
        if subclass in cls._abc_cache:
            return True
        subtype = type(instance)
        if subtype is subclass:
            if (cls._abc_negative_cache_version ==
                ABCMeta._abc_invalidation_counter and
                subclass in cls._abc_negative_cache):
                return False
            # Fall back to the subclass check.
            return cls.__subclasscheck__(subclass)
        return any(cls.__subclasscheck__(c) for c in {subclass, subtype})

    def __subclasscheck__(cls, subclass):
        """Override for issubclass(subclass, cls)."""
        # Check cache
        if subclass in cls._abc_cache:
            return True
        # Check negative cache; may have to invalidate
        if cls._abc_negative_cache_version < ABCMeta._abc_invalidation_counter:
            # Invalidate the negative cache
            cls._abc_negative_cache = WeakSet()
            cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter
        elif subclass in cls._abc_negative_cache:
            return False
        # Check the subclass hook
        ok = cls.__subclasshook__(subclass)
        if ok is not NotImplemented:
            assert isinstance(ok, bool)
            if ok:
                cls._abc_cache.add(subclass)
            else:
                cls._abc_negative_cache.add(subclass)
            return ok
        # Check if it's a direct subclass
        if cls in getattr(subclass, '__mro__', ()):
            cls._abc_cache.add(subclass)
            return True
        # Check if it's a subclass of a registered class (recursive)
        for rcls in cls._abc_registry:
            if issubclass(subclass, rcls):
                cls._abc_cache.add(subclass)
                return True
        # Check if it's a subclass of a subclass (recursive)
        for scls in cls.__subclasses__():
            if issubclass(subclass, scls):
                cls._abc_cache.add(subclass)
                return True
        # No dice; update negative cache
        cls._abc_negative_cache.add(subclass)
        return False

Directory Contents

Dirs: 30 × Files: 155

Name Size Perms Modified Actions
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
- drwxr-xr-x 2024-05-23 07:10:53
Edit Download
ctypes DIR
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
curses DIR
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
dbm DIR
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
distutils DIR
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
email DIR
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
encodings DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
html DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
http DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
idlelib DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
importlib DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
json DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
lib2to3 DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
logging DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
sqlite3 DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
test DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
unittest DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
urllib DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
venv DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
wsgiref DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
xml DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
xmlrpc DIR
- drwxr-xr-x 2024-05-23 07:03:28
Edit Download
- drwxr-xr-x 2024-05-23 07:03:27
Edit Download
7.87 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
30.33 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
475 B lrw-r--r-- 2024-04-17 16:58:16
Edit Download
86.98 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
11.86 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
11.32 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
20.27 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
13.66 KB lrwxr-xr-x 2024-04-17 16:58:17
Edit Download
21.38 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
13.39 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
2.53 KB lrw-r--r-- 2024-04-17 16:58:13
Edit Download
18.04 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
22.40 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
34.72 KB lrwxr-xr-x 2024-04-17 16:58:20
Edit Download
11.76 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
5.25 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
14.51 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
9.79 KB lrw-r--r-- 2024-04-17 16:58:16
Edit Download
35.11 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
5.85 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
3.60 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
9.51 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
48.28 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
8.91 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
8.78 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
6.46 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
6.21 KB lrwxr-xr-x 2024-04-17 16:58:14
Edit Download
1.83 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
15.81 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
73.20 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
223.20 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
80.58 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
9.90 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
100.52 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
2.75 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
9.37 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
13.92 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
3.09 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
14.58 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
22.49 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
39.31 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
13.28 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
3.02 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
7.31 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
5.66 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
20.15 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
2.77 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
23.83 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
6.05 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
17.58 KB lrw-r--r-- 2024-04-17 16:58:13
Edit Download
4.34 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
48.94 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
3.45 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
9.50 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
77.11 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
3.20 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
68.66 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
2.01 KB lrwxr-xr-x 2024-04-17 16:58:20
Edit Download
3.77 KB lrw-r--r-- 2024-04-17 16:58:16
Edit Download
91.03 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
17.04 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
5.49 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
2.67 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
77.24 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
7.26 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
20.25 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
22.65 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
5.61 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
41.78 KB lrw-r--r-- 2024-04-17 16:58:13
Edit Download
19.96 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
2.34 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
10.15 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
4.98 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
58.93 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
33.96 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
4.55 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
59.23 KB lrwxr-xr-x 2024-04-17 16:58:16
Edit Download
46.74 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
79.44 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
8.71 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
21.03 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
49.55 KB lrwxr-xr-x 2024-04-17 16:58:15
Edit Download
14.43 KB lrw-r--r-- 2024-04-17 16:58:13
Edit Download
11.11 KB lrw-r--r-- 2024-04-17 16:58:13
Edit Download
13.92 KB lrw-r--r-- 2024-04-17 16:58:16
Edit Download
12.40 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
20.95 KB lrwxr-xr-x 2024-04-17 16:58:17
Edit Download
25.75 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
4.94 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
13.12 KB lrw-r--r-- 2024-04-17 16:58:13
Edit Download
99.26 KB lrwxr-xr-x 2024-04-17 16:58:15
Edit Download
6.56 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
8.63 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
7.14 KB lrwxr-xr-x 2024-04-17 16:58:20
Edit Download
25.06 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
14.62 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
4.99 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
5.40 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
10.17 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
6.25 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
8.05 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
11.23 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
38.23 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
21.46 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
29.50 KB lrwxr-xr-x 2024-04-17 16:58:16
Edit Download
37.13 KB lrwxr-xr-x 2024-04-17 16:58:14
Edit Download
6.07 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
14.56 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
23.63 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
15.96 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
7.06 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
29.50 KB lrw-r--r-- 2024-04-17 16:58:16
Edit Download
23.90 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
4.20 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
9.19 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
12.61 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
238 B lrw-r--r-- 2024-04-17 16:58:16
Edit Download
65.99 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
17.11 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
2.00 KB lrwxr-xr-x 2024-04-17 16:58:14
Edit Download
7.21 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
24.58 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
11.14 KB lrwxr-xr-x 2024-04-17 16:58:20
Edit Download
86.78 KB lrwxr-xr-x 2024-04-17 16:58:15
Edit Download
26.71 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
22.47 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
16.10 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
1003 B lrw-r--r-- 2024-04-17 16:58:17
Edit Download
44.57 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
12.10 KB lrwxr-xr-x 2024-04-17 16:58:15
Edit Download
2.96 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
24.29 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
30.75 KB lrwxr-xr-x 2024-04-17 16:58:13
Edit Download
11.70 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
879 B lrw-r--r-- 2024-04-17 16:58:13
Edit Download
3.09 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
6.61 KB lrwxr-xr-x 2024-04-17 16:58:14
Edit Download
21.83 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
13.50 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
18.14 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
11.23 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
22.38 KB lrwxr-xr-x 2024-04-17 16:58:20
Edit Download
5.25 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
64.87 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
4.24 KB lrw-r--r-- 2024-04-17 16:58:19
Edit Download
4.66 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
14.26 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
18.41 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
71.20 KB lrw-r--r-- 2024-04-17 16:58:17
Edit Download
21.17 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
22.31 KB lrw-r--r-- 2024-04-17 16:58:20
Edit Download
7.24 KB lrw-r--r-- 2024-04-17 16:58:15
Edit Download
5.57 KB lrw-r--r-- 2024-04-17 16:58:14
Edit Download
4.48 KB lrw-r--r-- 2024-04-17 16:58:21
Edit Download
64 B lrw-r--r-- 2024-04-17 16:58:20
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).