Exemplo n.º 1
0
    def test_save_behavior(self):
        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        mydict['hello'] = 'foo'
        for n in xrange(10):
            mydict[str(n)] = 'foo'
        self.assertEquals(len(mydict), 11)
        self.assertEquals(ModelDictModel.objects.count(), 11)

        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        m = ModelDictModel.objects.get(key='hello')
        m.value = 'bar'
        m.save()

        self.assertEquals(ModelDictModel.objects.count(), 11)
        self.assertEquals(len(mydict), 11)
        self.assertEquals(mydict['hello'], 'bar')

        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        m = ModelDictModel.objects.get(key='hello')
        m.value = 'bar2'
        m.save()

        self.assertEquals(ModelDictModel.objects.count(), 11)
        self.assertEquals(len(mydict), 11)
        self.assertEquals(mydict['hello'], 'bar2')
Exemplo n.º 2
0
    def test_save_behavior(self):
        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        mydict['hello'] = 'foo'
        for n in range(10):
            mydict[str(n)] = 'foo'
        assert len(mydict) == 11
        assert ModelDictModel.objects.count() == 11

        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        m = ModelDictModel.objects.get(key='hello')
        m.value = 'bar'
        m.save()

        assert ModelDictModel.objects.count() == 11
        assert len(mydict) == 11
        assert mydict['hello'] == 'bar'

        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        m = ModelDictModel.objects.get(key='hello')
        m.value = 'bar2'
        m.save()

        assert ModelDictModel.objects.count() == 11
        assert len(mydict) == 11
        assert mydict['hello'] == 'bar2'
Exemplo n.º 3
0
    def test_save_behavior(self):
        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        mydict['hello'] = 'foo'
        for n in xrange(10):
            mydict[str(n)] = 'foo'
        self.assertEquals(len(mydict), 11)
        self.assertEquals(ModelDictModel.objects.count(), 11)

        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        m = ModelDictModel.objects.get(key='hello')
        m.value = 'bar'
        m.save()

        self.assertEquals(ModelDictModel.objects.count(), 11)
        self.assertEquals(len(mydict), 11)
        self.assertEquals(mydict['hello'], 'bar')

        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        m = ModelDictModel.objects.get(key='hello')
        m.value = 'bar2'
        m.save()

        self.assertEquals(ModelDictModel.objects.count(), 11)
        self.assertEquals(len(mydict), 11)
        self.assertEquals(mydict['hello'], 'bar2')


    # def test_modeldict_counts(self):
    #     # TODO: 
    #     mydict = ModelDict(ModelDictModel, key='key', value='value')
    #     mydict['test_1'] = 'foo'
    #     mydict['test_2'] = 'bar'
    #     del mydict
    #     request_finished.send(sender=self)
    # 
    #     mydict = ModelDict(ModelDictModel, key='key', value='value')
    #     # First and only cache.get() here.
    #     self.assertEqual(mydict['test_1'], 'foo')
    #     self.assertEqual(mydict['test_2'], 'bar')
    #     self.assertEqual(mydict['test_1'], 'foo')
    # 
    #     request_finished.send(sender=self)
    #     # Should not be another cache.get().
    #     self.assertEqual(mydict['test_1'], 'foo')
    #     self.assertEqual(mydict['test_2'], 'bar')
    #     self.assertEqual(mydict['test_1'], 'foo')
    # 
    #     self.assertEqual(cache._gets[c.get_key('ModelDict:ModelDictModel:key')], 1)
    #     self.assertEqual(cache._gets[c.get_key('ModelDict.last_updated:ModelDictModel:key')], 2)
Exemplo n.º 4
0
 def test_remote_cache_key_suffixed_by_py_version(self):
     mydict = ModelDict(ModelDictModel,
                        key='key',
                        value='value',
                        instances=True)
     expected_version_suffix = 'py%s' % sys.version_info[0]
     assert mydict.remote_cache_key.endswith(expected_version_suffix)
Exemplo n.º 5
0
    def test_modeldict_instances(self):
        base_count = ModelDictModel.objects.count()

        mydict = ModelDict(ModelDictModel,
                           key='key',
                           value='value',
                           instances=True)
        mydict['foo'] = ModelDictModel(key='foo', value='bar')
        self.assertTrue(isinstance(mydict['foo'], ModelDictModel))
        self.assertTrue(mydict['foo'].pk)
        self.assertEquals(mydict['foo'].value, 'bar')
        self.assertEquals(
            ModelDictModel.objects.values_list('value',
                                               flat=True).get(key='foo'),
            'bar')
        self.assertEquals(ModelDictModel.objects.count(), base_count + 1)
        old_pk = mydict['foo'].pk
        mydict['foo'] = ModelDictModel(key='foo', value='bar2')
        self.assertTrue(isinstance(mydict['foo'], ModelDictModel))
        self.assertEquals(mydict['foo'].pk, old_pk)
        self.assertEquals(mydict['foo'].value, 'bar2')
        self.assertEquals(
            ModelDictModel.objects.values_list('value',
                                               flat=True).get(key='foo'),
            'bar2')
        self.assertEquals(ModelDictModel.objects.count(), base_count + 1)

        # test deletion
        mydict['foo'].delete()
        self.assertTrue('foo' not in mydict)
Exemplo n.º 6
0
    def test_modeldict_instances(self):
        base_count = ModelDictModel.objects.count()

        mydict = ModelDict(ModelDictModel,
                           key='key',
                           value='value',
                           instances=True)
        mydict['foo'] = ModelDictModel(key='foo', value='bar')
        assert isinstance(mydict['foo'], ModelDictModel)
        assert mydict['foo'].pk
        assert mydict['foo'].value == 'bar'
        assert ModelDictModel.objects.values_list(
            'value', flat=True).get(key='foo') == 'bar'
        assert ModelDictModel.objects.count() == base_count + 1
        old_pk = mydict['foo'].pk
        mydict['foo'] = ModelDictModel(key='foo', value='bar2')
        assert isinstance(mydict['foo'], ModelDictModel)
        assert mydict['foo'].pk == old_pk
        assert mydict['foo'].value == 'bar2'
        assert ModelDictModel.objects.values_list(
            'value', flat=True).get(key='foo') == 'bar2'
        assert ModelDictModel.objects.count() == base_count + 1

        # test deletion
        mydict['foo'].delete()
        assert 'foo' not in mydict
Exemplo n.º 7
0
 def setUp(self):
     self.cache = mock.Mock()
     self.cache.get.return_value = {}
     self.mydict = ModelDict(ModelDictModel,
                             key='key',
                             value='value',
                             auto_create=True,
                             cache=self.cache)
Exemplo n.º 8
0
    def test_celery_signals_are_connected(self):
        from celery.signals import task_postrun

        mydict = ModelDict(ModelDictModel,
                           key='key',
                           value='value',
                           auto_create=True)
        self.assertHasReceiver(task_postrun, mydict._cleanup)
Exemplo n.º 9
0
    def test_django_signals_are_connected(self):
        from django.db.models.signals import post_save, post_delete
        from django.core.signals import request_finished

        mydict = ModelDict(ModelDictModel, key='key', value='value', auto_create=True)
        self.assertHasReceiver(post_save, mydict._post_save)
        self.assertHasReceiver(post_delete, mydict._post_delete)
        self.assertHasReceiver(request_finished, mydict._cleanup)
Exemplo n.º 10
0
    def test_api(self):
        base_count = ModelDictModel.objects.count()

        mydict = ModelDict(ModelDictModel, key='key', value='value')
        mydict['foo'] = 'bar'
        self.assertEquals(mydict['foo'], 'bar')
        self.assertEquals(
            ModelDictModel.objects.values_list('value',
                                               flat=True).get(key='foo'),
            'bar')
        self.assertEquals(ModelDictModel.objects.count(), base_count + 1)
        mydict['foo'] = 'bar2'
        self.assertEquals(mydict['foo'], 'bar2')
        self.assertEquals(
            ModelDictModel.objects.values_list('value',
                                               flat=True).get(key='foo'),
            'bar2')
        self.assertEquals(ModelDictModel.objects.count(), base_count + 1)
        mydict['foo2'] = 'bar'
        self.assertEquals(mydict['foo2'], 'bar')
        self.assertEquals(
            ModelDictModel.objects.values_list('value',
                                               flat=True).get(key='foo2'),
            'bar')
        self.assertEquals(ModelDictModel.objects.count(), base_count + 2)
        del mydict['foo2']
        self.assertRaises(KeyError, mydict.__getitem__, 'foo2')
        self.assertFalse(ModelDictModel.objects.filter(key='foo2').exists())
        self.assertEquals(ModelDictModel.objects.count(), base_count + 1)

        ModelDictModel.objects.create(key='foo3', value='hello')

        self.assertEquals(mydict['foo3'], 'hello')
        self.assertTrue(
            ModelDictModel.objects.filter(key='foo3').exists(), True)
        self.assertEquals(ModelDictModel.objects.count(), base_count + 2)

        request_finished.send(sender=self)

        self.assertEquals(mydict._last_checked_for_remote_changes, None)

        # These should still error because even though the cache repopulates (local cache)
        # the remote cache pool does not
        # self.assertRaises(KeyError, mydict.__getitem__, 'foo3')
        # self.assertTrue(ModelDictModel.objects.filter(key='foo3').exists())
        # self.assertEquals(ModelDictModel.objects.count(), base_count + 2)

        self.assertEquals(mydict['foo'], 'bar2')
        self.assertEquals(
            ModelDictModel.objects.values_list('value',
                                               flat=True).get(key='foo'),
            'bar2')
        self.assertEquals(ModelDictModel.objects.count(), base_count + 2)

        self.assertEquals(mydict.pop('foo'), 'bar2')
        self.assertEquals(mydict.pop('foo', None), None)
        self.assertFalse(ModelDictModel.objects.filter(key='foo').exists())
        self.assertEquals(ModelDictModel.objects.count(), base_count + 1)
Exemplo n.º 11
0
 def test_modeldict_auto_create(self):
     # with auto_create and value
     mydict = ModelDict(ModelDictModel,
                        key='key',
                        value='value',
                        auto_create=True)
     mydict['hello'] = 'foo'
     assert ModelDictModel.objects.count() == 1
     assert ModelDictModel.objects.get(key='hello').value == 'foo'
Exemplo n.º 12
0
 def test_modeldict_auto_create_no_value(self):
     # with auto_create and no value
     mydict = ModelDict(ModelDictModel,
                        key='key',
                        value='value',
                        auto_create=True)
     repr(mydict['hello'])
     assert ModelDictModel.objects.count() == 1
     assert ModelDictModel.objects.get(key='hello').value == ''
Exemplo n.º 13
0
 def test_modeldict_localcache_has_expired_true_with_no_jitter(
         self, mock_time):
     timeout = 30
     mock_time.time.return_value = self.now + timeout + 1
     mydict = ModelDict(ModelDictModel,
                        key='key',
                        value='value',
                        timeout=timeout)
     mydict._last_checked_for_remote_changes = self.now
     assert mydict.local_cache_has_expired() == True
Exemplo n.º 14
0
    def test_modeldict_instances_auto_create(self):
        mydict = ModelDict(ModelDictModel,
                           key='key',
                           value='value',
                           instances=True,
                           auto_create=True)

        obj = mydict['foo']
        assert isinstance(obj, ModelDictModel)
        assert obj.value == ''
Exemplo n.º 15
0
 def test_modeldict_localcache_has_expired_false_with_jitter(
         self, mock_random, mock_time):
     timeout = 30
     max_local_timeout_jitter = 10
     mock_time.time.return_value = self.now + timeout + max_local_timeout_jitter
     mock_random.random.return_value = 1.0
     mydict = ModelDict(ModelDictModel,
                        key='key',
                        value='value',
                        timeout=timeout,
                        max_local_timeout_jitter=max_local_timeout_jitter)
     mydict._last_checked_for_remote_changes = self.now
     assert mydict.local_cache_has_expired() == False
Exemplo n.º 16
0
    def test_setdefault(self):
        mydict = ModelDict(ModelDictModel, key='key', value='value')

        with pytest.raises(KeyError):
            mydict['hello']

        ret = mydict.setdefault('hello', 'world')
        assert ret == 'world'
        assert mydict['hello'] == 'world'

        ret = mydict.setdefault('hello', 'world2')
        assert ret == 'world'
        assert mydict['hello'] == 'world'
Exemplo n.º 17
0
    def test_api(self):
        base_count = ModelDictModel.objects.count()

        mydict = ModelDict(ModelDictModel, key='key', value='value')
        mydict['foo'] = 'bar'
        assert mydict['foo'] == 'bar'
        assert ModelDictModel.objects.values_list(
            'value', flat=True).get(key='foo') == 'bar'
        assert ModelDictModel.objects.count() == base_count + 1
        mydict['foo'] = 'bar2'
        assert mydict['foo'] == 'bar2'
        assert ModelDictModel.objects.values_list(
            'value', flat=True).get(key='foo') == 'bar2'
        assert ModelDictModel.objects.count() == base_count + 1
        mydict['foo2'] = 'bar'
        assert mydict['foo2'] == 'bar'
        assert ModelDictModel.objects.values_list(
            'value', flat=True).get(key='foo2') == 'bar'
        assert ModelDictModel.objects.count() == base_count + 2
        del mydict['foo2']
        with pytest.raises(KeyError):
            mydict.__getitem__('foo2')
        assert not ModelDictModel.objects.filter(key='foo2').exists()
        assert ModelDictModel.objects.count() == base_count + 1

        ModelDictModel.objects.create(key='foo3', value='hello')

        assert mydict['foo3'] == 'hello'
        assert ModelDictModel.objects.filter(key='foo3').exists(), True
        assert ModelDictModel.objects.count() == base_count + 2

        request_finished.send(sender=self)

        assert mydict._last_checked_for_remote_changes == 0.0

        # These should still error because even though the cache repopulates (local cache)
        # the remote cache pool does not
        # self.assertRaises(KeyError, mydict.__getitem__, 'foo3')
        # self.assertTrue(ModelDictModel.objects.filter(key='foo3').exists())
        # self.assertEquals(ModelDictModel.objects.count(), base_count + 2)

        assert mydict['foo'] == 'bar2'
        assert ModelDictModel.objects.values_list(
            'value', flat=True).get(key='foo') == 'bar2'
        assert ModelDictModel.objects.count() == base_count + 2

        assert mydict.pop('foo') == 'bar2'
        assert mydict.pop('foo', None) is None
        assert not ModelDictModel.objects.filter(key='foo').exists()
        assert ModelDictModel.objects.count() == base_count + 1
Exemplo n.º 18
0
    def test_setdefault_instances(self):
        mydict = ModelDict(ModelDictModel, key='key', value='value')

        with pytest.raises(KeyError):
            mydict['hello']

        instance = ModelDictModel(key='hello', value='world')
        ret = mydict.setdefault('hello', instance)
        assert ret == 'world'
        assert mydict['hello'] == 'world'

        instance2 = ModelDictModel(key='hello', value='world2')
        ret = mydict.setdefault('hello', instance2)
        assert ret == 'world'
        assert mydict['hello'] == 'world'
Exemplo n.º 19
0
 def test_switch_creation_with_custom_remote_timeout(self):
     cache = mock.Mock()
     mydict = ModelDict(ModelDictModel,
                        key='key',
                        value='value',
                        auto_create=True,
                        cache=cache,
                        remote_timeout=None)
     mydict['hello'] = 'foo'
     assert cache.get.call_count == 0
     assert cache.set_many.call_count == 1
     cache.set_many.assert_any_call(
         {
             mydict.remote_cache_key: {
                 u'hello': u'foo'
             },
             mydict.remote_cache_last_updated_key:
             mydict._last_checked_for_remote_changes,
         },
         timeout=None)
Exemplo n.º 20
0
    def test_modeldict_expirey(self):
        base_count = ModelDictModel.objects.count()

        mydict = ModelDict(ModelDictModel, key='key', value='value')

        self.assertEquals(mydict._cache, None)

        mydict['test_modeldict_expirey'] = 'hello'

        self.assertEquals(len(mydict._cache), base_count + 1)
        self.assertEquals(mydict['test_modeldict_expirey'], 'hello')

        self.client.get('/')

        self.assertEquals(mydict._cache, None)
        self.assertEquals(mydict['test_modeldict_expirey'], 'hello')
        self.assertEquals(len(mydict._cache), base_count + 1)

        request_finished.send(sender=self)

        self.assertEquals(mydict._cache, None)
        self.assertEquals(mydict['test_modeldict_expirey'], 'hello')
        self.assertEquals(len(mydict._cache), base_count + 1)
Exemplo n.º 21
0
    def test_modeldict_expirey(self):
        base_count = ModelDictModel.objects.count()

        mydict = ModelDict(ModelDictModel, key='key', value='value')

        assert mydict._local_cache == {}

        mydict['test_modeldict_expirey'] = 'hello'

        assert len(mydict._local_cache) == base_count + 1
        assert mydict['test_modeldict_expirey'] == 'hello'

        self.client.get('/')

        assert mydict._last_checked_for_remote_changes == 0.0
        assert mydict['test_modeldict_expirey'] == 'hello'
        assert len(mydict._local_cache) == base_count + 1

        request_finished.send(sender=self)

        assert mydict._last_checked_for_remote_changes == 0.0
        assert mydict['test_modeldict_expirey'] == 'hello'
        assert len(mydict._local_cache) == base_count + 1
Exemplo n.º 22
0
from django.conf import settings
from experiments.models import Experiment
from modeldict import ModelDict

experiment_manager = ModelDict(Experiment, key='name', value='value', instances=True, auto_create=getattr(settings, 'EXPERIMENTS_AUTO_CREATE', True))
Exemplo n.º 23
0
 def test_modeldict_no_auto_create(self):
     # without auto_create
     mydict = ModelDict(ModelDictModel, key='key', value='value')
     self.assertRaises(KeyError, lambda x: x['hello'], mydict)
     self.assertEquals(ModelDictModel.objects.count(), 0)
Exemplo n.º 24
0
 def test_modeldict_no_auto_create(self):
     # without auto_create
     mydict = ModelDict(ModelDictModel, key='key', value='value')
     with pytest.raises(KeyError):
         mydict['hello']
     assert ModelDictModel.objects.count() == 0
Exemplo n.º 25
0
 def test_modeldict_items(self):
     mydict = ModelDict(ModelDictModel, key='key', value='value')
     mydict['hello'] = 'world'
     assert list(mydict.items()) == [('hello', 'world')]
Exemplo n.º 26
0
 def test_modeldict_values(self):
     mydict = ModelDict(ModelDictModel, key='key', value='value')
     mydict['hello'] = 'world'
     assert list(mydict.values()) == ['world']
Exemplo n.º 27
0
 def test_modeldict_iter(self):
     mydict = ModelDict(ModelDictModel, key='key', value='value')
     mydict['hello'] = 'world'
     assert next(iter(mydict)) == 'hello'
Exemplo n.º 28
0
 def test_modeldict_len_two(self):
     mydict = ModelDict(ModelDictModel, key='key', value='value')
     mydict['hello'] = 'world'
     mydict['hi'] = 'world'
     assert len(mydict) == 2
Exemplo n.º 29
0
 def test_modeldict_len_empty(self):
     mydict = ModelDict(ModelDictModel, key='key', value='value')
     assert len(mydict) == 0