コード例 #1
0
    def test_rgetattr(self):
        """Test `utils.rgetattr` function."""

        obj = utils.AttrDict(
            **{
                'foo': {
                    'bar':
                    True,
                    'buzz': [
                        utils.AttrDict(**{'fuzz': True}),

                        # introduce inconsistency -- can happen in reality
                        utils.AttrDict(**{'no-fuzz': True})
                    ]
                }
            })

        self.assertTrue(utils.rgetattr(obj, 'foo.bar'))
        self.assertIsInstance(utils.rgetattr(obj, 'foo'), utils.AttrDict)
        self.assertIsInstance(utils.rgetattr(obj, 'foo.bar'), bool)

        # should not raise
        self.assertIsInstance(utils.rgetattr(obj, 'foo.buzz.fuzz')[0], bool)

        self.assertIn(
            'Test',
            utils.rgetattr(obj, 'foo.buzz.no_fuzz', repl_missing='Test'),
        )
コード例 #2
0
    def test_rhasattr(self):
        """Test `utils.rhasattr` function."""
        obj = utils.AttrDict(**{'foo': {'bar': None}})

        self.assertTrue(utils.rhasattr(obj, 'foo.bar'))
        self.assertTrue(utils.rhasattr(obj, 'foo'))

        obj_with_arrays = utils.AttrDict(**{'buzz': [obj, obj]})

        # ---
        # arrays

        self.assertTrue(utils.rhasattr(obj_with_arrays, 'buzz.foo'))
        self.assertTrue(utils.rhasattr(obj_with_arrays, 'buzz.foo.bar'))
コード例 #3
0
    def test_in_range(self):
        """Test `in_range` selector."""
        obj = utils.AttrDict(
            **{'foo': {'bar': 5},
               'time': datetime.now()}
        )

        # wrong
        with self.assertRaises(ValueError):
            select = selectors.in_range(high=10, low=100)
            select(obj, 'foo.bar')

        select = selectors.in_range(high=10, low=0)
        self.assertTrue(select(obj, 'foo.bar'))

        select = selectors.in_range(high=10, low=5)
        self.assertTrue(select(obj, 'foo.bar'))

        select = selectors.in_range(high=5, low=0)
        self.assertTrue(select(obj, 'foo.bar'))

        select = selectors.in_range(high=4, low=0)
        self.assertFalse(select(obj, 'foo.bar'))

        select = selectors.in_range(high=datetime.now(), low=datetime(1, 1, 1))
        self.assertTrue(select(obj, 'time'))

        select = selectors.in_range(high=datetime(2, 2, 2), low=datetime(1, 1, 1))
        self.assertFalse(select(obj, 'time'))
コード例 #4
0
    def test_search(self):
        """Test `search` selector."""
        obj = utils.AttrDict(
            **{'foo': {'bar': 'abcdefgh'}, 'buzz': 'abcd'}
        )

        # exact search
        select = selectors.search(pattern='abcd')
        # simple, exact match
        self.assertTrue(select(obj, 'buzz'))

        select = selectors.search(pattern='abc')
        self.assertTrue(select(obj, 'buzz'))

        select = selectors.search(pattern='bca')
        self.assertFalse(select(obj, 'buzz'))

        # ---
        # pattern
        select = selectors.search(pattern=r"(\w)+")

        self.assertTrue(select(obj, 'buzz'))
        # nested
        self.assertTrue(select(obj, 'foo.bar'))

        # ---
        # arrays
        obj_with_array = utils.AttrDict(
            **{
                'fuzz': [obj, obj]
            }
        )

        select = selectors.search(pattern=r"abc")

        # nested
        self.assertTrue(select(obj_with_array, 'fuzz.foo.bar'))
        self.assertTrue(select(obj_with_array, 'fuzz.buzz'))

        # incorrect, should not raise
        self.assertFalse(select(obj_with_array, 'fuzz.bar'))
コード例 #5
0
    def test_in_(self):
        """Test `in_` selector."""
        obj = utils.AttrDict(
            **{
                'foo': {'bar': 5},
                'buzz': False,
            }
        )

        select = selectors.in_([0, 5, 10, 15])
        self.assertTrue(select(obj, 'foo.bar'))

        select = selectors.in_([True, False])
        self.assertTrue(select(obj, 'buzz'))
コード例 #6
0
    def test_match(self):
        """Test `match` selector."""
        obj = utils.AttrDict(**{'foo': {'bar': 2}, 'buzz': 1})

        # exact match
        select = selectors.match(pattern=1)
        # simple, exact match
        self.assertTrue(select(obj, 'buzz'))

        # exact match
        select = selectors.match(pattern=2)
        self.assertFalse(select(obj, 'buzz'))

        # ---
        # pattern
        select = selectors.match(pattern=r"(\d)+")

        self.assertTrue(select(obj, 'buzz'))
        # nested
        self.assertTrue(select(obj, 'foo.bar'))
コード例 #7
0
    def test_greater(self):
        """Test `gt` and `ge` selector."""
        obj = utils.AttrDict(
            **{
                'foo': {'bar': 5},
                'time': datetime.now()
            }
        )
        select = selectors.gt(0)

        self.assertTrue(select(obj, 'foo.bar'))
        self.assertTrue(select(obj, 'time'))

        select = selectors.gt(5)
        self.assertFalse(select(obj, 'foo.bar'))

        select = selectors.gt(datetime.now())

        self.assertFalse(select(obj, 'time'))

        select = selectors.ge(5)
        self.assertTrue(select(obj, 'foo.bar'))
コード例 #8
0
    def project(self, p_dict: typing.Dict[str, int],
                **kwargs) -> utils.AttrDict:
        """Project specific document attributes."""
        keys = p_dict.keys()

        # create projection tree
        if not p_dict.pop('id_', 1):
            projection = dict()
        else:
            projection = {'id_': self.id_}

        for key in keys:

            ptr_dict = projection

            sub_keys = key.split(sep='.')
            for sub_key in sub_keys[:-1]:
                ptr_dict[sub_key] = dict()
                ptr_dict = ptr_dict[sub_key]

            ptr_dict[sub_keys[-1]] = utils.rgetattr(self, key, **kwargs)

        return utils.AttrDict(**projection)
コード例 #9
0
    def test_lower(self):
        """Test `lt` and `le` selector."""
        obj = utils.AttrDict(
            **{
                'foo': {'bar': 5},
                'time': datetime.now(),
                'arr': [
                    '1.0.0',
                    '1.4.3'
                ]
            }
        )
        select = selectors.lt(0)

        self.assertFalse(select(obj, 'foo.bar'))

        select = selectors.lt(10)
        self.assertTrue(select(obj, 'foo.bar'))

        select = selectors.lt(datetime.now())

        self.assertTrue(select(obj, 'time'))

        select = selectors.le(5)
        self.assertTrue(select(obj, 'foo.bar'))

        # ---
        # strings
        select = selectors.le('1.0.0')
        self.assertTrue(select(obj, 'arr'))

        select = selectors.lt('1.0.0')
        self.assertFalse(select(obj, 'arr'))

        select = selectors.lt('2.0.0')
        self.assertTrue(select(obj, 'arr'))