commit
This commit is contained in:
69
backend/thirdparty/downloader/serializers.py
vendored
Normal file
69
backend/thirdparty/downloader/serializers.py
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
from rest_framework import serializers
|
||||
from .models import DownloaderModel
|
||||
|
||||
class DownloaderLogSerializer(serializers.ModelSerializer):
|
||||
# Optional raw yt-dlp info dict
|
||||
info = serializers.DictField(required=False)
|
||||
|
||||
class Meta:
|
||||
model = DownloaderModel
|
||||
fields = (
|
||||
"id",
|
||||
"url",
|
||||
"status",
|
||||
"requested_format",
|
||||
"format_id",
|
||||
"ext",
|
||||
"vcodec",
|
||||
"acodec",
|
||||
"width",
|
||||
"height",
|
||||
"fps",
|
||||
"abr",
|
||||
"vbr",
|
||||
"tbr",
|
||||
"asr",
|
||||
"filesize",
|
||||
"duration",
|
||||
"title",
|
||||
"extractor",
|
||||
"extractor_key",
|
||||
"video_id",
|
||||
"webpage_url",
|
||||
"is_audio_only",
|
||||
"error_message",
|
||||
"raw_info",
|
||||
"info", # virtual input
|
||||
)
|
||||
read_only_fields = ("id", "raw_info")
|
||||
|
||||
def create(self, validated_data):
|
||||
info = validated_data.pop("info", None)
|
||||
request = self.context.get("request")
|
||||
user = getattr(request, "user", None) if request else None
|
||||
ip_address = None
|
||||
user_agent = None
|
||||
if request:
|
||||
xff = request.META.get("HTTP_X_FORWARDED_FOR")
|
||||
ip_address = (xff.split(",")[0].strip() if xff else request.META.get("REMOTE_ADDR"))
|
||||
user_agent = request.META.get("HTTP_USER_AGENT")
|
||||
|
||||
if info:
|
||||
return DownloaderModel.from_ydl_info(
|
||||
info=info,
|
||||
requested_format=validated_data.get("requested_format"),
|
||||
status=validated_data.get("status", "success"),
|
||||
url=validated_data.get("url"),
|
||||
user=user,
|
||||
ip_address=ip_address,
|
||||
user_agent=user_agent,
|
||||
error_message=validated_data.get("error_message"),
|
||||
)
|
||||
# Fallback: create from flattened fields only
|
||||
return DownloaderModel.objects.create(
|
||||
user=user,
|
||||
ip_address=ip_address,
|
||||
user_agent=user_agent,
|
||||
raw_info=None,
|
||||
**validated_data
|
||||
)
|
||||
Reference in New Issue
Block a user