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)
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)
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)