Blame tests/run/__getattribute_subclasses__.pyx

Packit Service 99d393
# mode: run
Packit Service 99d393
Packit Service 99d393
# __getattribute__ and __getattr__ special methods and subclasses.
Packit Service 99d393
Packit Service 99d393
cdef class boring:
Packit Service 99d393
    cdef readonly int boring_member
Packit Service 99d393
    cdef readonly int getattr_called
Packit Service 99d393
    cdef int getattribute_called
Packit Service 99d393
    def __init__(self):
Packit Service 99d393
        self.boring_member = 10
Packit Service 99d393
Packit Service 99d393
cdef class getattr_boring(boring):
Packit Service 99d393
    """
Packit Service 99d393
    getattr does not override members.
Packit Service 99d393
Packit Service 99d393
    >>> a = getattr_boring()
Packit Service 99d393
    >>> a.boring_member
Packit Service 99d393
    10
Packit Service 99d393
    >>> a.getattr_called
Packit Service 99d393
    0
Packit Service 99d393
    >>> print(a.resolved_by)
Packit Service 99d393
    getattr_boring
Packit Service 99d393
    >>> a.getattr_called
Packit Service 99d393
    1
Packit Service 99d393
    >>> a.no_such_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> a.getattr_called
Packit Service 99d393
    2
Packit Service 99d393
    """
Packit Service 99d393
    def __getattr__(self,n):
Packit Service 99d393
        self.getattr_called += 1
Packit Service 99d393
        if n == 'resolved_by':
Packit Service 99d393
            return 'getattr_boring'
Packit Service 99d393
        elif n == 'getattr_boring':
Packit Service 99d393
            return True
Packit Service 99d393
        else:
Packit Service 99d393
            raise AttributeError
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
# currently fails, see #1793
Packit Service 99d393
#class getattr_boring_py(getattr_boring):
Packit Service 99d393
#    __doc__ = getattr_boring.__doc__.replace(
Packit Service 99d393
#        'getattr_boring()', 'getattr_boring_py()')
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
cdef class getattribute_boring(boring):
Packit Service 99d393
    """
Packit Service 99d393
    getattribute overrides members.
Packit Service 99d393
Packit Service 99d393
    >>> a = getattribute_boring()
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    1
Packit Service 99d393
    >>> a.boring_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    3
Packit Service 99d393
    >>> print(a.resolved_by)
Packit Service 99d393
    getattribute_boring
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    5
Packit Service 99d393
    >>> a.no_such_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    7
Packit Service 99d393
    """
Packit Service 99d393
    def __getattribute__(self,n):
Packit Service 99d393
        self.getattribute_called += 1
Packit Service 99d393
        if n == 'resolved_by':
Packit Service 99d393
            return 'getattribute_boring'
Packit Service 99d393
        elif n == 'getattribute_boring':
Packit Service 99d393
            return True
Packit Service 99d393
        elif n == 'getattribute_called':
Packit Service 99d393
            return self.getattribute_called
Packit Service 99d393
        else:
Packit Service 99d393
            raise AttributeError
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
class getattribute_boring_py(getattribute_boring):
Packit Service 99d393
    __doc__ = getattribute_boring.__doc__.replace(
Packit Service 99d393
        'getattribute_boring()', 'getattribute_boring_py()')
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
cdef class _getattr:
Packit Service 99d393
    cdef readonly int getattr_called
Packit Service 99d393
    def __getattr__(self,n):
Packit Service 99d393
        self.getattr_called += 1
Packit Service 99d393
        if n == 'resolved_by':
Packit Service 99d393
            return '_getattr'
Packit Service 99d393
        elif n == '_getattr':
Packit Service 99d393
            return True
Packit Service 99d393
        elif n == 'getattr_called':
Packit Service 99d393
            # must only get here if __getattribute__ is overwritten
Packit Service 99d393
            assert 'getattribute' in type(self).__name__
Packit Service 99d393
            return self.getattr_called
Packit Service 99d393
        else:
Packit Service 99d393
            raise AttributeError
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
class getattr_py(_getattr):
Packit Service 99d393
    """
Packit Service 99d393
    getattr is inherited.
Packit Service 99d393
Packit Service 99d393
    >>> a = getattr_py()
Packit Service 99d393
    >>> a.getattr_called
Packit Service 99d393
    0
Packit Service 99d393
    >>> print(a.resolved_by)
Packit Service 99d393
    _getattr
Packit Service 99d393
    >>> a.getattr_called
Packit Service 99d393
    1
Packit Service 99d393
    >>> print(a._getattr)
Packit Service 99d393
    True
Packit Service 99d393
    >>> a.getattr_called
Packit Service 99d393
    2
Packit Service 99d393
    >>> a.no_such_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
Packit Service 99d393
    # currently fails, see #1793
Packit Service 99d393
    #>>> a.getattr_called
Packit Service 99d393
    #3
Packit Service 99d393
    """
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
cdef class _getattribute:
Packit Service 99d393
    cdef int getattribute_called
Packit Service 99d393
    def __getattribute__(self,n):
Packit Service 99d393
        self.getattribute_called += 1
Packit Service 99d393
        if n == 'resolved_by':
Packit Service 99d393
            return '_getattribute'
Packit Service 99d393
        elif n == '_getattribute':
Packit Service 99d393
            return True
Packit Service 99d393
        elif n == 'getattribute_called':
Packit Service 99d393
            return self.getattribute_called
Packit Service 99d393
        else:
Packit Service 99d393
            raise AttributeError
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
class getattribute_py(_getattribute):
Packit Service 99d393
    """
Packit Service 99d393
    getattribute is inherited.
Packit Service 99d393
Packit Service 99d393
    >>> a = getattribute_py()
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    1
Packit Service 99d393
    >>> print(a.resolved_by)
Packit Service 99d393
    _getattribute
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    3
Packit Service 99d393
    >>> print(a._getattribute)
Packit Service 99d393
    True
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    5
Packit Service 99d393
    >>> a.no_such_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    7
Packit Service 99d393
    """
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
cdef class boring_getattribute(_getattribute):
Packit Service 99d393
    cdef readonly int boring_getattribute_member
Packit Service 99d393
Packit Service 99d393
cdef class boring_boring_getattribute(boring_getattribute):
Packit Service 99d393
    """
Packit Service 99d393
    getattribute is inherited.
Packit Service 99d393
Packit Service 99d393
    >>> a = boring_boring_getattribute()
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    1
Packit Service 99d393
    >>> a.boring_getattribute_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    3
Packit Service 99d393
    >>> a.boring_boring_getattribute_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    5
Packit Service 99d393
    >>> print(a.resolved_by)
Packit Service 99d393
    _getattribute
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    7
Packit Service 99d393
    >>> a.no_such_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> a.getattribute_called
Packit Service 99d393
    9
Packit Service 99d393
    """
Packit Service 99d393
    cdef readonly int boring_boring_getattribute_member
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
class boring_boring_getattribute_py(boring_boring_getattribute):
Packit Service 99d393
    __doc__ = boring_boring_getattribute.__doc__.replace(
Packit Service 99d393
        'boring_boring_getattribute()', 'boring_boring_getattribute_py()')
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
cdef class boring_getattr(_getattr):
Packit Service 99d393
    cdef readonly int boring_getattr_member
Packit Service 99d393
Packit Service 99d393
cdef class boring_boring_getattr(boring_getattr):
Packit Service 99d393
    cdef readonly int boring_boring_getattr_member
Packit Service 99d393
Packit Service 99d393
cdef class getattribute_boring_boring_getattr(boring_boring_getattr):
Packit Service 99d393
    """
Packit Service 99d393
    __getattribute__ is always tried first, then __getattr__, regardless of where
Packit Service 99d393
    in the inheritance hierarchy they came from.
Packit Service 99d393
Packit Service 99d393
    >>> a = getattribute_boring_boring_getattr()
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (1, 2)
Packit Service 99d393
    >>> print(a.resolved_by)
Packit Service 99d393
    getattribute_boring_boring_getattr
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (2, 5)
Packit Service 99d393
    >>> a.getattribute_boring_boring_getattr
Packit Service 99d393
    True
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (3, 8)
Packit Service 99d393
    >>> a._getattr
Packit Service 99d393
    True
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (5, 11)
Packit Service 99d393
    >>> a.no_such_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (7, 14)
Packit Service 99d393
    """
Packit Service 99d393
    cdef int getattribute_called
Packit Service 99d393
    def __getattribute__(self,n):
Packit Service 99d393
        self.getattribute_called += 1
Packit Service 99d393
        if n == 'resolved_by':
Packit Service 99d393
            return 'getattribute_boring_boring_getattr'
Packit Service 99d393
        elif n == 'getattribute_boring_boring_getattr':
Packit Service 99d393
            return True
Packit Service 99d393
        elif n == 'getattribute_called':
Packit Service 99d393
            return self.getattribute_called
Packit Service 99d393
        else:
Packit Service 99d393
            raise AttributeError
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
# currently fails, see #1793
Packit Service 99d393
#class getattribute_boring_boring_getattr_py(getattribute_boring_boring_getattr):
Packit Service 99d393
#    __doc__ = getattribute_boring_boring_getattr.__doc__.replace(
Packit Service 99d393
#        'getattribute_boring_boring_getattr()', 'getattribute_boring_boring_getattr_py()')
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
cdef class getattr_boring_boring_getattribute(boring_boring_getattribute):
Packit Service 99d393
    """
Packit Service 99d393
    __getattribute__ is always tried first, then __getattr__, regardless of where
Packit Service 99d393
    in the inheritance hierarchy they came from.
Packit Service 99d393
Packit Service 99d393
    >>> a = getattr_boring_boring_getattribute()
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (1, 2)
Packit Service 99d393
    >>> print(a.resolved_by)
Packit Service 99d393
    _getattribute
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (2, 5)
Packit Service 99d393
    >>> a.getattr_boring_boring_getattribute
Packit Service 99d393
    True
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (4, 8)
Packit Service 99d393
    >>> a._getattribute
Packit Service 99d393
    True
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (5, 11)
Packit Service 99d393
    >>> a.no_such_member
Packit Service 99d393
    Traceback (most recent call last):
Packit Service 99d393
    AttributeError
Packit Service 99d393
    >>> (a.getattr_called, a.getattribute_called)
Packit Service 99d393
    (7, 14)
Packit Service 99d393
    """
Packit Service 99d393
    cdef readonly int getattr_called  # note: property will not be used due to __getattribute__()
Packit Service 99d393
    def __getattr__(self,n):
Packit Service 99d393
        self.getattr_called += 1
Packit Service 99d393
        if n == 'resolved_by':
Packit Service 99d393
            return 'getattr_boring_boring_getattribute'
Packit Service 99d393
        elif n == 'getattr_boring_boring_getattribute':
Packit Service 99d393
            return True
Packit Service 99d393
        elif n == 'getattr_called':
Packit Service 99d393
            return self.getattr_called
Packit Service 99d393
        else:
Packit Service 99d393
            raise AttributeError
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
# currently fails, see #1793
Packit Service 99d393
#class getattr_boring_boring_getattribute_py(getattr_boring_boring_getattribute):
Packit Service 99d393
#    __doc__ = getattr_boring_boring_getattribute.__doc__.replace(
Packit Service 99d393
#        'getattr_boring_boring_getattribute()', 'getattr_boring_boring_getattribute_py()')