Skip to content

Add request_already_generating check to results batch_async_generate_results call #1749

Open
@bwbroersma

Description

@bwbroersma

This is used in the get_request (/api/batch/v2/requests/<request_id>):

if (
batch_request.status == BatchRequestStatus.done
and not batch_request.has_report_file()
and not request_already_generating(batch_request.request_id)
):
batch_async_generate_results.delay(user=user, batch_request=batch_request, site_url=get_site_url(request))
lock_id = redis_id.batch_results_request_lock.id.format(batch_request.request_id)
cache.add(lock_id, True)

However a direct call to results (/api/batch/v2/requests/<request_id>/results[technical]) does not seem to do this check:

def results(request, request_id, *args, technical=False, **kwargs):
user = kwargs["batch_user"]
try:
batch_request = BatchRequest.objects.get(user=user, request_id=request_id)
except BatchRequest.DoesNotExist:
return unknown_request_response()
if batch_request.status != BatchRequestStatus.done:
return bad_client_request_response("The request is not yet `done`.")
else:
if not batch_request.has_report_file():
batch_async_generate_results.delay(user=user, batch_request=batch_request, site_url=get_site_url(request))
return bad_client_request_response("The request is not yet `done`.")

I think the conditional check should be added to the latter too?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions