Exemple #1
0
    def testRecursiveAttach_03_recursive_with_linked_nodes(self):
        p = TreeDict()

        p.a = p.adef.a
        p.adef.a.v = 1

        p.attach(recursive=True)
Exemple #2
0
    def testhashes_15_attaching(self):
        p1 = TreeDict('root')
        p1.b1 = TreeDict('b1')

        h = p1.hash()

        p1.attach(copy = False, recursive = True)
        
        self.assert_(p1.hash() != h)
Exemple #3
0
    def testAttaching_12_propegatingFrozenFlags(self):
        p1 = TreeDict()

        p1.a.b = TreeDict()

        p1.freeze(values_only = True)

        p1.attach('c', TreeDict() )

        self.assert_(p1.c.valuesAreFrozen())
Exemple #4
0
    def testAttaching_01(self):
        p1 = TreeDict('root')
        p2 = TreeDict('node')

        p2.a = 123
        p1.attach(p2)

        self.assert_(p1.node.a == 123)
        self.assert_(p1.node.rootNode() is p1)
        self.assert_(p2.rootNode() is p2)
Exemple #5
0
    def testAttaching_03(self):
        p1 = TreeDict('root')
        p2 = TreeDict('node')

        p2.a = 123
        p1.attach('attachnode', p2)

        self.assert_(p1.attachnode.a == 123)
        self.assert_(p1.attachnode.rootNode() is p1)
        self.assert_(p1.attachnode == p2)
        self.assert_(p1.attachnode.branchName(True,True) == "root.attachnode")
        self.assert_(p2.rootNode() is p2)
Exemple #6
0
    def testAttaching_09_frozen_2(self):
        p = TreeDict('p')
        p.b.c = 1
        p.freeze()

        p2 = TreeDict()
        p2.attach(p, copy=True)

        self.assert_(p2.p.b.c == 1)
        self.assert_(not p2.p.isFrozen())
        self.assert_(not p2.p.b.isFrozen())
        self.assert_(not p2.isFrozen())
Exemple #7
0
    def testAttaching_11_equalityTesting_01(self):

        p1 = TreeDict('root')
        p1.b1 = TreeDict('new_branch')
        p1.b1.b2 = TreeDict('new_branch')
        p1.b1.b2.b3 = TreeDict('new_branch')

        p2 = p1.copy()

        self.assert_(p2 == p1)

        p1.attach(copy=False, recursive=True)

        self.assert_(p2 != p1)
Exemple #8
0
    def testRecursiveAttach_05_ValueFrozen(self):
        # Disable; not sure it's best anyway
        return

        p1 = TreeDict('root')
        p1.b1 = TreeDict('new_branch')

        p1.freeze(values_only = True)

        self.assert_(p1.b1.isRoot())
        self.assert_(p1.b1.branchName(True,True) == 'new_branch')

        p1.attach(copy=True, recursive=True)

        self.assert_(p1.b1.rootNode() is p1)
        self.assert_(p1.b1.branchName(True,True) == 'root.b1')
Exemple #9
0
    def testBranchStructureFrozen_01(self):

        p = TreeDict()
        p.a = TreeDict(x = 1)
        p.freeze(structure_only = True)

        self.assertRaises(TypeError, lambda: p.attach(recursive = True))
Exemple #10
0
    def testAttaching_10_Atomic_01_noImplicitOverwrite(self):
        p = TreeDict()
        p.a.b = 1

        self.assertRaises(TypeError, lambda: p.attach("a.b.c.d", TreeDict(x = 1),
                                                      protect_structure=True))

        self.assert_(p.a.b == 1)
Exemple #11
0
    def testRecursiveAttach_04_error_on_frozen(self):

        p = TreeDict()
        p.b = TreeDict(x = 1)
        p.freeze()

        self.assertRaises(TypeError, lambda: p.attach(recursive = True))

        self.assert_(p.b.isRoot())
        self.assert_(p.b not in p.branches())
        self.assert_(p.size() == 1)
Exemple #12
0
    def testRecursiveAttach_01(self):
        p1 = TreeDict('root')
        p1.b1 = TreeDict('new_branch')
        p1.b1.b2 = TreeDict('new_branch')
        p1.b1.b2.b3 = TreeDict('new_branch')

        self.assert_(p1.b1.isRoot())
        self.assert_(p1.b1.b2.isRoot())
        self.assert_(p1.b1.b2.b3.isRoot())
        self.assert_(p1.b1.branchName(True,True) == 'new_branch')
        self.assert_(p1.b1.b2.branchName(True,True) == 'new_branch')
        self.assert_(p1.b1.b2.b3.branchName(True,True) == 'new_branch')

        p1.attach(copy=True, recursive=True)

        self.assert_(p1.b1.rootNode() is p1)
        self.assert_(p1.b1.b2.rootNode() is p1)
        self.assert_(p1.b1.b2.b3.rootNode() is p1)
        self.assert_(p1.b1.branchName(True,True) == 'root.b1')
        self.assert_(p1.b1.b2.branchName(True,True) == 'root.b1.b2')
        self.assert_(p1.b1.b2.b3.branchName(True,True) == 'root.b1.b2.b3')
Exemple #13
0
    def testAttaching_10_Atomic_02_noImplicitOverwrite(self):
        p = TreeDict()
        p.makeBranch('a')
        p.freeze()

        self.assert_('a' in p.keys(branch_mode = 'only', recursive=False))

        self.assertRaises(TypeError, lambda: p.attach("a.b.c.d", TreeDict(x = 1),
                                                      protect_structure=True))

        self.assert_('a' in p.keys(branch_mode = 'only', recursive=False))

        self.assert_(p.a.size() == 0)
Exemple #14
0
 def testAttaching_11_BadParameters_04(self):
     p = TreeDict()
     self.assertRaises(TypeError, lambda: p.attach(copy = False))
Exemple #15
0
# for set

from treedict import TreeDict
t = TreeDict()
t.set("x", 1)
print t.makeReport()
t.set("a", 3, "b", 4, "1badvalue", 5)
print t.makeReport()

# For attach

from treedict import TreeDict
t = TreeDict('root')
t1 = TreeDict('t1')
t.attach(t1, copy=True)
t1.rootNode()
t.t1 is t1
t.t1.rootNode()

from treedict import TreeDict
t = TreeDict('root')
t1 = TreeDict('t1')
t.attach(t1, name="new_t1", copy=False)
t1.rootNode()
t.new_t1 is t1

from treedict import TreeDict
t = TreeDict('root')
t1 = TreeDict('t1', x1=1, y1=2)
t2 = TreeDict('t2', x2=10, y2=20)
Exemple #16
0
 def testAttaching_11_BadParameters_02(self):
     p = TreeDict()
     self.assertRaises(TypeError, lambda: p.attach(TreeDict(), TreeDict()))
# for set

from treedict import TreeDict
t = TreeDict()
t.set("x", 1)
print t.makeReport()
t.set("a", 3, "b", 4, "1badvalue", 5)
print t.makeReport()

# For attach

from treedict import TreeDict
t = TreeDict('root')
t1 = TreeDict('t1')
t.attach(t1, copy = True)
t1.rootNode()
t.t1 is t1
t.t1.rootNode()

from treedict import TreeDict
t = TreeDict('root')
t1 = TreeDict('t1')
t.attach(t1, name = "new_t1", copy = False)
t1.rootNode()
t.new_t1 is t1

from treedict import TreeDict
t = TreeDict('root')
t1 = TreeDict('t1', x1 = 1, y1 = 2)
t2 = TreeDict('t2', x2 = 10, y2 = 20)
    def _check_RTE(self, keys, recursive, branch_mode, mode):

        p = TreeDict()

        for k in keys:
            p[k] = 1
            
        # Get a list of what will occur next 
        key_list = p.keys(recursive, branch_mode)

        def test_it(action, isokay = False):
            for ret_mode in ["keys", "items"]:
        
                def f():
                    n = p.size(recursive, branch_mode)

                    if ret_mode == "keys":
                        kiter = p.iterkeys(recursive, branch_mode)
                        for i, t in enumerate(kiter):
                            action(i, n, t)

                    if ret_mode == "items":
                        iiter = p.iteritems(recursive, branch_mode)
                        for i, (t,v) in enumerate(iiter):
                            action(i, n, t)

                if isokay:
                    f()
                else:
                    if p.size(recursive, branch_mode) != 0:
                        self.assertRaises(RuntimeError, f)
            
        if mode == "delete_all":
            def action(i,n,t):
                del p[t]

            test_it(action)

        if mode == "delete_last":
            def action(i,n,t):
                if i == n-1:
                    del p[t]

            test_it(action, True)

        if mode == "insert_each":
            def action(i,n,t):
                tn = unique_name()
                p[tn] = 1

            test_it(action)

        if mode == "insert_last":
            def action(i,n,t):
                if i == n-1:
                    tn = unique_name()
                    p[tn] = 1

            test_it(action, True)
            
        if mode == "insert_middle":
            def action(i,n,t):
                if i >= n // 2:
                    tn = unique_name()
                    p[tn] = 1

            test_it(action)

        if mode == "attach_branch":
            np = TreeDict(unique_name())
            np.a.b.c = 1
        
            def action(i,n,t):
                if i == n//2:
                    p.attach(np)
                    
            test_it(action)

        if mode == "attach_recursive":
            np = TreeDict(unique_name())
            np.a.b.c = 1
            p.attach(np)

            def action(i,n,t):
                if i == n//2:
                    p.attach(recursive=True)

            test_it(action)

        if mode == "pop":
            def action(i,n,t):
                if i == n//2:
                    p.pop(key_list[i+1])

            test_it(action)

        if mode == "clear":
            def action(i,n,t):
                if i == n//2:
                    p.clear()
            test_it(action)

        if mode == "freeze":
            # should not raise error
            def action(i,n,t):
                if i == n//2:
                    p.freeze()
            test_it(action, True)

        if mode == "copy":
            # should not raise error
            def action(i,n,t):
                if i == n//2:
                    pn = p.copy()
            test_it(action, True)

        if mode == "branch":
            def action(i,n,t):
                if i == n//2:
                    b = p.makeBranch(unique_name())
            test_it(action)

        if mode == "size_called":
            # should not raise error
            def action(i,n,t):
                if i == n//2:
                    s = p.size()
            test_it(action, True)

        if mode == "nested_iter":

            # should not raise error
            def action(i,n,t):
                if i == n//2:
                    for k in p.iterkeys():
                        for v in p.itervalues():
                            pass
                            
            test_it(action, True)

            # Now verify all are okay
            #print "p._iteratorRefCount() =", p._iteratorRefCount()
            p.asdfasdfafds = None

        if mode == "nested_iter_bad":
            # should not raise error
            def action(i,n,t):
                if i == n//2:
                    for k in p.iterkeys():
                        for v in p.itervalues():
                            pass

                    del p[key_list[i+1]]  # Make sure the flag is not turned off

            test_it(action)

            # Now verify all are okay
            #print "p._iteratorRefCount() =", p._iteratorRefCount()
            p.asdfasdfafds = None


        if mode == "nested_iter_bad_later":
            # should not raise error
            def action(i,n,t):
                if i == 0:
                    for k in p.iterkeys():
                        for v in p.itervalues():
                            pass
                else:
                    del p[t]  # Make sure the flag is not turned off

            test_it(action)

        if mode == "nested_list":
            # should not raise error
            def action(i,n,t):
                if i == n//2:
                    p.keys()
                            
            test_it(action, True)

        if mode == "nested_list_bad":
            def action(i,n,t):
                assert key_list[i] == t
                
                if i == n//2:
                    k = p.keys()

                    del p[key_list[i+1]]  # Make sure the flag is not turned off

            test_it(action)

        if mode == "nested_list_bad_later":
            def action(i,n,t):
                if i == 0:
                    k = p.keys()
                else:
                    del p[t]  # Make sure the flag is not turned off

            test_it(action)

        if mode == "action_on_subbranches_okay":
            tn = unique_name()

            p[tn +'.a'] = 1
            p[tn +'.b'] = 1
            p[tn +'.c'] = 1

            has_seen_tn = [False]

            def action(i,n,t):
                if i == 0: 
                    has_seen_tn[0] = False

                if t.startswith(tn):
                    has_seen_tn[0] = True

                if (not t.startswith(tn)) and has_seen_tn[0]:
                    p[tn].pop('a')
                    p[tn].a = 1

            test_it(action, True)

        if mode == "action_on_subbranches_okay_control":
            tn = unique_name()

            p[tn +'.a'] = 1
            p[tn +'.b'] = 1
            p[tn +'.c'] = 1

            def action(i,n,t):
                if t.startswith(tn):
                    p[tn].pop('a')
                    p[tn].a = 1

            test_it(action)
 def testAttaching_12_defaultName_RecursiveAttach(self):
     p1 = TreeDict()
     p1.p2 = TreeDict()
     
     p1.attach(recursive = True)