tahamajs's picture
download
raw
6.96 kB
from rest_framework import serializers
from .models import ModelVersion, ModelVersionDiff
class ModelVersionSerializer(serializers.ModelSerializer):
# ── Read‑only related fields ──────────────────────────────────
run_id = serializers.UUIDField(source="run.id", read_only=True)
run_name = serializers.CharField(source="run.name", read_only=True)
# ── Computed counts ───────────────────────────────────────────
diffs_from_count = serializers.SerializerMethodField()
diffs_to_count = serializers.SerializerMethodField()
children_count = serializers.SerializerMethodField()
# ── Human‑readable size ───────────────────────────────────────
size_mb_display = serializers.SerializerMethodField()
compressed_size_mb_display = serializers.SerializerMethodField()
compression_ratio = serializers.SerializerMethodField()
# ── Timestamps ─────────────────────────────────────────────────
created_at = serializers.DateTimeField(read_only=True)
updated_at = serializers.DateTimeField(read_only=True)
class Meta:
model = ModelVersion
fields = [
"id",
"run_id",
"run_name",
"version",
"version_number",
"artifact_path",
"compressed_artifact_path",
"compression_method",
"compression_config",
"artifact_size_mb",
"compressed_size_mb",
"size_mb_display",
"compressed_size_mb_display",
"compression_ratio",
"storage_tier",
"is_published_to_hub",
"hub_repo_url",
"metrics",
"git_commit",
"config_snapshot_id",
"validation_passed",
"is_production",
"diffs_from_count",
"diffs_to_count",
"children_count",
"created_at",
"updated_at",
]
read_only_fields = [
"id",
"run_id",
"run_name",
"created_at",
"updated_at",
"diffs_from_count",
"diffs_to_count",
"children_count",
"size_mb_display",
"compressed_size_mb_display",
"compression_ratio",
]
def get_diffs_from_count(self, obj):
return obj.diffs_from.count()
def get_diffs_to_count(self, obj):
return obj.diffs_to.count()
def get_children_count(self, obj):
return obj.parents.count() # related_name='parents' from ModelLineage child FK
def get_size_mb_display(self, obj):
if obj.artifact_size_mb < 1:
return f"{obj.artifact_size_mb * 1024:.1f} KB"
return f"{obj.artifact_size_mb:.1f} MB"
def get_compressed_size_mb_display(self, obj):
if not obj.compressed_size_mb:
return None
if obj.compressed_size_mb < 1:
return f"{obj.compressed_size_mb * 1024:.1f} KB"
return f"{obj.compressed_size_mb:.1f} MB"
def get_compression_ratio(self, obj):
if obj.artifact_size_mb and obj.compressed_size_mb:
return round(obj.compressed_size_mb / obj.artifact_size_mb, 3)
return None
class ModelVersionDiffSerializer(serializers.ModelSerializer):
from_version_number = serializers.IntegerField(
source="from_version.version_number", read_only=True
)
to_version_number = serializers.IntegerField(
source="to_version.version_number", read_only=True
)
class Meta:
model = ModelVersionDiff
fields = [
"id",
"from_version",
"to_version",
"from_version_number",
"to_version_number",
"diff_artifact",
"diff_size_mb",
"original_size_saved_mb",
"created_at",
]
read_only_fields = ["id", "created_at"]
# Add to model_versioning/serializers.py
from .models import (
ModelAccessControl,
ModelApproval,
ModelSecurityScan,
ModelUsageLog,
ModelVersion,
ModelVersionDiff,
)
class ModelApprovalSerializer(serializers.ModelSerializer):
requested_by_username = serializers.CharField(
source="requested_by.username", read_only=True
)
reviewer_username = serializers.CharField(
source="reviewer.username", read_only=True
)
version_number = serializers.IntegerField(
source="version.version_number", read_only=True
)
model_name = serializers.CharField(source="version.version", read_only=True)
class Meta:
model = ModelApproval
fields = [
"id",
"version",
"version_number",
"model_name",
"status",
"requested_by",
"requested_by_username",
"reviewer",
"reviewer_username",
"notes",
"review_notes",
"created_at",
"updated_at",
]
read_only_fields = ["id", "requested_by", "created_at", "updated_at"]
class ModelAccessControlSerializer(serializers.ModelSerializer):
username = serializers.CharField(source="user.username", read_only=True)
granted_by_username = serializers.CharField(
source="granted_by.username", read_only=True
)
is_expired = serializers.BooleanField(read_only=True)
class Meta:
model = ModelAccessControl
fields = [
"id",
"version",
"user",
"username",
"access_level",
"granted_by",
"granted_by_username",
"granted_at",
"expires_at",
"is_expired",
]
read_only_fields = ["id", "granted_by", "granted_at"]
class ModelSecurityScanSerializer(serializers.ModelSerializer):
class Meta:
model = ModelSecurityScan
fields = [
"id",
"version",
"scan_type",
"status",
"severity",
"findings",
"passed",
"report_url",
"scanned_at",
]
read_only_fields = ["id", "scanned_at"]
class ModelUsageLogSerializer(serializers.ModelSerializer):
username = serializers.CharField(source="user.username", read_only=True)
class Meta:
model = ModelUsageLog
fields = [
"id",
"version",
"user",
"username",
"action",
"metadata",
"ip_address",
"created_at",
]
read_only_fields = ["id", "created_at"]

Xet Storage Details

Size:
6.96 kB
·
Xet hash:
ee0aed11c66aec44045d2b2506e80cad6f63ff4a94f56e93832408e3087c2566

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.