gnm_deliverables/serializers.py (99 lines of code) (raw):
from django.utils.functional import cached_property
from rest_framework import serializers
from django.core.exceptions import ObjectDoesNotExist
from .choices import DELIVERABLE_ASSET_STATUSES_DICT
from .models import DeliverableAsset, Deliverable, GNMWebsite, Youtube, Mainstream, DailyMotion, \
LogEntry, SyndicationNotes, Oovvuu, ReutersConnect
class DeliverableAssetSerializer(serializers.ModelSerializer):
type_string = serializers.CharField(read_only=True)
size_string = serializers.CharField(read_only=True)
status_string = serializers.SerializerMethodField('get_status_string')
changed_string = serializers.CharField(read_only=True)
@cached_property
def user(self):
try:
return self.context['request'].user.username
except AttributeError:
return "admin"
except KeyError:
return "admin"
def get_status_string(self, obj):
return DELIVERABLE_ASSET_STATUSES_DICT.get(obj.status, "(not set)")
class Meta:
model = DeliverableAsset
fields = ['id', 'type', 'filename', 'size', 'access_dt', 'modified_dt', 'changed_dt', 'ingest_complete_dt',
'job_id', 'online_item_id', 'nearline_item_id', 'archive_item_id',
'deliverable', 'status', 'type_string', 'atom_id',
'size_string', 'status_string', 'changed_string',
'gnm_website_master', 'youtube_master', 'DailyMotion_master', "oovvuu_master", "reutersconnect_master",
'mainstream_master', 'absolute_path', 'linked_to_lowres']
read_only_fields = ['id', 'filename', 'size', 'access_dt', 'modified_dt',
'changed_dt', 'job_id item_id', 'deliverable']
class DenormalisedAssetSerializer(DeliverableAssetSerializer):
class Meta(DeliverableAssetSerializer.Meta):
depth = 1
class DeliverableSerializer(serializers.ModelSerializer):
class Meta:
model = Deliverable
fields = ["pk", "project_id", "commission_id", "pluto_core_project_id", "name", "created",
"local_open_uri", "local_path"]
class DeliverableSerializerExtended(serializers.ModelSerializer):
total_assets = serializers.SerializerMethodField()
class Meta:
model = Deliverable
fields = ["pk", "project_id", "commission_id", "pluto_core_project_id", "name", "created",
"total_assets", "local_open_uri", "local_path"]
def get_total_assets(self, obj):
try:
parent_bundle = Deliverable.objects.get(pluto_core_project_id=obj.pluto_core_project_id)
return DeliverableAsset.objects.filter(deliverable=parent_bundle).count()
except ObjectDoesNotExist:
return 0
class GNMWebsiteSerializer(serializers.ModelSerializer):
class Meta:
model = GNMWebsite
fields = ["media_atom_id", "upload_status", "production_office", "tags",
"publication_date", "website_title",
"website_description", "primary_tone", "publication_status", "etag"]
class MainstreamSerializer(serializers.ModelSerializer):
class Meta:
model = Mainstream
fields = ["mainstream_title", "mainstream_description", "mainstream_tags",
"mainstream_rules_contains_adult_content",
"upload_status", "etag", "routename", "job_id"]
class YoutubeSerializer(serializers.ModelSerializer):
class Meta:
model = Youtube
fields = ["youtube_id", "youtube_title", "youtube_description", "youtube_tags",
"youtube_category", "youtube_channel",
"publication_date", "etag"]
class DailyMotionSerializer(serializers.ModelSerializer):
class Meta:
model = DailyMotion
fields = ["daily_motion_url", "daily_motion_title", "daily_motion_description",
"daily_motion_tags", "daily_motion_category",
"publication_date", "upload_status", "daily_motion_no_mobile_access",
"daily_motion_contains_adult_content", "etag", "routename", "job_id"]
class OovvuuSerializer(serializers.ModelSerializer):
class Meta:
model = Oovvuu
fields = ["seen_on_channel", "etag"]
class ReutersConnectSerializer(serializers.ModelSerializer):
class Meta:
model = ReutersConnect
fields = ["seen_on_channel", "etag"]
class LogEntrySerializer(serializers.ModelSerializer):
class Meta:
model = LogEntry
fields = ["timestamp", "related_gnm_website", "related_youtube", "related_daily_motion",
"related_mainstream", "sender",
"log_line"]
class SearchRequestSerializer(serializers.Serializer):
title = serializers.CharField(allow_null=True, allow_blank=True, default=None)
atom_id = serializers.UUIDField(allow_null=True, default=None)
commission_id = serializers.IntegerField(allow_null=True, default=None)
order_by = serializers.CharField(allow_null=True, default=None)
class SyndicationNoteSerializer(serializers.ModelSerializer):
class Meta:
model = SyndicationNotes
fields = ["timestamp","username","content","deliverable_asset"]