rcnn/backend/apps/jobs/serializers.py
Marius Unsel d93412cd0d Initial commit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 01:12:40 +02:00

42 lines
1.9 KiB
Python

from rest_framework import serializers
from .models import SplatJob
class SplatJobSerializer(serializers.ModelSerializer):
class Meta:
model = SplatJob
fields = [
"id", "status", "current_step", "progress",
"retry_count", "error_message",
"colmap_points",
"queued_at", "started_at", "finished_at",
]
read_only_fields = fields
class WebhookInputSerializer(serializers.Serializer):
"""Validates the payload sent by RunPod to POST /jobs/webhook/."""
class OutputSerializer(serializers.Serializer):
splat_key = serializers.CharField(required=False, default="")
preview_key = serializers.CharField(required=False, default="")
splat_file_size = serializers.IntegerField(required=False, allow_null=True)
colmap_points = serializers.IntegerField(required=False, allow_null=True)
quality_score = serializers.FloatField(required=False, allow_null=True)
frame_count = serializers.IntegerField(required=False, allow_null=True)
# GeoJSON point [lon, lat]
location = serializers.ListField(child=serializers.FloatField(), required=False, allow_null=True)
altitude = serializers.FloatField(required=False, allow_null=True)
heading = serializers.FloatField(required=False, allow_null=True)
# GeoJSON polygon for coverage
coverage = serializers.JSONField(required=False, allow_null=True)
STATUS_CHOICES = ["succeeded", "failed", "step_complete"]
job_id = serializers.CharField() # RunPod job ID
status = serializers.ChoiceField(choices=STATUS_CHOICES)
step = serializers.CharField(required=False, default="")
progress = serializers.IntegerField(min_value=0, max_value=100, required=False, default=0)
output = OutputSerializer(required=False, default=dict)
error = serializers.CharField(required=False, default="")