def test_set_basic(self): commands = [ EventualCommand('set', ['foo', 1], {'timeout': 1}), EventualCommand('set', ['bar', 2], {'timeout': 1}), EventualCommand('set', ['baz', 3], {'timeout': 2}), ] items = self.get_grouped_results(commands, 2) new_command, grouped_commands = items[0] self.assertEqual(len(grouped_commands), 2) self.assertEqual(grouped_commands, commands[0:2]) self.assertEqual(new_command.get_name(), 'set_multi') self.assertEqual(new_command.get_args(), ({ 'foo': 1, 'bar': 2, }, )) self.assertEqual(new_command.get_kwargs(), { 'timeout': 1, }) new_command, grouped_commands = items[1] self.assertEqual(len(grouped_commands), 1) self.assertEqual(grouped_commands, commands[2:3]) self.assertEqual(new_command.get_name(), 'set') self.assertEqual(new_command.get_args(), ['baz', 3]) self.assertEqual(new_command.get_kwargs(), { 'timeout': 2, })
def test_get_basic(self): commands = [ EventualCommand('get', ['foo'], {'key_prefix': 1}), EventualCommand('get', ['bar'], {'key_prefix': 1}), EventualCommand('get', ['baz'], {'key_prefix': 2}), ] items = self.get_grouped_results(commands, 2) new_command, grouped_commands = items[0] self.assertEqual(len(grouped_commands), 2) self.assertEqual(grouped_commands, commands[0:2]) self.assertEqual(new_command.get_name(), 'get_multi') self.assertEqual(new_command.get_args(), (['foo', 'bar'], )) self.assertEqual(new_command.get_kwargs(), { 'key_prefix': 1, }) new_command, grouped_commands = items[1] self.assertEqual(len(grouped_commands), 1) self.assertEqual(grouped_commands, commands[2:3]) self.assertEqual(new_command.get_name(), 'get') self.assertEqual(new_command.get_args(), ['baz']) self.assertEqual(new_command.get_kwargs(), { 'key_prefix': 2, })
def test_evaled_repr(self): ec = EventualCommand('foo') ec('bar', baz='foo') ec.resolve_as('biz') if PY2: self.assertEqual(repr(ec), "u'biz'") else: self.assertEqual(repr(ec), "'biz'")
def grouped_command(commands): """ Given a list of commands (which are assumed groupable), return a new command which is a batch (multi) command. For ``set`` commands the outcome will be:: set_multi({key: value}, **kwargs) For ``get`` and ``delete`` commands, the outcome will be:: get_multi(list_of_keys, **kwargs) (Or respectively ``delete_multi``) """ base = commands[0] name = base.get_name() multi_command = EventualCommand('%s_multi' % name) if name in ('get', 'delete'): args = [c.get_args()[0] for c in commands] elif base.get_name() == 'set': args = dict(c.get_args()[0:2] for c in commands) else: raise ValueError('Command not supported: %r' % (base.get_name(), )) multi_command(args, *grouped_args_for_command(base), **base.get_kwargs()) return multi_command
def test_unevaled_repr(self): ec = EventualCommand('foo') ec('bar', baz='foo') self.assertEquals( repr(ec), u"<EventualCommand: foo args=('bar',) kwargs={'baz': 'foo'}>")
def test_unevaled_repr(self): ec = EventualCommand('foo') ec('bar', baz='foo') if PY2: self.assertEqual( repr(ec), "<EventualCommand: foo args=(u'bar',) kwargs={'baz': u'foo'}>") else: self.assertEqual( repr(ec), "<EventualCommand: foo args=('bar',) kwargs={'baz': 'foo'}>")
def test_coersion(self): ec = EventualCommand('foo')() ec.resolve_as('5') self.assertEquals(int(ec), 5)
def test_evaled_repr(self): ec = EventualCommand('foo') ec('bar', baz='foo') ec.resolve_as('biz') self.assertEquals(repr(ec), u"'biz'")
def test_ungroupable_delete_commands(self): command = EventualCommand('delete', ['foo'], {'timeout': 1}) other = EventualCommand('delete', ['bar'], {'timeout': 2}) self.assertEqual(can_group_commands(command, other), False)
def test_isinstance_check(self): ec = EventualCommand('foo') ec.resolve_as(['foo', 'bar']) self.assertEquals(isinstance(ec, list), True)
def test_command_error_returns_as_error(self): ec = EventualCommand('foo') ec.resolve_as(CommandError([ValueError('test')])) self.assertEquals(ec.is_error, True)
def test_evaled_unicode(self): ec = EventualCommand('foo') ec.resolve_as('biz') self.assertEquals(unicode(ec), u'biz')
def test_groupable_set_commands(self): command = EventualCommand('set', ['foo', 1]) other = EventualCommand('set', ['bar', 2]) self.assertEqual(can_group_commands(command, other), True)
def test_ungroupable_set_commands(self): command = EventualCommand('set', ['foo', 1], {'timeout': 1}) other = EventualCommand('set', ['bar', 2], {'timeout': 2}) self.assertEqual(can_group_commands(command, other), False)
def test_delete_excludes_first_arg(self): command = EventualCommand('delete', ['foo', 1]) result = grouped_args_for_command(command) self.assertEqual(result, [1])
def test_set_excludes_first_two_args(self): command = EventualCommand('set', ['foo', 1, 'biz']) result = grouped_args_for_command(command) self.assertEqual(result, ['biz'])
def test_nonzero(self): ec = EventualCommand('foo')() ec.resolve_as(None) self.assertEquals(int(ec or 0), 0)
def test_coersion(self): ec = EventualCommand('foo')() ec.resolve_as('5') self.assertEqual(int(ec), 5)
def test_other_error_does_not_return_as_error(self): ec = EventualCommand('foo') ec.resolve_as(ValueError('test')) self.assertEquals(ec.is_error, False)
def test_evaled_unicode(self): ec = EventualCommand('foo') ec.resolve_as('biz') self.assertEqual('%s' % ec, 'biz')
def test_other_error_does_not_return_as_error(self): ec = EventualCommand('foo') ec.resolve_as(ValueError('test')) self.assertEqual(ec.is_error, False)
def test_groupable_delete_commands(self): command = EventualCommand('delete', ['foo']) other = EventualCommand('delete', ['bar']) self.assertEqual(can_group_commands(command, other), True)
def test_nonzero(self): ec = EventualCommand('foo')() ec.resolve_as(None) self.assertEqual(int(ec or 0), 0)
def test_command_error_returns_as_error(self): ec = EventualCommand('foo') ec.resolve_as(CommandError([ValueError('test')])) self.assertEqual(ec.is_error, True)
def __getattr__(self, attr): command = EventualCommand(attr) self._commands.append(command) return command
def test_isinstance_check(self): ec = EventualCommand('foo') ec.resolve_as(['foo', 'bar']) self.assertEqual(isinstance(ec, list), True)
def test_groupable_get_commands(self): command = EventualCommand('get', ['foo']) other = EventualCommand('get', ['bar']) self.assertEquals(can_group_commands(command, other), True)