Beispiel #1
0
def _test_dictize_nested(fixture_name, opts):

    x = getattr(fixtures, fixture_name)
    assert isinstance(x, Object)

    factory = type(x)

    # Dictize

    d = x.to_dict(flat=False, opts=opts)

    assert set(d.keys()) == set(x.get_fields(exclude_properties=False).keys())

    print
    print ' -- Dictize: nested opts=%r' % (opts)
    print d

    # Load

    opts1 = {
        'unserialize-values': opts.get('serialize-values', False),
        'use-defaults': False,
    }

    x1 = factory().from_dict(d, is_flat=False, opts=opts1)
    d1 = x1.to_dict(flat=False, opts=opts)

    assert_equal(d, d1)
def _test_dictize_update_shallow(fixture_name, dtype, changeset):
    '''Test from_dict in shallow-update mode
    ''' 
    
    x0 = getattr(fixtures, fixture_name)
    df0 = x0.to_dict(flat=1, opts={'serialize-keys': 1})
    
    d = updates[dtype][changeset]
    df = flatten(d, lambda k: '.' . join(map(str, k)))
    
    x1 = copy.deepcopy(x0)
    x1.from_dict(d, is_flat=0, opts={ 'update': True })
    df1 = x1.to_dict(flat=1, opts={'serialize-keys': 1})

    for k in (set(x0.get_fields()) - set(d.keys())):
        assert_equal(getattr(x1,k), getattr(x0,k))
 
    for change, key, desc in dictdiffer.diff(df0, df1):
        if change == 'change':
            val0, val1 = desc
            assert ((val1 is None) and not (key in df)) or df[key] == val1
            assert df1[key] == val1
            assert df0[key] == val0
        elif change == 'add':
            for key1, val1 in desc:
                assert ((val1 is None) and not (key1 in df)) or df[key1] == val1
                assert df1[key1] == val1
                assert not key1 in df0
        elif change == 'remove':
            for key0, val0 in desc:
                assert df0[key0] == val0
                assert not key0 in df1
                assert not (key0 in df) or (df[key0] is None) 

    pass
def _test_dictize_nested(fixture_name, opts):

    x = getattr(fixtures, fixture_name)
    assert isinstance(x, Object)
    
    factory = type(x)
    
    # Dictize

    d = x.to_dict(flat=False, opts=opts)

    assert set(d.keys()) == set(x.get_fields(exclude_properties=False).keys())
    
    print
    print ' -- Dictize: nested opts=%r' %(opts)
    print d
    
    # Load
    
    opts1 = { 
        'unserialize-values': opts.get('serialize-values', False),
        'use-defaults': False,
    }

    x1 = factory().from_dict(d, is_flat=False, opts=opts1)
    d1 = x1.to_dict(flat=False, opts=opts)

    assert_equal(d, d1)
Beispiel #4
0
def _test_dictize_update_deep(fixture_name, dtype, changeset):
    '''Test from_dict in deep-update mode
    '''

    x0 = getattr(fixtures, fixture_name)
    df0 = x0.to_dict(flat=1, opts={'serialize-keys': 1})

    d = updates[dtype][changeset]
    df = flatten(d, lambda k: '.'.join(map(str, k)))

    x2 = copy.deepcopy(x0)
    x2.from_dict(d, is_flat=0, opts={'update': 'deep'})

    for k in (set(x0.get_fields()) - set(d.keys())):
        assert_equal(getattr(x2, k), getattr(x0, k))

    df2 = x2.to_dict(flat=1, opts={'serialize-keys': 1})

    def is_reloaded(k):
        # Check if a None was replaced (in d) with a non-empty thing
        if (df0[k] is None) and dot_lookup(d, k):
            return True
        # Check if is forced to be reloaded via its parent
        kp = k.split('.')[:-1]
        while kp:
            f = x0.get_field(kp)
            if not f.queryTaggedValue('allow-partial-update', True):
                return True
            kp.pop()
        return False

    for change, key, desc in dictdiffer.diff(df0, df2):
        if change == 'change':
            val0, val2 = desc
            assert (val2 is None and not (key in df)) or (val2 == df[key])
            assert val0 == df0[key]
            assert val2 == df2[key]
        elif change == 'add':
            for key2, val2 in desc:
                assert (val2 is None) or (key2 in df)
                assert df2[key2] == val2
        elif change == 'remove':
            for key0, val0 in desc:
                # A key may be removed in the following cases
                #  - by setting its update to None (df value)
                #  - an ancestor or self was fully reloaded
                assert ((key0 in df) and
                        (df[key0] is None)) or is_reloaded(key0)
                assert df0[key0] == val0
    pass
def _test_dictize_update_deep(fixture_name, dtype, changeset):
    '''Test from_dict in deep-update mode
    ''' 
    
    x0 = getattr(fixtures, fixture_name)
    df0 = x0.to_dict(flat=1, opts={'serialize-keys': 1})
    
    d = updates[dtype][changeset]
    df = flatten(d, lambda k: '.' . join(map(str, k)))
     
    x2 = copy.deepcopy(x0)
    x2.from_dict(d, is_flat=0, opts={ 'update': 'deep' })
    
    for k in (set(x0.get_fields()) - set(d.keys())):
        assert_equal(getattr(x2,k), getattr(x0,k))
   
    df2 = x2.to_dict(flat=1, opts={'serialize-keys': 1})

    def is_reloaded(k):
        # Check if a None was replaced (in d) with a non-empty thing
        if (df0[k] is None) and dot_lookup(d, k):
            return True
        # Check if is forced to be reloaded via its parent
        kp = k.split('.')[:-1]
        while kp:
            f = x0.get_field(kp)
            if not f.queryTaggedValue('allow-partial-update', True):
                return True
            kp.pop()
        return False

    for change, key, desc in dictdiffer.diff(df0, df2):
        if change == 'change':
            val0, val2 = desc
            assert (val2 is None and not (key in df)) or (val2 == df[key])
            assert val0 == df0[key]
            assert val2 == df2[key]
        elif change == 'add':
            for key2, val2 in desc:
                assert (val2 is None) or (key2 in df)
                assert df2[key2] == val2
        elif change == 'remove':
            for key0, val0 in desc:
                # A key may be removed in the following cases
                #  - by setting its update to None (df value)
                #  - an ancestor or self was fully reloaded
                assert ((key0 in df) and (df[key0] is None)) or is_reloaded(key0)
                assert df0[key0] == val0
    pass
Beispiel #6
0
def _test_dictize_update_shallow(fixture_name, dtype, changeset):
    '''Test from_dict in shallow-update mode
    '''

    x0 = getattr(fixtures, fixture_name)
    df0 = x0.to_dict(flat=1, opts={'serialize-keys': 1})

    d = updates[dtype][changeset]
    df = flatten(d, lambda k: '.'.join(map(str, k)))

    x1 = copy.deepcopy(x0)
    x1.from_dict(d, is_flat=0, opts={'update': True})
    df1 = x1.to_dict(flat=1, opts={'serialize-keys': 1})

    for k in (set(x0.get_fields()) - set(d.keys())):
        assert_equal(getattr(x1, k), getattr(x0, k))

    for change, key, desc in dictdiffer.diff(df0, df1):
        if change == 'change':
            val0, val1 = desc
            assert ((val1 is None) and not (key in df)) or df[key] == val1
            assert df1[key] == val1
            assert df0[key] == val0
        elif change == 'add':
            for key1, val1 in desc:
                assert ((val1 is None)
                        and not (key1 in df)) or df[key1] == val1
                assert df1[key1] == val1
                assert not key1 in df0
        elif change == 'remove':
            for key0, val0 in desc:
                assert df0[key0] == val0
                assert not key0 in df1
                assert not (key0 in df) or (df[key0] is None)

    pass