Source code for camtasia.timeline.clips

"""Clip type hierarchy and factory function.

Usage::

    from camtasia.timeline.clips import clip_from_dict

    clip = clip_from_dict(raw_dict)
"""
from __future__ import annotations

from typing import Any

from .base import BaseClip, EDIT_RATE
from .audio import AMFile
from .video import VMFile
from .image import IMFile
from .screen_recording import ScreenVMFile, ScreenIMFile
from .stitched import StitchedMedia
from .placeholder import PlaceholderMedia
from .group import Group, GroupTrack
from .callout import Callout, CalloutBuilder
from .unified import UnifiedMedia

_TYPE_MAP: dict[str, type[BaseClip]] = {
    'AMFile': AMFile,
    'VMFile': VMFile,
    'IMFile': IMFile,
    'ScreenVMFile': ScreenVMFile,
    'ScreenIMFile': ScreenIMFile,
    'StitchedMedia': StitchedMedia,
    'Group': Group,
    'Callout': Callout,
    'UnifiedMedia': UnifiedMedia,
    'PlaceholderMedia': PlaceholderMedia,
}


[docs] def clip_from_dict(data: dict[str, Any]) -> BaseClip: """Create the appropriate clip subclass from a JSON dict. Args: data: Raw clip dict containing at least an ``_type`` key. Returns: A typed clip instance (``AMFile``, ``VMFile``, etc.), or ``BaseClip`` if the type is unrecognised. """ cls = _TYPE_MAP.get(data.get('_type', ''), BaseClip) return cls(data)
__all__ = [ 'EDIT_RATE', 'BaseClip', 'AMFile', 'VMFile', 'IMFile', 'ScreenVMFile', 'ScreenIMFile', 'StitchedMedia', 'PlaceholderMedia', 'Group', 'GroupTrack', 'Callout', 'CalloutBuilder', 'UnifiedMedia', 'clip_from_dict', ]