rabbitmq/vidispine_item_processor.py (50 lines of code) (raw):
from .MessageProcessor import MessageProcessor
from .item_notification import ItemNotification
import logging
from gnm_deliverables.models import DeliverableAsset
import time
logger = logging.getLogger(__name__)
class VidispineItemProcessor(MessageProcessor):
routing_key = "vidispine.item.delete"
# see https://json-schema.org/learn/miscellaneous-examples.html for more details
schema = {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"field": {
"type": "array",
"items": {
"$ref": "#/definitions/kvpair"
}
}
},
"definitions": {
"kvpair": {
"type": "object",
"required": ["key","value"],
"properties": {
"key": {"type": "string"},
"value": {"type": "string"}
}
}
}
}
def valid_message_receive(self, exchange_name, routing_key, delivery_tag, body: dict):
"""
Receives the validated Vidispine JSON message.
:param exchange_name:
:param routing_key:
:param delivery_tag:
:param body:
:return:
"""
logger.debug("Got incoming message: " + str(body))
logger.debug("Exchange name: {0}".format(exchange_name))
logger.debug("Routing key: {0}".format(routing_key))
logger.debug("Delivery tag: {0}".format(delivery_tag))
notification = ItemNotification(body)
time.sleep(2)
assets = DeliverableAsset.objects.filter(online_item_id=notification.itemId)
if not assets:
logger.info("Received a message for Vidispine item {0}. Cannot find a matching asset.".format(notification.itemId))
return
try:
for asset in assets:
logger.info("Attempting to remove the Vidispine id. from asset {0} due to it being tied to deleted Vidispine item {1}.".format(asset.id, notification.itemId))
asset.online_item_id = None
asset.save()
except Exception as e:
logger.error("Failed to remove the Vidispine id. from asset {0}. Error was: {1}".format(asset.id, e))
return
return notification