in gnm_deliverables/views/metadata_views.py [0:0]
def put_update(self, request, asset, project_id, asset_id):
existing = self.metadata_model.objects.get(
deliverableasset__deliverable__pluto_core_project_id__exact=project_id,
deliverableasset=asset_id)
current_etag = existing.etag.strftime('%Y-%m-%dT%H:%M:%S.%fZ')
if current_etag == request.data.get('etag', None):
del request.data['etag']
put = self.metadata_serializer(existing, data=request.data)
if put.is_valid():
put.validated_data['etag'] = Now()
update_count = self.metadata_model.objects.filter(pk=existing.id,
etag=current_etag).update(
**put.validated_data)
if update_count == 0:
return Response({"status": "error", "detail": "etag conflict"}, status=409)
elif update_count == 1:
updated = self.metadata_model.objects.get(pk=existing.id)
return Response(
{"status": "ok", "data": self.metadata_serializer(updated).data},
status=200)
else:
return Response({"status": "error", "detail": "internal"}, status=500)
else:
return Response({"status": "error", "detail": put.errors}, status=400)
else:
return Response({"status": "error", "detail": "etag conflict"}, status=409)