major refactor
This commit is contained in:
110
admin/mpr/media_assets/models.py
Normal file
110
admin/mpr/media_assets/models.py
Normal file
@@ -0,0 +1,110 @@
|
||||
"""
|
||||
Django ORM Models - GENERATED FILE
|
||||
|
||||
Do not edit directly. Regenerate using modelgen.
|
||||
"""
|
||||
|
||||
import uuid
|
||||
from django.db import models
|
||||
|
||||
class AssetStatus(models.TextChoices):
|
||||
PENDING = "pending", "Pending"
|
||||
READY = "ready", "Ready"
|
||||
ERROR = "error", "Error"
|
||||
|
||||
class JobStatus(models.TextChoices):
|
||||
PENDING = "pending", "Pending"
|
||||
PROCESSING = "processing", "Processing"
|
||||
COMPLETED = "completed", "Completed"
|
||||
FAILED = "failed", "Failed"
|
||||
CANCELLED = "cancelled", "Cancelled"
|
||||
|
||||
class MediaAsset(models.Model):
|
||||
"""A video/audio file registered in the system."""
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
filename = models.CharField(max_length=500)
|
||||
file_path = models.CharField(max_length=1000)
|
||||
status = models.CharField(max_length=20, choices=AssetStatus.choices, default=AssetStatus.PENDING)
|
||||
error_message = models.TextField(blank=True, default='')
|
||||
file_size = models.BigIntegerField(null=True, blank=True)
|
||||
duration = models.FloatField(null=True, blank=True, default=None)
|
||||
video_codec = models.CharField(max_length=255, null=True, blank=True)
|
||||
audio_codec = models.CharField(max_length=255, null=True, blank=True)
|
||||
width = models.IntegerField(null=True, blank=True, default=None)
|
||||
height = models.IntegerField(null=True, blank=True, default=None)
|
||||
framerate = models.FloatField(null=True, blank=True, default=None)
|
||||
bitrate = models.BigIntegerField(null=True, blank=True)
|
||||
properties = models.JSONField(default=dict, blank=True)
|
||||
comments = models.TextField(blank=True, default='')
|
||||
tags = models.JSONField(default=list, blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["-created_at"]
|
||||
|
||||
def __str__(self):
|
||||
return self.filename
|
||||
|
||||
|
||||
class TranscodePreset(models.Model):
|
||||
"""A reusable transcoding configuration (like Handbrake presets)."""
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
name = models.CharField(max_length=255)
|
||||
description = models.TextField(blank=True, default='')
|
||||
is_builtin = models.BooleanField(default=False)
|
||||
container = models.CharField(max_length=255)
|
||||
video_codec = models.CharField(max_length=255)
|
||||
video_bitrate = models.CharField(max_length=255, null=True, blank=True)
|
||||
video_crf = models.IntegerField(null=True, blank=True, default=None)
|
||||
video_preset = models.CharField(max_length=255, null=True, blank=True)
|
||||
resolution = models.CharField(max_length=255, null=True, blank=True)
|
||||
framerate = models.FloatField(null=True, blank=True, default=None)
|
||||
audio_codec = models.CharField(max_length=255)
|
||||
audio_bitrate = models.CharField(max_length=255, null=True, blank=True)
|
||||
audio_channels = models.IntegerField(null=True, blank=True, default=None)
|
||||
audio_samplerate = models.IntegerField(null=True, blank=True, default=None)
|
||||
extra_args = models.JSONField(default=list, blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["-created_at"]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class TranscodeJob(models.Model):
|
||||
"""A transcoding or trimming job in the queue."""
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
source_asset_id = models.UUIDField()
|
||||
preset_id = models.UUIDField(null=True, blank=True)
|
||||
preset_snapshot = models.JSONField(default=dict, blank=True)
|
||||
trim_start = models.FloatField(null=True, blank=True, default=None)
|
||||
trim_end = models.FloatField(null=True, blank=True, default=None)
|
||||
output_filename = models.CharField(max_length=500)
|
||||
output_path = models.CharField(max_length=1000, null=True, blank=True)
|
||||
output_asset_id = models.UUIDField(null=True, blank=True)
|
||||
status = models.CharField(max_length=20, choices=JobStatus.choices, default=JobStatus.PENDING)
|
||||
progress = models.FloatField(default=0.0)
|
||||
current_frame = models.IntegerField(null=True, blank=True, default=None)
|
||||
current_time = models.FloatField(null=True, blank=True, default=None)
|
||||
speed = models.CharField(max_length=255, null=True, blank=True)
|
||||
error_message = models.TextField(blank=True, default='')
|
||||
celery_task_id = models.CharField(max_length=255, null=True, blank=True)
|
||||
execution_arn = models.CharField(max_length=255, null=True, blank=True)
|
||||
priority = models.IntegerField(default=0)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
started_at = models.DateTimeField(null=True, blank=True)
|
||||
completed_at = models.DateTimeField(null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["-created_at"]
|
||||
|
||||
def __str__(self):
|
||||
return str(self.id)
|
||||
|
||||
Reference in New Issue
Block a user