Beispiel #1
0
    def test_get_ml_job(self):
        """
        Get ML Job works
        """

        data = self.build_ml_job_dataset()
        # validate jwt tokens work
        self.login_user()
        request = self.factory.post(self.ml_run_url,
                                    data,
                                    HTTP_AUTHORIZATION=self.jwt_auth,
                                    format="json")
        view = MLJobViewSet.as_view({"post": "create"})
        response = view(request)
        self.assertEqual(MLJob.objects.count(), 1)
        self.assertEqual(MLJobResult.objects.count(), 1)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.data["job"]["user_name"], self.test_username)
        self.assertEqual(response.data["job"]["title"], data["title"])

        job_data = response.data["job"]
        job_tracking_id = job_data["tracking_id"]
        job_id = int(job_data["id"])

        request = self.factory.get(self.ml_get_url,
                                   HTTP_AUTHORIZATION=self.jwt_auth,
                                   format="json")
        view = MLJobViewSet.as_view({"get": "retrieve"})
        get_response = view(request, pk=job_id)
        self.assertEqual(get_response.data["user_name"], self.test_username)
        self.assertEqual(get_response.data["title"], data["title"])
        self.assertEqual(get_response.data["tracking_id"], job_tracking_id)
Beispiel #2
0
    def test_create_ml_job(self):
        """
        Create an ML Job
        """

        data = self.build_ml_job_dataset()
        # validate jwt tokens work
        self.login_user()
        request = self.factory.post(
                    self.ml_run_url,
                    data,
                    HTTP_AUTHORIZATION=self.jwt_auth,
                    format="json")
        view = MLJobViewSet.as_view({"post": "create"})
        response = view(request)
        self.assertEqual(MLJob.objects.count(), 1)
        self.assertEqual(MLJobResult.objects.count(), 1)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(
            response.data["job"]["user_name"], self.test_username)
        self.assertEqual(
            response.data["job"]["title"], data["title"])
        self.assertEqual(
            len(json.dumps(
                response.data["results"]["model_json"])) > 0,
            True)
        self.assertEqual(
            len(json.dumps(
                response.data["results"]["model_weights"])) > 0,
            True)
Beispiel #3
0
 def test_not_logged_in_blocked_ml_job_create(self):
     """
     Not Logged in Users cannot - Create an ML Job
     """
     data = self.build_ml_job_dataset()
     request = self.factory.post(self.ml_run_url, data, format="json")
     view = MLJobViewSet.as_view({"post": "create"})
     response = view(request)
     self.assertEqual(response.status_code, 401)
Beispiel #4
0
    def test_get_ml_job_result(self):
        """
        Get ML Job Result works
        """

        data = self.build_ml_job_dataset()
        # validate jwt tokens work
        self.login_user()
        request = self.factory.post(
                    self.ml_run_url,
                    data,
                    HTTP_AUTHORIZATION=self.jwt_auth,
                    format="json")
        view = MLJobViewSet.as_view({"post": "create"})
        response = view(request)
        self.assertEqual(MLJob.objects.count(), 1)
        self.assertEqual(MLJobResult.objects.count(), 1)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(
            response.data["job"]["user_name"], self.test_username)
        self.assertEqual(
            response.data["job"]["title"], data["title"])

        job_id = int(response.data["job"]["id"])
        result_data = response.data["results"]
        result_id = int(result_data["id"])
        error_data = result_data["error_data"]

        request = self.factory.get(
                    self.ml_get_result_url,
                    HTTP_AUTHORIZATION=self.jwt_auth,
                    format="json")
        view = MLJobResultViewSet.as_view({"get": "retrieve"})
        get_response = view(request, pk=result_id)
        print(ppj(get_response.data))
        self.assertEqual(
            get_response.data["user_name"], self.test_username)
        self.assertEqual(
            get_response.data["job_id"], job_id)
        self.assertEqual(
            get_response.data["id"], result_id)
        self.assertEqual(
            get_response.data["error_data"], error_data)
        self.assertContains(
            get_response, "model_json")
        self.assertContains(
            get_response, "model_weights")
        self.assertEqual(
            len(json.dumps(get_response.data["model_json"])) > 0,
            True)
        self.assertEqual(
            len(json.dumps(get_response.data["model_weights"])) > 0,
            True)
Beispiel #5
0
    def test_get_recent_ml_jobs(self):
        """
        Get Recent ML Jobs for User
        """

        data = self.build_ml_job_dataset()
        num_to_create = 30
        created_jobs = []
        for i in range(0, num_to_create):
            status = "finished"
            control_state = "finished"
            new_obj = MLJob(
                            user=self.test_user,
                            title=data["title"],
                            desc=data["desc"],
                            ds_name=data["ds_name"],
                            algo_name=data["algo_name"],
                            ml_type=data["ml_type"],
                            status=status,
                            control_state=control_state,
                            predict_feature="label_value",
                            training_data={},
                            pre_proc={},
                            post_proc={},
                            meta_data={},
                            tracking_id="id_{}".format(i),
                            version=data["version"])
            new_obj.save()
            created_jobs.append(new_obj)
        # end of creating jobs

        self.login_user()
        request = self.factory.get(
                    self.ml_get_url,
                    HTTP_AUTHORIZATION=self.jwt_auth,
                    format="json")
        view = MLJobViewSet.as_view({"get": "list"})
        get_response = view(request)
        self.assertContains(get_response, "jobs")
        self.assertEqual(
            len(get_response.data["jobs"]),
            settings.MAX_RECS_ML_JOB)
        for idx, response_node in enumerate(get_response.data["jobs"]):
            db_idx = (len(created_jobs) - idx) - 1
            db_node = created_jobs[db_idx]
            self.assertEqual(response_node["id"], db_node.id)
            self.assertEqual(
                response_node["tracking_id"], db_node.tracking_id)
Beispiel #6
0
    def test_get_ml_job_with_not_found_job_id(self):
        """
        Get ML Job returns 200 but empty data
        """

        # validate jwt tokens work
        self.login_user()

        job_id = 777

        request = self.factory.get(self.ml_get_url,
                                   HTTP_AUTHORIZATION=self.jwt_auth,
                                   format="json")
        view = MLJobViewSet.as_view({"get": "retrieve"})
        get_response = view(request, pk=job_id)
        self.assertEqual(get_response.status_code, status.HTTP_200_OK)
        self.assertEqual(get_response.data, {})