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)
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
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