def test_one_key(self): d = {'foo': 13, 'foo__baz': 42, '__foo': 1} self.assertEqual({'baz': 42}, utils.extract_dict('foo', d, pop=False)) self.assertEqual(42, d['foo__baz']) self.assertEqual({'baz': 42}, utils.extract_dict('foo', d, pop=True)) self.assertNotIn('foo__baz', d)
def test_many_keys(self): d = { 'foo': 13, 'foo__baz': 42, 'foo__foo__bar': 2, 'foo__bar': 3, '__foo': 1 } self.assertEqual({ 'foo__bar': 2, 'bar': 3, 'baz': 42 }, utils.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__bar': 2, 'bar': 3, 'baz': 42 }, utils.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.extract_dict('', { 'foo': 13, 'bar__baz': 42 })) d = {'foo': 13, 'bar__baz': 42, '__foo': 1} self.assertEqual({'foo': 1}, utils.extract_dict('', d)) self.assertNotIn('__foo', d)
def test_one_key_excluded(self): d = {'foo': 13, 'foo__baz': 42, '__foo': 1} self.assertEqual({}, utils.extract_dict('foo', d, pop=False, exclude=('foo__baz',))) self.assertEqual(42, d['foo__baz']) self.assertEqual({}, utils.extract_dict('foo', d, pop=True, exclude=('foo__baz',))) self.assertIn('foo__baz', d)
def test_many_keys_excluded(self): d = {'foo': 13, 'foo__baz': 42, 'foo__foo__bar': 2, 'foo__bar': 3, '__foo': 1} self.assertEqual({'foo__bar': 2, 'baz': 42}, utils.extract_dict('foo', d, pop=False, exclude=('foo__bar', 'bar'))) self.assertEqual(42, d['foo__baz']) self.assertEqual(3, d['foo__bar']) self.assertEqual(2, d['foo__foo__bar']) self.assertEqual({'foo__bar': 2, 'baz': 42}, utils.extract_dict('foo', d, pop=True, exclude=('foo__bar', 'bar'))) self.assertNotIn('foo__baz', d) self.assertIn('foo__bar', d) self.assertNotIn('foo__foo__bar', d)
def extract(self, name, attrs): """Extract relevant attributes from a dict. Args: name (str): the name at which this PostGenerationDeclaration was defined in the declarations attrs (dict): the attribute dict from which values should be extracted Returns: (object, dict): a tuple containing the attribute at 'name' (if provided) and a dict of extracted attributes """ extracted = attrs.pop(name, None) if self.extract_prefix: extract_prefix = self.extract_prefix else: extract_prefix = name kwargs = utils.extract_dict(extract_prefix, attrs) return extracted, kwargs
def extract(self, name, attrs): """Extract relevant attributes from a dict. Args: name (str): the name at which this PostGenerationDeclaration was defined in the declarations attrs (dict): the attribute dict from which values should be extracted Returns: (object, dict): a tuple containing the attribute at 'name' (if provided) and a dict of extracted attributes """ if self.extract_prefix: extract_prefix = self.extract_prefix else: extract_prefix = name extracted = attrs.pop(extract_prefix, None) kwargs = utils.extract_dict(extract_prefix, attrs) return extracted, kwargs
def _create(cls, model_class, *args, **kwargs): parent_passed = 'parent' in kwargs parent = kwargs.pop('parent', None) parent_kwargs = extract_dict('parent', kwargs) if parent and parent_kwargs: raise ValueError('Cant pass a parent instance and attributes') if parent_kwargs: parent = cls(**parent_kwargs) if not parent and not parent_passed: raise ValueError( "`parent` is a required kwarg. If you want to create a root " + "object then pass `parent=None`") if parent: instance = model_class(**kwargs) return parent.add_child(instance=instance) else: return model_class.add_root(**kwargs)
def test_empty_key(self): self.assertEqual({}, utils.extract_dict('', {'foo': 13, 'bar__baz': 42})) d = {'foo': 13, 'bar__baz': 42, '__foo': 1} self.assertEqual({'foo': 1}, utils.extract_dict('', d)) self.assertNotIn('__foo', d)
def test_unused_key(self): self.assertEqual({}, utils.extract_dict('foo', {'bar__baz': 42}))
def test_empty_dict(self): self.assertEqual({}, utils.extract_dict('foo', {}))