from uuid import uuid1 from aliyun_video.models import AliyunVideo, AliyunVideoHistory from aliyun_video.core.utils import get_valid_cdn_url def generate_video_trace_id(): return str(uuid1()) class LectureAdapter: def get_progress(self, lesson_id, user_id): history = AliyunVideoHistory.objects.filter( video__lesson_id=lesson_id, user_id=user_id) if not history: return 0 else: history = history.first() return history.played_at / history.video.duration def description(self, lesson, user): trace_id = generate_video_trace_id() video = AliyunVideo.objects.get(lesson_id=lesson.id) datas = { 'trace_id': trace_id, 'video_id': video.video_id, 'duration': video.duration, 'cover_image_url': get_valid_cdn_url(video.cover_image_url), 'log_url': video.log_url, 'played_at': None, 'last_definition': None, 'play_details': [] } if user.is_authenticated: try: history = AliyunVideoHistory.objects.get( video=video, user=user) datas.update({ 'played_at': history.played_at, 'last_definition': history.last_definition }) except AliyunVideoHistory.DoesNotExist: pass for play_detail in video.video_play_details.all(): datas['play_details'].append({ 'play_url': '{}?trace_id={}'.format(play_detail.play_url, trace_id), 'play_id': play_detail.play_id, 'bit_rate': play_detail.bit_rate, 'definition': play_detail.definition, 'width': play_detail.width, 'height': play_detail.height }) return datas lecture_adapter = LectureAdapter()