42 lines
1.9 KiB
Python
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="")
|