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)
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)
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)
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)
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)
def _validate_organization(request): if request.user.organization is None: raise CustomError(detail="Need join in organization.")
def _validate_organization(request): if not request.user.is_operator and request.user.organization is None: raise CustomError(detail="Need join in organization.")