rabbitmq/CDSResponderProcessor.py (47 lines of code) (raw):
from .MessageProcessor import MessageProcessor
from gnm_deliverables.models import DeliverableAsset, Mainstream, DailyMotion
import logging
from .serializers import CDSMessageSerializer
from .models import CDSResponderMessage
from gnm_deliverables.settings import CDS_ROUTE_MAP
from .exceptions import PermanentFailure
logger = logging.getLogger(__name__)
def get_mainstream_record(asset_id: int) -> Mainstream:
asset = DeliverableAsset.objects.get(id=asset_id)
return asset.mainstream_master
def get_dailymotion_record(asset_id: int) -> DailyMotion:
asset = DeliverableAsset.objects.get(id=asset_id)
return asset.DailyMotion_master
def get_route_mapping(routename: str) -> str:
"""
Get the correct route mapping to use by looking for the route name in the CDS_ROUTE_MAP dictionary from the settings file
:param routename: The routename to look up
:return: The string of the key name in the CDS_ROUTE_MAP dictionary
"""
return list(CDS_ROUTE_MAP.keys())[list(CDS_ROUTE_MAP.values()).index(routename)]
def set_asset_data(routename, asset, job_id=None, upload_status=None):
"""
Set data for asset on the correct route model if job_id and upload_status as present
:param routename: The routename to use to load the correct model
:param asset: The number of the asset
:param job_id: Optional job id. to set
:param upload_status: Optional upload status to set
:return:
"""
try:
route_mapping = get_route_mapping(routename)
if route_mapping == 'mainstream':
mainstream = get_mainstream_record(asset)
if job_id is not None:
mainstream.job_id = job_id
if upload_status is not None:
mainstream.upload_status = upload_status
mainstream.save()
elif route_mapping == 'dailymotion':
dailymotion = get_dailymotion_record(asset)
if job_id is not None:
dailymotion.job_id = job_id
if upload_status is not None:
dailymotion.upload_status = upload_status
dailymotion.save()
except DeliverableAsset.DoesNotExist:
raise PermanentFailure
class CDSResponderProcessor(MessageProcessor):
routing_key = "cds.job.started"
serializer = CDSMessageSerializer
def valid_message_receive(self, exchange_name, routing_key, delivery_tag, body):
msg = CDSResponderMessage(**body)
set_asset_data(msg.routename, int(msg.deliverable_asset), job_id=msg.job_name)
class CDSInvalidProcessor(MessageProcessor):
routing_key = "cds.job.invalid"
serializer = CDSMessageSerializer
def valid_message_receive(self, exchange_name, routing_key, delivery_tag, body):
msg = CDSResponderMessage(**body)
set_asset_data(msg.routename, int(msg.deliverable_asset), upload_status='Upload Failed')