Source code for embed_video.admin

from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import URLValidator
from django.utils.safestring import mark_safe

from embed_video.backends import (
    UnknownBackendException,
    VideoDoesntExistException,
    detect_backend,
)
from embed_video.fields import EmbedVideoField


[docs]class AdminVideoWidget(forms.TextInput): """ Widget for video input in administration. If empty it works just like :py:class:`django.forms.TextInput`. Otherwise it renders embedded video together with input field. .. todo:: Django 1.6 provides better parent for this widget - :py:class:`django.forms.URLInput`. """ output_format = ( '<div style="float:left" class="video">' "{video}<br />{input}</div>" '<hr style="visibility: hidden; clear:both">' ) def __init__(self, attrs=None): """ :type attrs: dict """ default_attrs = {"size": "40"} self.validator = URLValidator() if attrs: default_attrs.update(attrs) super().__init__(default_attrs)
[docs] def render(self, name, value="", attrs=None, size=(420, 315), renderer=None): """ :type name: str :type attrs: dict """ output = super().render(name, value, attrs, renderer) if not value: return output try: self.validator(value) backend = detect_backend(value) return mark_safe( self.output_format.format( video=backend.get_embed_code(*size), input=output ) ) except (UnknownBackendException, ValidationError, VideoDoesntExistException): return output
[docs]class AdminVideoMixin: """ Mixin using :py:class:`AdminVideoWidget` for fields with :py:class:`~embed_video.fields.EmbedVideoField`. Usage:: from django.contrib import admin from embed_video.admin import AdminVideoMixin from .models import MyModel class MyModelAdmin(AdminVideoMixin, admin.ModelAdmin): pass admin.site.register(MyModel, MyModelAdmin) """
[docs] def formfield_for_dbfield(self, db_field, **kwargs): """ :type db_field: str """ if isinstance(db_field, EmbedVideoField): return db_field.formfield(widget=AdminVideoWidget) return super().formfield_for_dbfield(db_field, **kwargs)