Skip to content

Commit abf5e00

Browse files
feat: add retry action for failed or finished predictions in PredictionViewSet
1 parent 1cab2bd commit abf5e00

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

backend/core/views.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,6 +1031,25 @@ def partial_update(self, request, *args, **kwargs):
10311031

10321032
return super().partial_update(request, *args, **kwargs)
10331033

1034+
@decorators.action(detail=True, methods=["post"], url_path="retry")
1035+
def retry(self, request, pk=None):
1036+
"""Retry a failed or finished prediction."""
1037+
instance = self.get_object()
1038+
if instance.status not in ["FAILED", "FINISHED"]:
1039+
return Response({"detail": f"Cannot retry {instance.status} prediction"}, status=status.HTTP_400_BAD_REQUEST)
1040+
1041+
task = predict_area.apply_async(
1042+
kwargs={"prediction_request_id": instance.id, "folder": instance.config.get("folder") if instance.config else None},
1043+
queue="predictions"
1044+
)
1045+
instance.task_id = task.id
1046+
instance.status = "PENDING"
1047+
instance.started_at = instance.finished_at = None
1048+
instance.result = instance.result or {}
1049+
instance.result['retried_at'] = timezone.now().isoformat()
1050+
instance.save()
1051+
return Response({"detail": "Queued for retry", "task_id": task.id})
1052+
10341053

10351054
class TerminatePredictionView(APIView):
10361055
authentication_classes = [OsmAuthentication]

0 commit comments

Comments
 (0)