Skip to content

Commit

Permalink
Merge 71aec61 into 7bc88e3
Browse files Browse the repository at this point in the history
  • Loading branch information
lundberg committed Sep 11, 2018
2 parents 7bc88e3 + 71aec61 commit f446b74
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 17 deletions.
12 changes: 12 additions & 0 deletions djedi/backends/django/cache/backend.py
Expand Up @@ -69,6 +69,7 @@ def __init__(self, *args, **kwargs):
self.calls = 0
self.hits = 0
self.misses = 0
self.sets = 0
super(DebugLocMemCache, self).__init__(*args, **kwargs)

def get(self, key, default=None, version=None, **kwargs):
Expand All @@ -92,3 +93,14 @@ def get_many(self, keys, version=None):
self.hits += hits
self.misses += (len(keys) - hits)
return d

def set(self, *args, **kwargs):
super(DebugLocMemCache, self).set(*args, **kwargs)
self.calls += 1
self.sets += 1

def set_many(self, data, *args, **kwargs):
result = super(DebugLocMemCache, self).set_many(data, *args, **kwargs)
self.calls -= len(data) # Remove calls from set()
self.calls += 1
return result
10 changes: 10 additions & 0 deletions djedi/rest/api.py
Expand Up @@ -36,6 +36,16 @@ class NodesApi(APIView):
"""
@never_cache
def post(self, request):
# Disable caching gets in CachePipe, defaults through this api is not trusted
cio.conf.settings.configure(
local=True,
CACHE={
'PIPE': {
'CACHE_ON_GET': False
}
}
)

nodes = []
for uri, default in six.iteritems(json.loads(request.body)):
node = cio.get(uri, default=default)
Expand Down
19 changes: 11 additions & 8 deletions djedi/tests/base.py
Expand Up @@ -50,23 +50,26 @@ def assertKeys(self, dict, *keys):
self.assertEqual(set(dict.keys()), set(keys))

@contextmanager
def assertCache(self, calls=-1, hits=-1, misses=-1):
def assertCache(self, calls=-1, hits=-1, misses=-1, sets=-1):
from cio.backends import cache

_cache = cache.backend._cache

_cache.calls = 0
_cache.hits = 0
_cache.misses = 0
_cache.sets = 0

yield

if calls >= 0:
assert _cache.calls == calls
assert _cache.calls == calls, '%s != %s' % (_cache.calls, calls)
if hits >= 0:
assert _cache.hits == hits
assert _cache.hits == hits, '%s != %s' % (_cache.hits, hits)
if misses >= 0:
assert _cache.misses == misses
assert _cache.misses == misses, '%s != %s' % (_cache.misses, misses)
if sets >= 0:
assert _cache.sets == sets, '%s != %s' % (_cache.sets, sets)

@contextmanager
def assertDB(self, calls=-1, selects=-1, inserts=-1, updates=-1):
Expand All @@ -83,16 +86,16 @@ def assertDB(self, calls=-1, selects=-1, inserts=-1, updates=-1):
setattr(connection, DEBUG_CURSOR_ATTR, pre_debug_cursor)

if calls >= 0:
assert num_queries == calls
assert num_queries == calls, '%s != %s' % (num_queries, calls)
if selects >= 0:
num_selects = len([q for q in queries if q['sql'].startswith('SELECT')])
assert num_selects == selects
assert num_selects == selects, '%s != %s' % (num_selects, selects)
if inserts >= 0:
num_inserts = len([q for q in queries if q['sql'].startswith('INSERT')])
assert num_inserts == inserts
assert num_inserts == inserts, '%s != %s' % (num_inserts, inserts)
if updates >= 0:
num_updates = len([q for q in queries if q['sql'].startswith('UPDATE')])
assert num_updates == updates
assert num_updates == updates, '%s != %s' % (num_updates, updates)

def assertRenderedMarkdown(self, value, source):
if cio.PY26:
Expand Down
17 changes: 9 additions & 8 deletions djedi/tests/test_rest.py
Expand Up @@ -296,18 +296,19 @@ def test_embed(self):
self.assertEqual(response.status_code, 403)

def test_nodes(self):
cio.set('sv-se@label/email', u'E-post')
with self.assertCache(sets=1):
cio.set('sv-se@rest/label/email', u'E-post')

with self.assertDB(calls=1):
with self.assertDB(calls=1), self.assertCache(calls=1, misses=1, hits=1, sets=0):
url = reverse('admin:djedi:rest:nodes')
response = self.client.post(url, json.dumps({
'page/body.md': u'# Foo Bar',
'label/email': u'E-mail',
'rest/page/body.md': u'# Foo Bar',
'rest/label/email': u'E-mail',
}), content_type='application/json')

json_content = json.loads(response.content)

self.assertIn('i18n://sv-se@page/body.md', json_content.keys())
self.assertEqual(json_content['i18n://sv-se@page/body.md'], u'<h1>Foo Bar</h1>')
self.assertIn('i18n://sv-se@label/email.txt#1', json_content.keys())
self.assertEqual(json_content['i18n://sv-se@label/email.txt#1'], u'E-post')
self.assertIn('i18n://sv-se@rest/page/body.md', json_content.keys())
self.assertEqual(json_content['i18n://sv-se@rest/page/body.md'], u'<h1>Foo Bar</h1>')
self.assertIn('i18n://sv-se@rest/label/email.txt#1', json_content.keys())
self.assertEqual(json_content['i18n://sv-se@rest/label/email.txt#1'], u'E-post')
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -5,7 +5,7 @@

install_requires = [
'six',
'content-io >= 1.2.4',
'content-io >= 1.2.5',
'simplejson >= 3.2.0'
]

Expand Down

0 comments on commit f446b74

Please sign in to comment.