Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
 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)
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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)
Example #11
0
 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)
Example #12
0
 def test_unused_key(self):
     self.assertEqual({}, utils.extract_dict('foo', {'bar__baz': 42}))
Example #13
0
 def test_empty_dict(self):
     self.assertEqual({}, utils.extract_dict('foo', {}))
Example #14
0
 def test_unused_key(self):
     self.assertEqual({}, utils.extract_dict('foo', {'bar__baz': 42}))
Example #15
0
 def test_empty_dict(self):
     self.assertEqual({}, utils.extract_dict('foo', {}))