in vmap_generation/app.py [0:0]
def lambda_handler(event, context):
print("We got the following event:\n", event)
operator_object = MediaInsightsOperationHelper(event)
# Get media metadata from input event
try:
asset_id = operator_object.asset_id
bucket = operator_object.input["Media"]["Video"]["S3Bucket"]
except Exception as exception:
operator_object.update_workflow_status("Error")
operator_object.add_workflow_metadata(
VmapGenerationError="Missing a required metadata key {e}".format(e=exception))
raise MasExecutionError(operator_object.return_output_object())
# Get slots metadata from dataplane
try:
slots = {}
params = {"asset_id": asset_id, "operator_name": "slotDetection"}
while True:
resp = dataplane.retrieve_asset_metadata(**params)
if "operator" in resp and resp["operator"] == "slotDetection":
__update_and_merge_lists(slots, resp["results"])
if "cursor" not in resp:
break
params["cursor"] = resp["cursor"]
print("slots: {}".format(slots))
except Exception as exception:
operator_object.update_workflow_status("Error")
operator_object.add_workflow_metadata(
VmapGenerationError="Unable to retrieve metadata for asset {}: {}".format(asset_id, exception))
raise MasExecutionError(operator_object.return_output_object())
try:
# Select slots with highest scores
slots["slots"].sort(key=lambda slot: slot["Score"])
top_slots = slots["slots"][-top_slots_qty:]
# Generate VMAP and add object
key = 'private/assets/{}/vmap/ad_breaks.vmap'.format(asset_id)
__write_vmap(top_slots, bucket, key)
operator_object.add_media_object("VMAP", bucket, key)
# Set workflow status complete
operator_object.update_workflow_status("Complete")
return operator_object.return_output_object()
except Exception as exception:
print("Exception:\n", exception)
operator_object.update_workflow_status("Error")
operator_object.add_workflow_metadata(VmapGenerationError=exception)
raise MasExecutionError(operator_object.return_output_object())