예제 #1
0
    def test_script_call_in_pipeline(self, redis_script):
        name = 'foo'
        regions = [
            ReturnRegion(
                type_='string',
                content='%return string',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        client = MagicMock(spec=BasePipeline)
        redis_script.return_value = MagicMock(return_value=42)
        result = script.get_runner(client=client)()

        self.assertTrue(hasattr(result, '__call__'))
        self.assertEqual("42", result(42))
        redis_script.return_value.assert_called_once_with(
            keys=[],
            args=[],
        )

        # Make sure pipeline instances are not cached.
        self.assertNotIn(client, script._redis_scripts)
예제 #2
0
    def test_script_call_missing_key(self):
        name = 'foo'
        regions = [
            KeyRegion(
                name='key1',
                index=1,
                content='%key key1',
            ),
            ArgumentRegion(
                name='arg1',
                index=1,
                type_='string',
                content='%arg arg1',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )

        with self.assertRaises(TypeError):
            script.get_runner(client=None)(arg1='ARG')
예제 #3
0
    def test_script_call_missing_key(self):
        name = 'foo'
        regions = [
            KeyRegion(
                name='key1',
                index=1,
                content='%key key1',
            ),
            ArgumentRegion(
                name='arg1',
                index=1,
                type_='string',
                content='%arg arg1',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )

        with self.assertRaises(TypeError):
            script.get_runner(client=None)(arg1='ARG')
예제 #4
0
    def test_script_call_return_as_boolean(self, _):
        name = 'foo'
        regions = [
            ReturnRegion(
                type_='boolean',
                content='%return boolean',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        script._redis_scripts[None] = MagicMock(return_value=5)
        result = script.get_runner(client=None)()

        self.assertEqual(True, result)
        script._redis_scripts[None].assert_called_once_with(
            keys=[],
            args=[],
        )
예제 #5
0
    def test_script_call_return_as_boolean(self, _):
        name = 'foo'
        regions = [
            ReturnRegion(
                type_='boolean',
                content='%return boolean',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        script._redis_script = MagicMock(return_value=5)
        result = script.get_runner(client=None)()

        self.assertEqual(True, result)
        script._redis_script.assert_called_once_with(
            keys=[],
            args=[],
            client=None,
        )
예제 #6
0
    def test_script_call_return_as_dict(self, _):
        name = 'foo'
        regions = [
            ReturnRegion(
                type_='list',
                content='%return list',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        value = {'a': 1, 'b': 3.5, 'c': None, 'd': ['a', 2], 'e': 's'}
        script._redis_scripts[None] = MagicMock(return_value=json.dumps(value))
        result = script.get_runner(client=None)()

        self.assertEqual(value, result)
        script._redis_scripts[None].assert_called_once_with(
            keys=[],
            args=[],
        )
예제 #7
0
    def test_script_call_return_as_dict(self, _):
        name = 'foo'
        regions = [
            ReturnRegion(
                type_='list',
                content='%return list',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        value = {'a': 1, 'b': 3.5, 'c': None, 'd': ['a', 2], 'e': 's'}
        script._redis_script = MagicMock(return_value=jdumps(value))
        result = script.get_runner(client=None)()

        self.assertEqual(value, result)
        script._redis_script.assert_called_once_with(
            keys=[],
            args=[],
            client=None,
        )
예제 #8
0
    def test_script_call_in_pipeline(self, redis_script):
        name = 'foo'
        regions = [
            ReturnRegion(
                type_='string',
                content='%return string',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        client = MagicMock(spec=BasePipeline)
        redis_script.return_value = MagicMock(return_value=42)
        result = script.get_runner(client=client)()

        self.assertTrue(hasattr(result, '__call__'))
        self.assertEqual("42", result(42))
        redis_script.return_value.assert_called_once_with(
            keys=[],
            args=[],
            client=client,
        )
예제 #9
0
    def test_script_run(self, _):
        name = 'foo'
        regions = [
            KeyRegion(
                name='key1',
                index=1,
                content='%key key1',
            ),
            ArgumentRegion(
                name='arg1',
                index=1,
                type_='string',
                content='%arg arg1',
            ),
            TextRegion(content='b'),
            KeyRegion(
                name='key2',
                index=2,
                content='%key key2',
            ),
            ArgumentRegion(
                name='arg2',
                index=2,
                type_='integer',
                content='%arg arg2',
            ),
            ArgumentRegion(
                name='arg3',
                index=3,
                type_='bool',
                content='%arg arg3',
            ),
            ArgumentRegion(
                name='arg4',
                index=4,
                type_='list',
                content='%arg arg4',
            ),
            ArgumentRegion(
                name='arg5',
                index=5,
                type_='dict',
                content='%arg arg5',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        script._redis_script = MagicMock(return_value="result")
        result = script.get_runner(client=None)(
            arg1='ARG',
            arg2=2,
            arg3=False,
            arg4=(1, 2.5, None, 'a'),
            arg5={'b': None},
            key1='KEY',
            key2='KEY 2',
        )

        self.assertEqual("result", result)
        script._redis_script.assert_called_once_with(
            keys=['KEY', 'KEY 2'],
            args=[
                'ARG',
                2,
                0,
                jdumps([1, 2.5, None, 'a']),
                jdumps({'b': None}),
            ],
            client=None,
        )
예제 #10
0
    def test_script_run(self, _):
        name = 'foo'
        regions = [
            KeyRegion(
                name='key1',
                index=1,
                content='%key key1',
            ),
            ArgumentRegion(
                name='arg1',
                index=1,
                type_='string',
                content='%arg arg1',
            ),
            TextRegion(content='b'),
            KeyRegion(
                name='key2',
                index=2,
                content='%key key2',
            ),
            ArgumentRegion(
                name='arg2',
                index=2,
                type_='integer',
                content='%arg arg2',
            ),
            ArgumentRegion(
                name='arg3',
                index=3,
                type_='bool',
                content='%arg arg3',
            ),
            ArgumentRegion(
                name='arg4',
                index=4,
                type_='list',
                content='%arg arg4',
            ),
            ArgumentRegion(
                name='arg5',
                index=5,
                type_='dict',
                content='%arg arg5',
            ),
        ]
        script = Script(
            name=name,
            regions=regions,
        )
        script._redis_scripts[None] = MagicMock(return_value="result")
        result = script.get_runner(client=None)(
            arg1='ARG',
            arg2=2,
            arg3=False,
            arg4=(1, 2.5, None, 'a'),
            arg5={'b': None},
            key1='KEY',
            key2='KEY 2',
        )

        self.assertEqual("result", result)
        script._redis_scripts[None].assert_called_once_with(
            keys=['KEY', 'KEY 2'],
            args=[
                'ARG',
                2,
                0,
                json.dumps([1, 2.5, None, 'a']),
                json.dumps({'b': None}),
            ],
        )