def get_source_form(source=None):
    name = ''
    description = ''
    picture_url = ''
    if source:
        name = source.name
        description = source.description
        picture_url = get_file_url(source.preview_picture.name)

    form = [{
        'type': 'text',
        'name': 'name',
        'value': f'{name}',
        'label': 'Название фрагмента видео',
        'placeholder': 'Введите название фрагмента видео...',
        'rules': {
            'max_length': 64,
            'required': True
        },
    }, {
        'type': 'textarea',
        'name': 'description',
        'value': f'{description}',
        'label': 'Описание фрагмента фидео',
        'placeholder': 'Введите описание фрагмента видео...',
        'rules': {
            'max_length': 1024,
            'required': False
        },
    }, {
        'type': 'image',
        'name': 'preview_picture',
        'previewUrl': f'{picture_url}',
        'label': 'Превью фрагмента видео',
        'placeholder': 'Выберите изображение...',
        'rules': {
            'mimetypes': ['image/png'],
            'max_size': convert_to_byte_length(MB=10),
            'required': False,
        }
    }, {
        'type': 'video',
        'name': 'content',
        'label': 'Фрагмент видео',
        'placeholder': 'Выберите фрагмент видео...',
        'rules': {
            'mimetypes': ['video/mp4'],
            'max_size': convert_to_byte_length(MB=20),
            'required': True,
        }
    }]

    return form
def get_channel_form(channel=None):
    name = ''
    description = ''
    picture_url = ''

    if channel:
        name = channel.name
        description = channel.description
        picture_url = get_file_url(channel.head_picture.name)

    form = [{
        'type': 'text',
        'name': 'name',
        'value': f'{name}',
        'label': 'Название канала',
        'placeholder': 'Введите название канала...',
        'rules': {
            'max_length': 64,
            'required': True
        },
    }, {
        'type': 'textarea',
        'name': 'description',
        'value': f'{description}',
        'label': 'Описание канала',
        'placeholder': 'Введите описание канала...',
        'rules': {
            'max_length': 4096,
            'required': False
        },
    }, {
        'type': 'image',
        'name': 'head_picture',
        'url': f'{picture_url}',
        'label': 'Шапка канала',
        'placeholder': 'Выберите изображение разрешением 150 на 1300 px...',
        'rules': {
            'mimetypes': ['image/png'],
            'max_size': convert_to_byte_length(MB=10),
            'required': True,
        }
    }]

    return form
def get_playlist_form(playlist=None):
    name = ''
    description = ''
    picture_url = ''
    if playlist:
        name = playlist.name
        description = playlist.description
        picture_url = get_file_url(playlist.preview_picture.name)

    form = [{
        'type': 'text',
        'name': 'name',
        'value': f'{name}',
        'label': 'Название плейлиста',
        'placeholder': 'Введите название плейлиста...',
        'rules': {
            'max_length': 32,
            'required': True
        },
    }, {
        'type': 'textarea',
        'name': 'description',
        'value': f'{description}',
        'label': 'Описание плейлиста',
        'placeholder': 'Введите описание плейлиста...',
        'rules': {
            'max_length': 1024,
            'required': False
        },
    }, {
        'type': 'image',
        'name': 'preview_picture',
        'url': f'{picture_url}',
        'label': 'Превью плейлиста',
        'placeholder': 'Выберите изображение...',
        'rules': {
            'mimetypes': ['image/png'],
            'max_size': convert_to_byte_length(MB=10),
            'required': True,
        }
    }]

    return form
def get_video_form(channel, video=None):
    name = ''
    description = ''
    picture_url = ''

    playlists = channel.playlists.filter(
        status__in=[Playlist.UPLOADED, Playlist.HIDDEN, Playlist.PUBLIC])
    playlist_uploaded = playlists.get(status=Playlist.UPLOADED)
    playlist_key = playlist_uploaded.key

    if video:
        name = video.name
        description = video.description
        picture_url = get_file_url(video.preview_picture.name)
        playlist_key = video.playlist

    form = [{
        'type': 'text',
        'name': 'name',
        'value': f'{name}',
        'label': 'Название видео',
        'placeholder': 'Введите название видео...',
        'rules': {
            'max_length': 128,
            'required': True
        },
    }, {
        'type': 'textarea',
        'name': 'description',
        'value': f'{description}',
        'label': 'Описание видео',
        'placeholder': 'Введите описание видео...',
        'rules': {
            'max_length': 4096,
            'required': True
        },
    }, {
        'type': 'image',
        'name': 'preview_picture',
        'previewUrl': f'{picture_url}',
        'label': 'Превью видео',
        'placeholder': 'Выберите изображение...',
        'rules': {
            'mimetypes': ['image/png'],
            'max_size': convert_to_byte_length(MB=10),
            'required': True,
        }
    }, {
        'type':
        'choice',
        'name':
        'playlist_key',
        'label':
        'Плейлист видео',
        'value':
        playlist_key,
        'choices': [{
            'value': playlist.key,
            'text': playlist.name
        } for playlist in playlists],
        'rules': {
            'required': True,
        }
    }]

    return form
 def get_preview_url(self, obj):
     return get_file_url(obj.preview_picture.name)
 def get_content_url(self, obj):
     return get_file_url(obj.content.name)
 def get_head_picture(self, obj):
     channel = obj
     return get_file_url(channel.head_picture.name)