def _virtualChildItems(self, event): params = event.info['params'] if not params.get('folderId'): return # This is not a child listing request user = self.getCurrentUser() folder = Folder().load(params['folderId'], user=user, level=AccessType.READ) if not folder or not folder.get('isVirtual') or 'virtualItemsQuery' not in folder: return # Parent is not a virtual folder, proceed as normal limit, offset, sort = self.getPagingParameters(params, defaultSortField='name') q = json_util.loads(folder['virtualItemsQuery']) # Add other parameter options with $and to ensure they don't clobber the # virtual items query. if params.get('text'): q = {'$and': [q, {'$text': {'$search': params['text']}}]} if params.get('name'): q = {'$and': [q, {'name': params['name']}]} if 'virtualItemsSort' in folder: sort = json.loads(folder['virtualItemsSort']) item = Item() # These items may reside in folders that the user cannot read, so we must # find with permissions items = item.findWithPermissions( q, sort=sort, user=user, level=AccessType.READ, limit=limit, offset=offset) # We have to add this here, as we can't use filtermodel since we return the # results in addResponse. if callable(getattr(items, 'count', None)): cherrypy.response.headers['Girder-Total-Count'] = items.count() items = [item.filter(i, user) for i in items] event.preventDefault().addResponse(items)
def getCLIs(self): itemModel = Item() q = {'meta.slicerCLIType': 'task', 'folderId': self.tagFolder['_id']} if self.user: items = itemModel.findWithPermissions(q, user=self.user, level=AccessType.READ) else: items = itemModel.find(q) return [CLIItem(item) for item in items]
def _findAllItemImpl(user=None, extraQuery=None): itemModel = Item() q = {'meta.slicerCLIType': 'task'} if extraQuery: q.update(extraQuery) if user: items = itemModel.findWithPermissions(q, user=user, level=AccessType.READ) else: items = itemModel.find(q) return [CLIItem(item) for item in items]
def _virtualFolderDetails(self, event): folderId = event.info['id'] user = self.getCurrentUser() folder = Folder().load(folderId, user=user, level=AccessType.READ) if not folder or not folder.get('isVirtual') or 'virtualItemsQuery' not in folder: return # Parent is not a virtual folder, proceed as normal q = json_util.loads(folder['virtualItemsQuery']) item = Item() # Virtual folders can't contain subfolders result = { 'nFolders': 0, 'nItems': item.findWithPermissions(q, user=user, level=AccessType.READ).count() } event.preventDefault().addResponse(result)