def get(self, request, file_mgr_name=None, system_id=None, offset=None, limit=None): """ Returns a list of Projects for the current user. :param request: :return: A list of Projects to which the current user has access :rtype: JsonResponse """ #raise HTTPError('Custom Error') ag = request.user.agave_oauth.client # Add metadata fields to project listings for workspace browser if system_id: projects = Project.list_projects(agave_client=ag, **{'path': '', 'type': 'dir', 'system': system_id}) for p in projects: p.path = '' p.name = p.value['title'] p.system = 'project-{}'.format(p.uuid) data = { 'children': projects, 'path': 'Projects', } else: offset = request.GET.get('offset', 0) limit = request.GET.get('limit', 100) projects = Project.list_projects(agave_client=ag, **{'offset':offset, 'limit':limit}) data = {'projects': projects} return JsonResponse(data, encoder=AgaveJSONEncoder)
def get(self, request): """ Returns a list of Projects for the current user. :param request: :return: A list of Projects to which the current user has access :rtype: JsonResponse """ ag = request.user.agave_oauth.client projects = Project.list_projects(agave_client=ag) data = {'projects': projects} return JsonResponse(data, encoder=AgaveJSONEncoder)
def search_projects(self, username, query_string, file_path=None, offset=0, limit=100): user = get_user_model().objects.get(username=username) ag = user.agave_oauth.client projects = Project.list_projects(agave_client=ag) split_query = query_string.split(" ") for i, c in enumerate(split_query): if c.upper() not in ["AND", "OR", "NOT"]: split_query[i] = "*" + c + "*" query_string = " ".join(split_query) children = [] for project in projects: search = IndexedFile.search()\ .query("query_string", query=query_string, fields=["name", "name._exact", "keywords"])\ .filter(Q({'term': {'system._exact': 'project-' + project.uuid}}))\ .extra(from_=offset, size=limit) res = search.execute() if res.hits.total: for o in search[offset:limit]: child = Object(wrap=o).to_dict() child.update({'title': project.title}) children.append(child) result = { 'trail': [{ 'name': '$SEARCH', 'path': '/$SEARCH' }], 'name': '$SEARCH', 'path': '/$SEARCH', 'system': 'designsafe.projects', 'type': 'dir', 'children': children, 'permissions': 'READ' } return result
def get(self, request, username): """Returns a list of Project for a specific user. If the requesting user is a super user then we can 'impersonate' another user. Else this is an unauthorized request. """ if not request.user.is_superuser: return HttpResponseForbidden() user = get_user_model().objects.get(username=username) ag = user.agave_oauth.client q = request.GET.get('q', None) if not q: projects = Project.list_projects(agave_client=ag) else: projects = Project.search(q=q, agave_client=ag) return JsonResponse({'projects': projects}, encoder=AgaveJSONEncoder)