⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utils.py

📁 SQLAlchemy. 经典的Python ORM框架。学习必看。
💻 PY
字号:
import testenv; testenv.configure_for_tests()import unittestfrom sqlalchemy import util, sql, exceptionsfrom testlib import *from testlib import sortedclass OrderedDictTest(TestBase):    def test_odict(self):        o = util.OrderedDict()        o['a'] = 1        o['b'] = 2        o['snack'] = 'attack'        o['c'] = 3        self.assert_(o.keys() == ['a', 'b', 'snack', 'c'])        self.assert_(o.values() == [1, 2, 'attack', 3])        o.pop('snack')        self.assert_(o.keys() == ['a', 'b', 'c'])        self.assert_(o.values() == [1, 2, 3])        o2 = util.OrderedDict(d=4)        o2['e'] = 5        self.assert_(o2.keys() == ['d', 'e'])        self.assert_(o2.values() == [4, 5])        o.update(o2)        self.assert_(o.keys() == ['a', 'b', 'c', 'd', 'e'])        self.assert_(o.values() == [1, 2, 3, 4, 5])        o.setdefault('c', 'zzz')        o.setdefault('f', 6)        self.assert_(o.keys() == ['a', 'b', 'c', 'd', 'e', 'f'])        self.assert_(o.values() == [1, 2, 3, 4, 5, 6])class OrderedSetTest(TestBase):    def test_mutators_against_iter(self):        # testing a set modified against an iterator        o = util.OrderedSet([3,2, 4, 5])        self.assertEquals(o.difference(iter([3,4])),                          util.OrderedSet([2,5]))        self.assertEquals(o.intersection(iter([3,4, 6])),                          util.OrderedSet([3, 4]))        self.assertEquals(o.union(iter([3,4, 6])),                          util.OrderedSet([2, 3, 4, 5, 6]))class ColumnCollectionTest(TestBase):    def test_in(self):        cc = sql.ColumnCollection()        cc.add(sql.column('col1'))        cc.add(sql.column('col2'))        cc.add(sql.column('col3'))        assert 'col1' in cc        assert 'col2' in cc        try:            cc['col1'] in cc            assert False        except exceptions.ArgumentError, e:            assert str(e) == "__contains__ requires a string argument"    def test_compare(self):        cc1 = sql.ColumnCollection()        cc2 = sql.ColumnCollection()        cc3 = sql.ColumnCollection()        c1 = sql.column('col1')        c2 = c1.label('col2')        c3 = sql.column('col3')        cc1.add(c1)        cc2.add(c2)        cc3.add(c3)        assert (cc1==cc2).compare(c1 == c2)        assert not (cc1==cc3).compare(c2 == c3)class ArgSingletonTest(unittest.TestCase):    def test_cleanout(self):        util.ArgSingleton.instances.clear()        class MyClass(object):            __metaclass__ = util.ArgSingleton            def __init__(self, x, y):                self.x = x                self.y = y        m1 = MyClass(3, 4)        m2 = MyClass(1, 5)        m3 = MyClass(3, 4)        assert m1 is m3        assert m2 is not m3        assert len(util.ArgSingleton.instances) == 2        m1 = m2 = m3 = None        MyClass.dispose(MyClass)        assert len(util.ArgSingleton.instances) == 0class ImmutableSubclass(str):    passclass HashOverride(object):    def __init__(self, value=None):        self.value = value    def __hash__(self):        return hash(self.value)class EqOverride(object):    def __init__(self, value=None):        self.value = value    def __eq__(self, other):        if isinstance(other, EqOverride):            return self.value == other.value        else:            return False    def __ne__(self, other):        if isinstance(other, EqOverride):            return self.value != other.value        else:            return Trueclass HashEqOverride(object):    def __init__(self, value=None):        self.value = value    def __hash__(self):        return hash(self.value)    def __eq__(self, other):        if isinstance(other, EqOverride):            return self.value == other.value        else:            return False    def __ne__(self, other):        if isinstance(other, EqOverride):            return self.value != other.value        else:            return Trueclass IdentitySetTest(unittest.TestCase):    def assert_eq(self, identityset, expected_iterable):        expected = sorted([id(o) for o in expected_iterable])        found = sorted([id(o) for o in identityset])        self.assertEquals(found, expected)    def test_init(self):        ids = util.IdentitySet([1,2,3,2,1])        self.assert_eq(ids, [1,2,3])        ids = util.IdentitySet(ids)        self.assert_eq(ids, [1,2,3])        ids = util.IdentitySet()        self.assert_eq(ids, [])        ids = util.IdentitySet([])        self.assert_eq(ids, [])        ids = util.IdentitySet(ids)        self.assert_eq(ids, [])    def test_add(self):        for type_ in (object, ImmutableSubclass):            data = [type_(), type_()]            ids = util.IdentitySet()            for i in range(2) + range(2):                ids.add(data[i])            self.assert_eq(ids, data)        for type_ in (EqOverride, HashOverride, HashEqOverride):            data = [type_(1), type_(1), type_(2)]            ids = util.IdentitySet()            for i in range(3) + range(3):                ids.add(data[i])            self.assert_eq(ids, data)    def test_basic_sanity(self):        IdentitySet = util.IdentitySet        o1, o2, o3 = object(), object(), object()        ids = IdentitySet([o1])        ids.discard(o1)        ids.discard(o1)        ids.add(o1)        ids.remove(o1)        self.assertRaises(KeyError, ids.remove, o1)        self.assert_(ids.copy() == ids)        self.assert_(ids != None)        self.assert_(not(ids == None))        self.assert_(ids != IdentitySet([o1,o2,o3]))        ids.clear()        self.assert_(o1 not in ids)        ids.add(o2)        self.assert_(o2 in ids)        self.assert_(ids.pop() == o2)        ids.add(o1)        self.assert_(len(ids) == 1)        isuper = IdentitySet([o1,o2])        self.assert_(ids < isuper)        self.assert_(ids.issubset(isuper))        self.assert_(isuper.issuperset(ids))        self.assert_(isuper > ids)        self.assert_(ids.union(isuper) == isuper)        self.assert_(ids | isuper == isuper)        self.assert_(isuper - ids == IdentitySet([o2]))        self.assert_(isuper.difference(ids) == IdentitySet([o2]))        self.assert_(ids.intersection(isuper) == IdentitySet([o1]))        self.assert_(ids & isuper == IdentitySet([o1]))        self.assert_(ids.symmetric_difference(isuper) == IdentitySet([o2]))        self.assert_(ids ^ isuper == IdentitySet([o2]))        ids.update(isuper)        ids |= isuper        ids.difference_update(isuper)        ids -= isuper        ids.intersection_update(isuper)        ids &= isuper        ids.symmetric_difference_update(isuper)        ids ^= isuper        ids.update('foobar')        try:            ids |= 'foobar'            self.assert_(False)        except TypeError:            self.assert_(True)        try:            s = set([o1,o2])            s |= ids            self.assert_(False)        except TypeError:            self.assert_(True)        self.assertRaises(TypeError, cmp, ids)        self.assertRaises(TypeError, hash, ids)    def test_difference(self):        os1 = util.IdentitySet([1,2,3])        os2 = util.IdentitySet([3,4,5])        s1 = set([1,2,3])        s2 = set([3,4,5])        self.assertEquals(os1 - os2, util.IdentitySet([1, 2]))        self.assertEquals(os2 - os1, util.IdentitySet([4, 5]))        self.assertRaises(TypeError, lambda: os1 - s2)        self.assertRaises(TypeError, lambda: os1 - [3, 4, 5])        self.assertRaises(TypeError, lambda: s1 - os2)        self.assertRaises(TypeError, lambda: s1 - [3, 4, 5])class DictlikeIteritemsTest(unittest.TestCase):    baseline = set([('a', 1), ('b', 2), ('c', 3)])    def _ok(self, instance):        iterator = util.dictlike_iteritems(instance)        self.assertEquals(set(iterator), self.baseline)    def _notok(self, instance):        self.assertRaises(TypeError,                          util.dictlike_iteritems,                          instance)    def test_dict(self):        d = dict(a=1,b=2,c=3)        self._ok(d)    def test_subdict(self):        class subdict(dict):            pass        d = subdict(a=1,b=2,c=3)        self._ok(d)    def test_UserDict(self):        import UserDict        d = UserDict.UserDict(a=1,b=2,c=3)        self._ok(d)    def test_object(self):        self._notok(object())    def test_duck_1(self):        class duck1(object):            def iteritems(duck):                return iter(self.baseline)        self._ok(duck1())    def test_duck_2(self):        class duck2(object):            def items(duck):                return list(self.baseline)        self._ok(duck2())    def test_duck_3(self):        class duck3(object):            def iterkeys(duck):                return iter(['a', 'b', 'c'])            def __getitem__(duck, key):                return dict(a=1,b=2,c=3).get(key)        self._ok(duck3())    def test_duck_4(self):        class duck4(object):            def iterkeys(duck):                return iter(['a', 'b', 'c'])        self._notok(duck4())    def test_duck_5(self):        class duck5(object):            def keys(duck):                return ['a', 'b', 'c']            def get(duck, key):                return dict(a=1,b=2,c=3).get(key)        self._ok(duck5())    def test_duck_6(self):        class duck6(object):            def keys(duck):                return ['a', 'b', 'c']        self._notok(duck6())class ArgInspectionTest(TestBase):    def test_get_cls_kwargs(self):        class A(object):            def __init__(self, a):                pass        class A1(A):            def __init__(self, a1):                pass        class A11(A1):            def __init__(self, a11, **kw):                pass        class B(object):            def __init__(self, b, **kw):                pass        class B1(B):            def __init__(self, b1, **kw):                pass        class AB(A, B):            def __init__(self, ab):                pass        class BA(B, A):            def __init__(self, ba, **kwargs):                pass        class BA1(BA):            pass        class CAB(A, B):            pass        class CBA(B, A):            pass        class CAB1(A, B1):            pass        class CB1A(B1, A):            pass        class D(object):            pass        def test(cls, *expected):            self.assertEquals(set(util.get_cls_kwargs(cls)), set(expected))        test(A, 'a')        test(A1, 'a1')        test(A11, 'a11', 'a1')        test(B, 'b')        test(B1, 'b1', 'b')        test(AB, 'ab')        test(BA, 'ba', 'b', 'a')        test(BA1, 'ba', 'b', 'a')        test(CAB, 'a')        test(CBA, 'b')        test(CAB1, 'a')        test(CB1A, 'b1', 'b')        test(D)    def test_get_func_kwargs(self):        def f1(): pass        def f2(foo): pass        def f3(*foo): pass        def f4(**foo): pass        def test(fn, *expected):            self.assertEquals(set(util.get_func_kwargs(fn)), set(expected))        test(f1)        test(f2, 'foo')        test(f3)        test(f4)if __name__ == "__main__":    testenv.main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -