Skip to content

Commit

Permalink
Merge pull request #220 from whole-tale/image_filtering
Browse files Browse the repository at this point in the history
Allow to filter images by tag
  • Loading branch information
Xarthisius committed Mar 24, 2019
2 parents 21b6f3c + f168b1b commit 562b36e
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 18 deletions.
55 changes: 55 additions & 0 deletions plugin_tests/image_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,61 @@ def testImageAccess(self):
self.assertStatusOk(resp)
self.assertEqual(resp.json['public'], False)

def testImageSearch(self):
from girder.plugins.wholetale.models.image import Image
images = []
images.append(
Image().createImage(
name='Jupyter One',
tags=['black'], creator=self.user, description='Blah', public=False)
)
images.append(
Image().createImage(
name='Jupyter Two',
tags=['orange'], creator=self.user, description='Blah', public=False,
parent=images[0])
)
images.append(
Image().createImage(
name='Fortran',
tags=['black'], creator=self.user, description='Blah', public=True)
)

resp = self.request(
path='/image', method='GET', user=self.user,
params={'text': 'Jupyter'})
self.assertStatusOk(resp)
self.assertEqual(
{_['name'] for _ in resp.json}, {'Jupyter One', 'Jupyter Two'}
)

resp = self.request(
path='/image', method='GET', user=self.user,
params={'tag': 'black'})
self.assertStatusOk(resp)
self.assertEqual(
{_['name'] for _ in resp.json}, {'Jupyter One', 'Fortran'}
)

resp = self.request(
path='/image', method='GET', user=self.user,
params={'tag': 'black', 'text': 'Fortran'})
self.assertStatusOk(resp)
self.assertEqual(
{_['name'] for _ in resp.json}, {'Fortran'}
)

resp = self.request(
path='/image', method='GET', user=self.user,
params={'parentId': str(images[0]['_id'])})
self.assertStatusOk(resp)
self.assertEqual(
{_['name'] for _ in resp.json}, {'Jupyter Two'}
)

for image in images:
Image().remove(image)

def tearDown(self):
self.model('user').remove(self.user)
self.model('user').remove(self.admin)
Expand Down
29 changes: 11 additions & 18 deletions server/rest/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from girder.api import access
from girder.api.docs import addModel
from girder.api.describe import Description, autoDescribeRoute
from girder.api.rest import Resource, filtermodel, RestException
from girder.api.rest import Resource, filtermodel
from girder.constants import AccessType, SortDir, TokenScope
from ..schema.misc import containerConfigSchema, tagsSchema

Expand Down Expand Up @@ -117,29 +117,22 @@ def listImages(self, parentId, text, tag, limit, offset, sort, params):
user = self.getCurrentUser()
imageModel = self.model('image', 'wholetale')

filters = {}
if parentId:
parent = imageModel.load(
parentId, user=user, level=AccessType.READ, exc=True)
filters['parentId'] = parent['_id']
if tag:
filters['tags'] = tag

filters = {}
if text:
filters['$text'] = {
'$search': text
}
if tag:
print('Do filtering by tag when I figure it out')

return list(imageModel.childImages(
parent=parent, user=user,
offset=offset, limit=limit, sort=sort, filters=filters))
elif text:
if text:
return list(imageModel.textSearch(
text, user=user, limit=limit, offset=offset, sort=sort))
elif tag:
raise RestException('Can\'t filter by tag. yet...')
text, user=user, limit=limit, offset=offset, sort=sort,
filters=filters, level=AccessType.READ))
else:
return list(imageModel.list(user=user, offset=offset, limit=limit,
sort=sort))
cursor = imageModel.find(filters, sort=sort)
return list(imageModel.filterResultsByPermission(
cursor, user, AccessType.READ, limit, offset))

@access.public(scope=TokenScope.DATA_READ)
@filtermodel(model='image', plugin='wholetale')
Expand Down

0 comments on commit 562b36e

Please sign in to comment.