production-taskbar / backend / links / serializers.py
serializers.py
Raw
from typing import Union, Any

from rest_framework import serializers
from rest_framework.fields import SerializerMethodField

from .models import Process, Source, SubProcess


class SourceSerializer(serializers.ModelSerializer[Source]):
    icon = SerializerMethodField()

    class Meta:
        model = Source
        fields = ('id', 'title', 'icon', 'href', 'open_with_default_browser',
                  'is_frameless')

    def get_icon(self, obj: Source) -> Union[str, Any]:
        return obj.icon.url if obj.icon else None


class SubProcessSerializer(serializers.ModelSerializer[Process]):
    sources = SourceSerializer(read_only=True, many=True)

    class Meta:
        model = Process
        fields = ('id', 'name', 'sources')


class ProcessSerializer(serializers.ModelSerializer[Process]):
    sources = SourceSerializer(read_only=True, many=True)

    class Meta:
        model = Process
        fields = ('id', 'name', 'sources')