Exemple #1
0
    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)
Exemple #2
0
 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)
Exemple #3
0
    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
Exemple #4
0
    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)