Source code for betty.ancestry.media_type

"""
Data types that have media types.
"""

from __future__ import annotations

from typing import Any, TYPE_CHECKING

from typing_extensions import override

from betty.json.linked_data import LinkedDataDumpableJsonLdObject, JsonLdObject
from betty.media_type import MediaType, MediaTypeSchema
from betty.privacy import is_public

if TYPE_CHECKING:
    from betty.serde.dump import DumpMapping, Dump
    from betty.project import Project


[docs] class HasMediaType(LinkedDataDumpableJsonLdObject): """ A resource with an `IANA media type <https://www.iana.org/assignments/media-types/media-types.xhtml>`_. """
[docs] def __init__( self, *args: Any, media_type: MediaType | None = None, **kwargs: Any, ): super().__init__(*args, **kwargs) self.media_type = media_type
[docs] @override async def dump_linked_data(self, project: Project) -> DumpMapping[Dump]: dump = await super().dump_linked_data(project) if is_public(self) and self.media_type is not None: dump["mediaType"] = str(self.media_type) return dump
[docs] @override @classmethod async def linked_data_schema(cls, project: Project) -> JsonLdObject: schema = await super().linked_data_schema(project) schema.add_property("mediaType", MediaTypeSchema(), False) return schema