コード例 #1
0
ファイル: views.py プロジェクト: sunny121li/cello
    def apply(self, request):
        """
        Apply Agent

        Apply Agent
        """
        serializer = AgentApplySerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            agent_type = serializer.validated_data.get("type")
            capacity = serializer.validated_data.get("capacity")

            if request.user.organization is None:
                raise CustomError(detail="Need join in organization")
            agent_count = Agent.objects.filter(
                organization=request.user.organization).count()
            if agent_count > 0:
                raise CustomError(detail="Already applied agent.")

            agents = Agent.objects.filter(
                organization__isnull=True,
                type=agent_type,
                capacity__gte=capacity,
                schedulable=True,
            ).order_by("capacity")
            if len(agents) == 0:
                raise NoResource

            agent = agents[0]
            agent.organization = request.user.organization
            agent.save()

            response = AgentIDSerializer(data=agent.__dict__)
            if response.is_valid(raise_exception=True):
                return Response(response.validated_data,
                                status=status.HTTP_200_OK)
コード例 #2
0
ファイル: views.py プロジェクト: yeasy/cello
    def release(self, request, pk=None):
        """
        Release Agent

        Release Agent
        """
        try:
            try:
                if request.user.is_operator:
                    agent = Agent.objects.get(id=pk)
                else:
                    if request.user.organization is None:
                        raise CustomError("Need join in organization")
                    agent = Agent.objects.get(
                        id=pk, organization=request.user.organization)
            except ObjectDoesNotExist:
                raise ResourceNotFound
            else:
                agent.organization = None
                agent.save()

                return Response(ok(None), status=status.HTTP_204_NO_CONTENT)
        except ResourceNotFound as e:
            raise e
        except Exception as e:
            return Response(err(e.args), status=status.HTTP_400_BAD_REQUEST)
コード例 #3
0
ファイル: views.py プロジェクト: yeasy/cello
    def destroy(self, request, pk=None):
        """
        Delete agent

        :param request: destory parameter
        :param pk: primary key
        :return: none
        :rtype: rest_framework.status
        """
        try:
            try:
                if request.user.is_administrator:
                    agent = Agent.objects.get(id=pk)
                else:
                    raise CustomError("User can't delete agent!")
            except ObjectDoesNotExist:
                raise ResourceNotFound
            else:
                if agent.node.count():
                    raise ResourceInUse
                agent.delete()

                return Response(ok(None), status=status.HTTP_202_ACCEPTED)
        except (ResourceNotFound, ResourceInUse) as e:
            raise e
        except Exception as e:
            return Response(err(e.args), status=status.HTTP_400_BAD_REQUEST)
コード例 #4
0
    def destroy(self, request, pk=None):
        """
        Delete User

        Delete user
        """
        try:
            UserProfile.objects.get(id=pk).delete()
        except Exception as e:
            raise CustomError(detail=str(e))
        else:
            return Response(status=status.HTTP_204_NO_CONTENT)
コード例 #5
0
    def auth(self, request):
        """
        Authenticate user with username & password

        Authenticate user with username & password
        """
        serializer = UserAuthSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            username = serializer.validated_data.get("username")
            password = serializer.validated_data.get("password")
            try:
                token = keycloak_openid.token(username, password)
            except KeycloakAuthenticationError as e:
                error_msg = json.loads(e.error_message)
                raise CustomError(
                    detail=error_msg.get("error_description", ""))

            response = UserAuthResponseSerializer(data=token)
            if response.is_valid(raise_exception=True):
                return Response(response.validated_data,
                                status=status.HTTP_200_OK)
コード例 #6
0
ファイル: views.py プロジェクト: Moshiach770/cello
 def _validate_organization(request):
     if request.user.organization is None:
         raise CustomError(detail="Need join in organization.")
コード例 #7
0
 def _validate_organization(request):
     if not request.user.is_operator and request.user.organization is None:
         raise CustomError(detail="Need join in organization.")