コード例 #1
0
def test_safe_repr():
    data = {
        'a': [set('b')],
        ('c', ):
        deque(['d']),
        'e':
        _socket.socket(),
        1:
        array('d', [1, 2]),
        frozenset('f'):
        socket(),
        'g':
        Dict({
            'a':
            List('123'),
            'b':
            Set([Decimal('1.0')]),
            'c':
            Stuff(1, 2),
            'd':
            Exception(1, 2, {
                'a': safe_repr,
                'b': Foobar,
                'c': Bad2(),
                'ct': Bad2,
            })
        }),
        'od':
        OrderedDict({'a': 'b'}),
        'nt':
        MyTuple(1, 2),
        'bad1':
        Bad1().method,
        'bad2':
        Bad2().method
    }
    print(safe_repr(data))
    print(safe_repr([data]))
    print(safe_repr([[data]]))
    print(safe_repr([[[data]]]))
    print(safe_repr([[[[data]]]]))
    print(safe_repr([[[[[data]]]]]))

    assert safe_repr(py.io).startswith(
        '<py._vendored_packages.apipkg.ApiModule object at 0x')
コード例 #2
0
def test_safe_repr():
    data = {
        'a': [set('b')],
        ('c',): deque(['d']),
        'e': _socket.socket(),
        1: array('d', [1, 2]),
        frozenset('f'): socket(),
        'g': Dict({
            'a': List('123'),
            'b': Set([Decimal('1.0')]),
            'c': Stuff(1, 2),
            'd': Exception(1, 2, {
                'a': safe_repr,
                'b': Foobar,
                'c': Bad2(),
                'ct': Bad2,
            })
        }),
        'od': OrderedDict({'a': 'b'}),
        'nt': MyTuple(1, 2),
        'bad1': Bad1().method,
        'bad2': Bad2().method,
        'regex': re.compile('123', 0),
        'badregex': re.compile(String('123')),
        'badregex2': re.compile(String('123'), Int(re.IGNORECASE)),
        'date': date(Int(2000), Int(1), Int(2)),
        'datetime': datetime(Int(2000), Int(1), Int(2), Int(3), Int(4), Int(5), Int(600), tzinfo=TzInfo()),
        'time': time(Int(3), Int(4), Int(5), Int(600), tzinfo=TzInfo()),
        'timedelta': timedelta(Int(1), Int(2), Int(3), Int(4), Int(5), Int(6), Int(7)),
    }
    print(re.compile(String('123'), Int(re.IGNORECASE)).match('123'))
    print(safe_repr(data))
    print(safe_repr([data]))
    print(safe_repr([[data]]))
    print(safe_repr([[[data]]]))
    print(safe_repr([[[[data]]]]))
    print(safe_repr([[[[[data]]]]]))

    assert safe_repr(py.io).startswith('<py._vendored_packages.apipkg.ApiModule object at 0x')
コード例 #3
0
def test_reliable_primitives():
    # establish a baseline for primitives that cannot be messed with descriptors and metaclasses
    side_effects = []

    class MetaMeta(type):
        @property
        def __mro__(self):
            side_effects.append('MetaMeta.__mro__')
            return [Meta, type]

        @property
        def __class__(self):
            side_effects.append('MetaMeta.__class__')
            return MetaMeta

        def __subclasscheck__(self, subclass):
            side_effects.append('MetaMeta.__subclasscheck__')
            return True

        def __instancecheck__(self, instance):
            side_effects.append('MetaMeta.__instancecheck__')
            return True

    class Meta(six.with_metaclass(MetaMeta, type)):
        @property
        def __mro__(self):
            side_effects.append('Meta.__mro__')
            return [Foobar, object]

        @property
        def __class__(self):
            side_effects.append('Meta.__class__')
            return Meta

        def __subclasscheck__(self, subclass):
            side_effects.append('Meta.__subclasscheck__')
            return True

        def __instancecheck__(self, instance):
            side_effects.append('Meta.__instancecheck__')
            return True

        @property
        def __dict__(self, _={}):
            side_effects.append('Meta.__dict__')
            return _

    class Foobar(six.with_metaclass(Meta, object)):
        @property
        def __mro__(self):
            side_effects.append('Foobar.__mro__')
            return ['?']

        @property
        def __class__(self):
            side_effects.append('Foobar.__class__')
            return Foobar

        def __subclasscheck__(self, subclass):
            side_effects.append('Foobar.__subclasscheck__')
            return True

        def __instancecheck__(self, instance):
            side_effects.append('Foobar.__instancecheck__')
            return True

        @property
        def __dict__(self):
            side_effects.append('Foobar.__dict__')
            return {}

    class SubFoobar(Foobar):
        pass

    class Plain(object):
        pass

    del side_effects[:]

    foo = Foobar()
    assert type(foo) is Foobar
    assert type(Foobar) is Meta
    assert type(foo) is Foobar
    assert Foobar.__bases__
    assert not side_effects
    isinstance(type(foo), dict)
    assert side_effects == ['Meta.__class__']

    isinstance(foo, dict)
    assert side_effects == ['Meta.__class__', 'Foobar.__class__']

    isinstance(1, Foobar)
    assert side_effects == ['Meta.__class__', 'Foobar.__class__', 'Meta.__instancecheck__']

    issubclass(type, Foobar)
    assert side_effects == ['Meta.__class__', 'Foobar.__class__', 'Meta.__instancecheck__', 'Meta.__subclasscheck__']

    assert Foobar.__mro__
    assert side_effects == ['Meta.__class__', 'Foobar.__class__', 'Meta.__instancecheck__', 'Meta.__subclasscheck__', 'Meta.__mro__']

    del side_effects[:]

    assert Meta.__mro__
    assert side_effects == ['MetaMeta.__mro__']

    assert getattr_static(Plain, '__mro__') is type.__dict__['__mro__']
    assert getattr_static(Foobar, '__mro__') is not type.__dict__['__mro__']
    assert side_effects == ['MetaMeta.__mro__']

    assert issubclass(SubFoobar, Foobar)
    assert side_effects == ['MetaMeta.__mro__', 'Meta.__subclasscheck__']

    subfoo = SubFoobar()
    assert isinstance(SubFoobar, Foobar)
    assert side_effects == ['MetaMeta.__mro__', 'Meta.__subclasscheck__', 'Meta.__instancecheck__']

    issubclass(type(SubFoobar()), Foobar)
    assert side_effects == ['MetaMeta.__mro__', 'Meta.__subclasscheck__', 'Meta.__instancecheck__', 'Meta.__subclasscheck__']

    del side_effects[:]

    isinstance(Foobar, dict)
    isinstance(type(Foobar), dict)
    isinstance(type(type(Foobar)), dict)
    issubclass(Plain, Foobar)
    issubclass(Plain, type(Foobar))
    issubclass(Plain, type(type(Foobar)))
    assert side_effects == ['Meta.__class__', 'MetaMeta.__class__', 'Meta.__subclasscheck__', 'MetaMeta.__subclasscheck__']

    del side_effects[:]

    issubclass(getattr_static(SubFoobar(), '__class__'), Foobar)
    assert side_effects[-1] == 'Meta.__subclasscheck__'

    del side_effects[:]

    getattr_static(type(SubFoobar()), '__instancecheck__')
    getattr_static(type(SubFoobar()), '__subclasscheck__')
    assert not side_effects

    safe_repr(Foobar())
    safe_repr(Foobar)
    assert not side_effects