コード例 #1
0
    def execute(self, request):
        input_data = load_request(request)
        required_parameters = ["project_id", "dataset_id", "pipeline_id"]
        if set(required_parameters).issubset(input_data.keys()):
            permissions = []
            try:
                project = Project.objects.get(id=int(input_data["project_id"]))
                if not IsOwnerOfProject().has_object_permission(
                        request, self, project):
                    permissions.append("Unauthorized to access project.")
            except Project.DoesNotExist:
                project = None
            try:
                pipeline = Pipeline.objects.get(
                    id=int(input_data["pipeline_id"]))
                if not IsOwnerOfPipeline().has_object_permission(
                        request, self, pipeline):
                    permissions.append("Unauthorized to access pipeline")
            except Pipeline.DoesNotExist:
                pipeline = None
            try:
                dataset = Dataset.objects.get(id=int(input_data["dataset_id"]))
                if not IsOwnerOfDataset().has_object_permission(
                        request, self, dataset):
                    permissions.append("Unauthorized to access dataset")
            except Dataset.DoesNotExist:
                dataset = None
            if len(permissions) > 0:
                return Response(permissions,
                                status=status.HTTP_401_UNAUTHORIZED)
            if project is None or dataset is None or pipeline is None:
                message = []
                if project is None:
                    message.append("No project found for id: {}".format(
                        input_data["project_id"]))
                if dataset is None:
                    message.append("No dataset found for id: {}".format(
                        input_data["dataset_id"]))
                if pipeline is None:
                    message.append("No pipeline found for id: {}".format(
                        input_data["pipeline_id"]))
                return Response(", ".join(message),
                                status=status.HTTP_400_BAD_REQUEST)
            try:
                DaskTasks.setup_task(project_id=project.id,
                                     dataset_id=dataset.id,
                                     pipeline_id=pipeline.id)
                response = "Successfully executed pipeline"
            except Exception as ex:
                response = "Error occured attempting to execute pipeline. Message: {}".format(
                    ex)
            return Response(response, status=status.HTTP_200_OK)

        else:
            return Response(
                "Missing required parameters in POST request. Required parameters: {}"
                .format(", ".join(required_parameters)),
                status.HTTP_400_BAD_REQUEST)
コード例 #2
0
    def refit_model(self, request):
        input_data = load_request(request)
        required_parameters = ["project_id", "model_id", "predictive_models"]
        if set(required_parameters).issubset(input_data.keys()):
            permissions = []
            try:
                project = Project.objects.get(id=int(input_data["project_id"]))
                if not IsOwnerOfProject().has_object_permission(
                        request, self, project):
                    permissions.append("Unauthorized to access project.")
            except Project.DoesNotExist:
                project = None
            try:
                model = Model.objects.get(id=int(input_data["model_id"]))
                if not IsOwnerOfModel().has_object_permission(
                        request, self, model):
                    permissions.append("Unauthorized to access pipeline")
            except Model.DoesNotExist:
                model = None
            if len(permissions) > 0:
                return Response(permissions,
                                status=status.HTTP_401_UNAUTHORIZED)
            if model is None or project is None:
                message = []
                if project is None:
                    message.append("No project found for id: {}".format(
                        input_data["project_id"]))
                if model is None:
                    message.append("No model found for id: {}".format(
                        input_data["model_id"]))
                return Response(", ".join(message),
                                status=status.HTTP_400_BAD_REQUEST)
            p_models = {}
            for p in json.loads(input_data["predictive_models"]):
                p_models[p[0]] = int(p[1])
            m = Metadata(model, json.dumps({"predictive_models": p_models}))
            meta = m.set_metadata("ModelMetadata")

            response = {}
            DaskTasks.refit_task(project.id, model.id, p_models)
            response["project_id"] = project.id
            response["pipeline_id"] = model.pipeline.id
            response["model_id"] = model.id
            response["dataset_id"] = project.dataset
            response["model_metadata"] = meta
            response[
                "status"] = "Initiated refit for specified models for prediction"
            return Response(response, status=status.HTTP_200_OK)
        data = "Missing required parameters: {}".format(
            ", ".join(required_parameters))
        response_status = status.HTTP_200_OK
        return Response(data, status=response_status)
コード例 #3
0
ファイル: pipeline_views.py プロジェクト: quanted/vb_django
    def evaluate(self, request):
        """

        :param request:
        :return:
        """
        input_data = load_request(request)
        required_parameters = ["project_id", "model_id"]
        if set(required_parameters).issubset(input_data.keys()):
            permissions = []
            try:
                project = Project.objects.get(id=int(input_data["project_id"]))
                if not IsOwnerOfProject().has_object_permission(
                        request, self, project):
                    permissions.append("Unauthorized to access project.")
            except Project.DoesNotExist:
                project = None
            try:
                model = Model.objects.get(id=int(input_data["model_id"]))
                if not IsOwnerOfModel().has_object_permission(
                        request, self, model):
                    permissions.append("Unauthorized to access pipeline")
            except Model.DoesNotExist:
                model = None
            if len(permissions) > 0:
                return Response(permissions,
                                status=status.HTTP_401_UNAUTHORIZED)
            if model is None or project is None:
                message = []
                if project is None:
                    message.append("No project found for id: {}".format(
                        input_data["project_id"]))
                if model is None:
                    message.append("No model found for id: {}".format(
                        input_data["model_id"]))
                return Response(", ".join(message),
                                status=status.HTTP_400_BAD_REQUEST)
            flag = input_data["flag"] if "flag" in input_data.keys() else None
            response = {}
            results = DaskTasks.evaluate(project.id, model.id, flag)
            response["project_id"] = project.id
            response["pipeline_id"] = model.pipeline.id
            response["model_id"] = model.id
            response["dataset_id"] = project.dataset
            response["results"] = results
            return Response(response, status=status.HTTP_200_OK)
        data = "Missing required parameters: {}".format(
            ", ".join(required_parameters))
        response_status = status.HTTP_200_OK
        return Response(data, status=response_status)
コード例 #4
0
ファイル: pipeline_views.py プロジェクト: quanted/vb_django
    def predict_and_save(self, request):
        """

        :param request:
        :return:
        """
        input_data = load_request(request)
        required_parameters = ["project_id", "model_id"]
        if set(required_parameters).issubset(input_data.keys()):
            permissions = []
            try:
                project = Project.objects.get(id=int(input_data["project_id"]))
                if not IsOwnerOfProject().has_object_permission(
                        request, self, project):
                    permissions.append("Unauthorized to access project.")
            except Project.DoesNotExist:
                project = None
            try:
                model = Model.objects.get(id=int(input_data["model_id"]))
                if not IsOwnerOfModel().has_object_permission(
                        request, self, model):
                    permissions.append("Unauthorized to access pipeline")
            except Model.DoesNotExist:
                model = None
            if len(permissions) > 0:
                return Response(permissions,
                                status=status.HTTP_401_UNAUTHORIZED)
            if model is None or project is None:
                message = []
                if project is None:
                    message.append("No project found for id: {}".format(
                        input_data["project_id"]))
                if model is None:
                    message.append("No model found for id: {}".format(
                        input_data["model_id"]))
                return Response(", ".join(message),
                                status=status.HTTP_400_BAD_REQUEST)
            pd = PredictionData(project_id=project.id, model_id=model.id)
            data = pd.get_cv_predictions()
            return Response(data, status=status.HTTP_200_OK)
        data = "Missing required parameters: {}".format(
            ", ".join(required_parameters))
        response_status = status.HTTP_200_OK
        return Response(data, status=response_status)
コード例 #5
0
 def status(self, request):
     input_data = self.request.query_params
     required_parameters = ["project_id", "pipeline_id"]
     if set(required_parameters).issubset(input_data.keys()):
         permissions = []
         try:
             project = Project.objects.get(id=int(input_data["project_id"]))
             if not IsOwnerOfProject().has_object_permission(
                     request, self, project):
                 permissions.append("Unauthorized to access project.")
         except Project.DoesNotExist:
             project = None
         try:
             pipeline = Pipeline.objects.get(
                 id=int(input_data["pipeline_id"]))
             if not IsOwnerOfPipeline().has_object_permission(
                     request, self, pipeline):
                 permissions.append("Unauthorized to access pipeline")
         except Pipeline.DoesNotExist:
             pipeline = None
         if len(permissions) > 0:
             return Response(permissions,
                             status=status.HTTP_401_UNAUTHORIZED)
         if pipeline is None or project is None:
             message = []
             if project is None:
                 message.append("No project found for id: {}".format(
                     input_data["project_id"]))
             if pipeline is None:
                 message.append("No pipeline found for id: {}".format(
                     input_data["pipeline_id"]))
             return Response(", ".join(message),
                             status=status.HTTP_400_BAD_REQUEST)
         response = {}
         meta = Metadata(parent=pipeline)
         metadata = meta.get_metadata("PipelineMetadata",
                                      ['status', 'stage', 'message'])
         response["metadata"] = metadata
         completed = False
         if "stage" in metadata.keys():
             i = metadata["stage"].split("/")
             try:
                 if int(i[0]) == int(i[1]):
                     completed = True
             except Exception as e:
                 logger.error("Request Error: {}".format(e))
                 logger.error("STAGE: {}".format(metadata["stage"]))
             if completed:
                 # TODO: Add additional pipeline completion results
                 models = Model.objects.filter(pipeline=pipeline)
                 model_details = []
                 for m in models:
                     model_details.append({
                         "id": m.id,
                         "name": m.name,
                         "description": m.description
                     })
                 response["models"] = model_details
             response["project_id"] = project.id
             response["dataset_id"] = project.dataset
             response["pipeline_id"] = pipeline.id
         return Response(response, status=status.HTTP_200_OK)
     data = "Missing required parameters: {}".format(
         ", ".join(required_parameters))
     response_status = status.HTTP_200_OK
     return Response(data, status=response_status)