示例#1
0
    def list(self, request):
        """
        List Agents

        Filter agents with query parameters.
        """
        serializer = AgentQuery(data=request.GET)
        if serializer.is_valid(raise_exception=True):
            page = serializer.validated_data.get("page")
            per_page = serializer.validated_data.get("per_page")
            agent_status = serializer.validated_data.get("status")
            name = serializer.validated_data.get("name")
            agent_type = serializer.validated_data.get("type")
            organization = serializer.validated_data.get("organization")

            query_filters = {}
            if organization:
                if not request.user.is_operator:
                    raise PermissionDenied()
                query_filters.update({"organization": organization})
            else:
                org_name = (
                    request.user.organization.name
                    if request.user.organization
                    else ""
                )
                if request.user.is_administrator:
                    query_filters.update({"organization__name": org_name})
            if name:
                query_filters.update({"name__icontains": name})
            if agent_status:
                query_filters.update({"status": agent_status})
            if agent_type:
                query_filters.update({"type": agent_type})

            agents = Agent.objects.filter(**query_filters)
            p = Paginator(agents, per_page)
            agents = p.page(page)
            # agents = [agent.__dict__ for agent in agents]
            agent_list = []
            for agent in agents:
                agent_dict = agent.__dict__
                agent_dict.update(
                    {
                        "config_file": request.build_absolute_uri(
                            agent.config_file.url
                        )
                    }
                )
                agent_list.append(agent_dict)

            response = AgentListResponse(
                data={"data": agent_list, "total": p.count}
            )
            if response.is_valid(raise_exception=True):
                return Response(
                    response.validated_data, status=status.HTTP_200_OK
                )
示例#2
0
文件: views.py 项目: arindbha/cello
    def list(self, request):
        """
        List Agents

        Filter agents with query parameters.
        """
        serializer = AgentQuery(data=request.GET)
        if serializer.is_valid(raise_exception=True):
            page = serializer.validated_data.get("page")
            per_page = serializer.validated_data.get("per_page")
            agent_status = serializer.validated_data.get("status")
            name = serializer.validated_data.get("name")
            agent_type = serializer.validated_data.get("type")
            organization = serializer.validated_data.get("organization")

            query_filters = {}
            if organization:
                if not request.user.is_operator:
                    raise PermissionDenied()
                query_filters.update({"organization": organization})
            else:
                org_name = (
                    request.user.organization.name
                    if request.user.organization
                    else ""
                )
                if request.user.is_administrator:
                    query_filters.update({"organization__name": org_name})
            if name:
                query_filters.update({"name__icontains": name})
            if agent_status:
                query_filters.update({"status": agent_status})
            if agent_type:
                query_filters.update({"type": agent_type})

            agents = Agent.objects.filter(**query_filters)
            p = Paginator(agents, per_page)
            agents = p.page(page)
            agents = [agent.__dict__ for agent in agents]

            response = AgentListResponse(
                data={"data": agents, "total": p.count}
            )
            if response.is_valid(raise_exception=True):
                return Response(
                    response.validated_data, status=status.HTTP_200_OK
                )
示例#3
0
    def list(self, request):
        """
        List Agents

        :param request: query parameter
        :return: agent list
        :rtype: list
        """
        serializer = AgentQuery(data=request.GET)
        if serializer.is_valid(raise_exception=True):
            page = serializer.validated_data.get("page")
            per_page = serializer.validated_data.get("per_page")
            agent_status = serializer.validated_data.get("status")
            name = serializer.validated_data.get("name")
            agent_type = serializer.validated_data.get("type")
            organization = serializer.validated_data.get("organization")

            query_filters = {}
            # if organization:
            #     if not request.user.is_operator:
            #         raise PermissionDenied()
            #     query_filters.update({"organization": organization})
            # else:
            #     org_name = (
            #         request.user.organization.name
            #         if request.user.organization
            #         else ""
            #     )
            #     if request.user.is_administrator:
            #         query_filters.update({"organization__name": org_name})
            if name:
                query_filters.update({"name__icontains": name})
            if agent_status:
                query_filters.update({"status": agent_status})
            if agent_type:
                query_filters.update({"type": agent_type})
            if organization:
                query_filters.update({"organization": organization})

            agents = Agent.objects.filter(**query_filters)
            p = Paginator(agents, per_page)
            agents = p.page(page)
            # agents = [agent.__dict__ for agent in agents]
            agent_list = []
            # for agent in agents:
            #     agent_dict = agent.__dict__
            #     agent_list.append(agent_dict)
            agent_list = [{
                "id":
                agent.id,
                "name":
                agent.name,
                "status":
                agent.status,
                "type":
                agent.type,
                "urls":
                agent.urls,
                "organization":
                str(agent.organization.id) if agent.organization else None,
                "created_at":
                agent.created_at,
            } for agent in agents]

            response = AgentListResponse(data={
                "data": agent_list,
                "total": p.count
            })
            if response.is_valid(raise_exception=True):
                return Response(response.validated_data,
                                status=status.HTTP_200_OK)