コード例 #1
0
    def __init__(self, *anon, **mval): #{{{
        prop, values = self.p, self.v
        if not isinstance(prop, MultiValueProperties):
            raise TypeError("%s object is not a valid properties object" %prop.__class__.__name__)
        elif not isinstance(values, MultiValueValues):
            raise TypeError("%s object is not a valid values object" %values.__class__.__name__)

        if not anon and not mval:
            raise ValueError("Cannot create empty mval")
        block = ['__get__', '__getitem__']
        reserved = [n for n in mval if n in block + dir(object)]
        if reserved:
            raise AttributeError("The following attribute names are reserved: %s" %', '.join(reserved))
        tfunc, eqfunc = self._mktfunc(), self._mkeqfunc()
        if [a for a in (tfunc, eqfunc) if not iscallable(a)]:
            raise TypeError("Attempt to set transform or equals function to a non-callable")
        anon = ((k, v) for k, v in enumerate(anon))
        mval = mdict(anon, mval)
        mval.clearmerged()
#        object.__setattr__(self, '_mval', mval)
#        object.__setattr__(self, '_tfunc', tfunc)
#        object.__setattr__(self, '_eqfunc', eqfunc)
        osetattr(self, '_mval', mval)
        osetattr(self, '_tfunc', tfunc)
        osetattr(self, '_eqfunc', eqfunc)
コード例 #2
0
    def testNormalArgs(self): #{{{
        '''Normal dict args'''
        test = mdict()
        self.assertTrue(isinstance(test.merged, tuple))
        self.assertFalse(test.merged)

        # Single dict
        a = {'1':1}
        test.merge(a)
        self.assertEqual(len(test), 1)
        self.assertEqual(test.items()[0], a.items()[0])
        self.assertEqual(test.merged, tuple([a]))
        test.clear()

        # Sequence
        seq1 = 'abcdefghijk'
        a = zip(seq1, range(len(seq1)))
        expected = dict(a)
        test.merge(a)
        self.assertEqual(len(test.merged), 1)
        self.assertEqual(test, expected)
        self.assertEqual(test.merged[0], expected)
        test.clear()

        # kwargs
        test.merge(**expected)
        self.assertEqual(len(test.merged), 1)
        self.assertEqual(test, expected)
        self.assertEqual(test.merged[0], expected)
        test.clear()
コード例 #3
0
 def testKWOverrides(self): #{{{
     '''kwargs overrides values'''
     a = {'hello': 'world'}
     b = {'boo': 'ya'}
     override = {'hello': 'MY world'}
     expected = dict(a)
     expected.update(b)
     expected.update(**override)
     test = mdict(a, b, **override)
     self.assertEqual(test.merged[-1], override)
     self.assertEqual(test, expected)
コード例 #4
0
    def testMixedArgs(self): #{{{
        '''Mixed args'''
        test = mdict()

        # Mix only args
        a1 = {'1':1}
        seq1 = 'abcdefghijk'
        a2 = zip(seq1, range(len(seq1)))
        a3 = zip(range(10), range(10))
        a4 = {'hello': 'world'}
        a5 = {'nice': 'you', 'how': 'doody'}
        test.merge(a1, a2, a3, a4, a5)

        self.assertEqual(len(test.merged), 5)
        count = 0
        m = test.merged
        expected = dict()
        while count < 5:
            a = dict(eval('a%i' %(count+1)))
            self.assertEqual(m[count], a)
            expected.update(a)
            count += 1
        self.assertEqual(test, expected)