in gnm_deliverables/views/metadata_views.py [0:0]
def do_post(self, request, project_id:int, platform:str, asset_id:int):
from gnm_deliverables.signals import MessageRelay
try:
asset:DeliverableAsset = DeliverableAsset.objects.get(pk=asset_id)
except DeliverableAsset.DoesNotExist:
return Response({"status":"error","details":"Asset not found"}, status=404)
try:
relay = MessageRelay()
except Exception as e:
logger.error("Could not initialise message relay: {0}".format(e))
return Response({"status":"error","details": "could not initialise message relay"}, status=500)
routes_map:dict = getattr(settings, "CDS_ROUTE_MAP")
if routes_map is None:
logger.error("Could not find CDS_ROUTE_MAP in the configuration")
return Response({"status":"config_error","details": "CDS_ROUTE_MAP not in configuration"}, status=500)
platform_name = platform.lower()
route_name = routes_map.get(platform_name)
if route_name is None:
logger.error("Platform {0} was not recognised. CDS_ROUTE_MAP has {1}".format(platform_name, routes_map))
return Response({"status":"bad_request","detail": "Platform name not recognised"}, status=400)
routing_key = "deliverables.syndication.{0}.upload".format(platform_name)
message_content = {
"inmeta": inmeta_to_string(asset, platform_name),
"deliverable_asset": asset.pk,
"deliverable_bundle": asset.deliverable.pk,
"filename": os.path.basename(asset.filename),
"online_id": asset.online_item_id,
"nearline_id": asset.nearline_item_id,
"archive_id": asset.archive_item_id,
"routename": route_name
}
try:
encoded_payload = json.dumps(message_content).encode("UTF-8")
except Exception as e:
logger.error("Could not encode the message content payload: {0}".format(str(e)))
logger.error("Offending content was {0}".format(message_content))
return Response({"status":"error","detail":str(e)})
try:
relay.send_content(routing_key, encoded_payload)
self.make_sent_note(platform, request.user.username, asset)
return Response({"status":"ok","routing_key":routing_key})
except Exception as e:
logger.error("Could not send message to {0}: {1}".format(routing_key, str(e)))
return Response({"status":"error","detail": "Could not send message to broker"}, status=500)