def test_son_in_list(self): """Make sure that prefixes are used in decreasing match length order.""" d = { 'foo': 13, 'foo__baz': 42, 'foo__foo__bar': 2, 'foo__bar': 3, 'bar__foo': 1, 'bar__bar__baz': 4, } self.assertEqual( { 'foo__foo': { 'bar': 2 }, 'foo': { 'bar': 3, 'baz': 42 }, 'bar__bar': { 'baz': 4 }, 'bar': { 'foo': 1 }, 'baz': {} }, utils.multi_extract_dict( ['foo', 'bar', 'baz', 'foo__foo', 'bar__bar'], d, pop=False)) self.assertEqual(42, d['foo__baz']) self.assertEqual(3, d['foo__bar']) self.assertEqual(2, d['foo__foo__bar']) self.assertEqual(1, d['bar__foo']) self.assertEqual(4, d['bar__bar__baz']) self.assertEqual( { 'foo__foo': { 'bar': 2 }, 'foo': { 'bar': 3, 'baz': 42 }, 'bar__bar': { 'baz': 4 }, 'bar': { 'foo': 1 }, 'baz': {} }, utils.multi_extract_dict( ['foo', 'bar', 'baz', 'foo__foo', 'bar__bar'], d, pop=True)) self.assertNotIn('foo__baz', d) self.assertNotIn('foo__bar', d) self.assertNotIn('foo__foo__bar', d) self.assertNotIn('bar__foo', d) self.assertNotIn('bar__bar__baz', d)
def test_many_keys_many_extracted(self): d = { 'foo': 13, 'foo__baz': 42, 'foo__foo__bar': 2, 'foo__bar': 3, 'bar__foo': 1, 'bar__bar__baz': 4, } self.assertEqual( { 'foo': {'foo__bar': 2, 'bar': 3, 'baz': 42}, 'bar': {'foo': 1, 'bar__baz': 4}, 'baz': {} }, utils.multi_extract_dict(['foo', 'bar', 'baz'], d, pop=False)) self.assertEqual(42, d['foo__baz']) self.assertEqual(3, d['foo__bar']) self.assertEqual(2, d['foo__foo__bar']) self.assertEqual(1, d['bar__foo']) self.assertEqual(4, d['bar__bar__baz']) self.assertEqual( { 'foo': {'foo__bar': 2, 'bar': 3, 'baz': 42}, 'bar': {'foo': 1, 'bar__baz': 4}, 'baz': {} }, utils.multi_extract_dict(['foo', 'bar', 'baz'], d, pop=True)) self.assertNotIn('foo__baz', d) self.assertNotIn('foo__bar', d) self.assertNotIn('foo__foo__bar', d) self.assertNotIn('bar__foo', d) self.assertNotIn('bar__bar__baz', d)
def test_unused_key(self): self.assertEqual({'foo': {}}, utils.multi_extract_dict(['foo'], {'bar__baz': 42})) self.assertEqual({ 'foo': {}, 'baz': {} }, utils.multi_extract_dict(['foo', 'baz'], {'bar__baz': 42}))
def test_many_extracted(self): d = { 'foo': 13, 'foo__baz': 42, 'foo__foo__bar': 2, 'foo__bar': 3, '__foo': 1 } self.assertEqual({'foo': { 'foo__bar': 2, 'bar': 3, 'baz': 42 }}, utils.multi_extract_dict(['foo'], d, pop=False)) self.assertEqual(42, d['foo__baz']) self.assertEqual(3, d['foo__bar']) self.assertEqual(2, d['foo__foo__bar']) self.assertEqual({'foo': { 'foo__bar': 2, 'bar': 3, 'baz': 42 }}, utils.multi_extract_dict(['foo'], d, pop=True)) self.assertNotIn('foo__baz', d) self.assertNotIn('foo__bar', d) self.assertNotIn('foo__foo__bar', d)
def test_empty_key(self): self.assertEqual({'': {}}, utils.multi_extract_dict([''], {'foo': 13, 'bar__baz': 42})) d = {'foo': 13, 'bar__baz': 42, '__foo': 1} self.assertEqual({'': {'foo': 1}}, utils.multi_extract_dict([''], d)) self.assertNotIn('__foo', d)
def test_many_keys_one_extracted(self): d = {'foo': 13, 'foo__baz': 42, '__foo': 1} self.assertEqual({'foo': {'baz': 42}, 'baz': {}}, utils.multi_extract_dict(['foo', 'baz'], d, pop=False)) self.assertEqual(42, d['foo__baz']) self.assertEqual({'foo': {'baz': 42}, 'baz': {}}, utils.multi_extract_dict(['foo', 'baz'], d, pop=True)) self.assertNotIn('foo__baz', d)
def test_many_keys_one_extracted(self): d = {'foo': 13, 'foo__baz': 42, '__foo': 1} self.assertEqual( {'foo': {'baz': 42}, 'baz': {}}, utils.multi_extract_dict(['foo', 'baz'], d, pop=False), ) self.assertEqual(42, d['foo__baz']) self.assertEqual( {'foo': {'baz': 42}, 'baz': {}}, utils.multi_extract_dict(['foo', 'baz'], d, pop=True), ) self.assertNotIn('foo__baz', d)
def __init__(self, factory, extra=None, *args, **kwargs): super(AttributeBuilder, self).__init__(*args, **kwargs) if not extra: extra = {} self.factory = factory self._containers = extra.pop("__containers", None) self._attrs = factory.declarations(extra) self._subfields = utils.multi_extract_dict(self._attrs.keys(), self._attrs)
def test_son_in_list(self): """Make sure that prefixes are used in decreasing match length order.""" d = { 'foo': 13, 'foo__baz': 42, 'foo__foo__bar': 2, 'foo__bar': 3, 'bar__foo': 1, 'bar__bar__baz': 4, } self.assertEqual( { 'foo__foo': {'bar': 2}, 'foo': {'bar': 3, 'baz': 42}, 'bar__bar': {'baz': 4}, 'bar': {'foo': 1}, 'baz': {} }, utils.multi_extract_dict( ['foo', 'bar', 'baz', 'foo__foo', 'bar__bar'], d, pop=False)) self.assertEqual(42, d['foo__baz']) self.assertEqual(3, d['foo__bar']) self.assertEqual(2, d['foo__foo__bar']) self.assertEqual(1, d['bar__foo']) self.assertEqual(4, d['bar__bar__baz']) self.assertEqual( { 'foo__foo': {'bar': 2}, 'foo': {'bar': 3, 'baz': 42}, 'bar__bar': {'baz': 4}, 'bar': {'foo': 1}, 'baz': {} }, utils.multi_extract_dict( ['foo', 'bar', 'baz', 'foo__foo', 'bar__bar'], d, pop=True)) self.assertNotIn('foo__baz', d) self.assertNotIn('foo__bar', d) self.assertNotIn('foo__foo__bar', d) self.assertNotIn('bar__foo', d) self.assertNotIn('bar__bar__baz', d)
def __init__(self, factory, extra=None, *args, **kwargs): super(AttributeBuilder, self).__init__(*args, **kwargs) if not extra: extra = {} self.factory = factory self._containers = extra.pop('__containers', None) self._attrs = factory.declarations(extra) attrs_with_subfields = [k for k, v in self._attrs.items() if self.has_subfields(v)] self._subfields = utils.multi_extract_dict(attrs_with_subfields, self._attrs)
def test_no_key(self): self.assertEqual({}, utils.multi_extract_dict([], {'bar__baz': 42}))
def test_unused_key(self): self.assertEqual({'foo': {}}, utils.multi_extract_dict(['foo'], {'bar__baz': 42})) self.assertEqual({'foo': {}, 'baz': {}}, utils.multi_extract_dict(['foo', 'baz'], {'bar__baz': 42}))
def test_empty_dict(self): self.assertEqual({'foo': {}}, utils.multi_extract_dict(['foo'], {}))