Files
bugsink/projects/serializers.py
Klaas van Schelven 3156f05756 Refactoring into the factory style
done while trying to fix an unrelated error; keeping this as a
stylistic change regardless
2025-09-12 11:49:32 +02:00

96 lines
2.9 KiB
Python

from rest_framework import serializers
from bugsink.api_fields import make_enum_field
from teams.models import Team
from bugsink.api_mixins import ExpandableSerializerMixin
from teams.serializers import TeamDetailSerializer
from .models import Project, ProjectVisibility
ProjectVisibilityField = make_enum_field(ProjectVisibility)
class ProjectListSerializer(serializers.ModelSerializer):
visibility = ProjectVisibilityField()
dsn = serializers.CharField(read_only=True)
class Meta:
model = Project
fields = [
"id",
"team",
"name",
"slug",
"is_deleted",
"dsn",
"digested_event_count",
"stored_event_count",
"alert_on_new_issue",
"alert_on_regression",
"alert_on_unmute",
"visibility",
"retention_max_event_count",
]
class ProjectDetailSerializer(ExpandableSerializerMixin, serializers.ModelSerializer):
expandable_fields = {"team": TeamDetailSerializer}
visibility = ProjectVisibilityField()
dsn = serializers.CharField(read_only=True)
class Meta:
model = Project
fields = [
"id",
"team",
"name",
"slug",
"is_deleted",
"dsn",
"digested_event_count",
"stored_event_count",
"alert_on_new_issue",
"alert_on_regression",
"alert_on_unmute",
"visibility",
"retention_max_event_count",
]
class ProjectCreateUpdateSerializer(serializers.ModelSerializer):
id = serializers.UUIDField(read_only=True)
team = serializers.PrimaryKeyRelatedField(queryset=Team.objects.all())
visibility = ProjectVisibilityField(required=False)
class Meta:
model = Project
fields = [
"id",
"team",
"name",
"visibility",
"alert_on_new_issue",
"alert_on_regression",
"alert_on_unmute",
"retention_max_event_count",
# "slug", auto-generated for uniqueness
# "is_deleted", must go through delete_deferred()
# "digested_event_count", system-managed counter
# "stored_event_count", system-managed counter
# "has_releases", system-managed flag
# "dsn", derived from base_url + ids + key
# "sentry_key", server-generated, not client-writable
# "quota_exceeded_until", system-managed quota state
# "next_quota_check", system-managed quota scheduler
]
# extra_kwargs: mark alert/retention fields optional on write (they have defaults)
extra_kwargs = {
"alert_on_new_issue": {"required": False},
"alert_on_regression": {"required": False},
"alert_on_unmute": {"required": False},
"retention_max_event_count": {"required": False},
}