Added a quick way to get a list of all collections.

This commit is contained in:
David Snopek 2013-07-31 18:17:58 +01:00
parent 02ea97f6d9
commit 294afba2ac
2 changed files with 16 additions and 0 deletions

View File

@ -120,6 +120,10 @@ class RestApp(object):
if hasReturnValue:
return ret
def list_collections(self):
"""Returns an array of valid collection names in our self.data_path."""
return [x for x in os.listdir(self.data_root) if os.path.exists(os.path.join(self.data_root, x, 'collection.anki2'))]
def _checkRequest(self, req):
"""Raises an exception if the request isn't allowed or valid for some reason."""
if self.allowed_hosts != '*':
@ -234,6 +238,9 @@ class RestApp(object):
# make sure the request is valid
self._checkRequest(req)
if req.path == '/list_collections':
return Response(json.dumps(self.list_collections()), content_type='application/json')
# parse the path
type, name, ids = self._parsePath(req.path)

View File

@ -34,6 +34,15 @@ class RestAppTest(unittest.TestCase):
self.rest_app = None
shutil.rmtree(self.temp_dir)
def test_list_collections(self):
os.mkdir(os.path.join(self.temp_dir, 'test1'))
os.mkdir(os.path.join(self.temp_dir, 'test2'))
with open(os.path.join(self.temp_dir, 'test1', 'collection.anki2'), 'wt') as fd:
fd.write('Testing!')
self.assertEqual(self.rest_app.list_collections(), ['test1'])
def test_parsePath(self):
tests = [
('collection/user', ('collection', 'index', ['user'])),