示例#1
0
    def get(self, request, *args, **kwargs):
        self.object = self.get_object(kwargs["model_pk"], kwargs["username"],
                                      kwargs["title"])
        sim = SimulationSerializer(self.object)
        if self.object.outputs:
            data = sim.data
            outputs = data["outputs"]["outputs"]
            data["outputs"] = cs_storage.read(outputs)
            return Response(data, status=status.HTTP_200_OK)
        elif self.object.traceback is not None:
            return Response(sim.data, status=status.HTTP_200_OK)

        job_id = str(self.object.job_id)
        compute = Compute()
        try:
            job_ready = compute.results_ready(job_id)
        except JobFailError:
            self.object.traceback = ""
            self.object.save()
            return Response({"error": "model error"},
                            status=status.HTTP_400_BAD_REQUEST)
        # something happened and the exception was not caught
        if job_ready == "FAIL":
            result = compute.get_results(job_id)
            if result["traceback"]:
                traceback_ = result["traceback"]
            else:
                traceback_ = "Error: The traceback for this error is unavailable."
            self.object.traceback = traceback_
            self.object.status = "WORKER_FAILURE"
            self.object.save()
            return Response({"error": "model error"},
                            status=status.HTTP_400_BAD_REQUEST)

        return Response(sim.data, status=status.HTTP_202_ACCEPTED)
示例#2
0
 def dispatch(self, request, *args, **kwargs):
     compute = Compute()
     model_pk, username, title = (
         kwargs["model_pk"],
         kwargs["username"],
         kwargs["title"],
     )
     self.object = self.get_object(model_pk, username, title)
     if self.object.outputs or self.object.aggr_outputs:
         return self.render_outputs(request)
     elif self.object.traceback is not None:
         return self.fail(model_pk, username, title)
     else:
         job_id = str(self.object.job_id)
         try:
             job_ready = compute.results_ready(job_id)
         except JobFailError as jfe:
             self.object.traceback = ""
             self.object.save()
             return self.fail(model_pk, username, title)
         # something happened and the exception was not caught
         if job_ready == "FAIL":
             result = compute.get_results(job_id)
             if result["traceback"]:
                 traceback_ = result["traceback"]
             else:
                 traceback_ = "Error: The traceback for this error is unavailable."
             self.object.traceback = traceback_
             self.object.status = "WORKER_FAILURE"
             self.object.save()
             return self.fail(model_pk, username, title)
         else:
             if request.method == "POST":
                 # if not ready yet, insert number of minutes remaining
                 exp_num_minutes = self.object.compute_eta()
                 orig_eta = self.object.compute_eta(
                     self.object.creation_date)
                 return JsonResponse(
                     {
                         "eta": exp_num_minutes,
                         "origEta": orig_eta
                     },
                     status=202)
             else:
                 context = {"eta": "100", "origEta": "0"}
                 return render(request, "comp/not_ready.html", context)
示例#3
0
    def get_sim_data(self, user, as_remote, username, title, model_pk):
        self.object = self.get_object(model_pk, username, title)
        sim = SimulationSerializer(self.object,
                                   context={"request": self.request})
        data = sim.data
        if self.object.outputs_version() == "v0":
            return Response(data, status=status.HTTP_200_OK)
        elif self.object.outputs:
            outputs = data["outputs"]["outputs"]
            if not as_remote:
                data["outputs"] = cs_storage.read(outputs)
            else:
                data["outputs"]["outputs"] = cs_storage.add_screenshot_links(
                    data["outputs"]["outputs"])
            return Response(data, status=status.HTTP_200_OK)
        elif self.object.traceback is not None:
            return Response(data, status=status.HTTP_200_OK)
        elif self.object.status == "STARTED":
            return Response(data, status=status.HTTP_200_OK)

        compute = Compute()
        try:
            job_ready = compute.results_ready(self.object)
        except JobFailError:
            self.object.traceback = ""
            self.object.save()
            return Response({"error": "model error"},
                            status=status.HTTP_400_BAD_REQUEST)
        # something happened and the exception was not caught
        if job_ready == "FAIL":
            result = compute.get_results(self.object)
            if result["traceback"]:
                traceback_ = result["traceback"]
            else:
                traceback_ = "Error: The traceback for this error is unavailable."
            self.object.traceback = traceback_
            self.object.status = "WORKER_FAILURE"
            self.object.save()
            return Response({"error": "model error"},
                            status=status.HTTP_400_BAD_REQUEST)
        data.update(sim.data)
        return Response(data, status=status.HTTP_202_ACCEPTED)