U
    (a	                     @   s\   d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 G dd dej
ZG dd dZd	S )
    )forms)	mark_safe)UnknownBackendExceptionVideoDoesntExistExceptiondetect_backend)EmbedVideoFieldc                       s4   e Zd ZdZdZd
 fdd	Zd fdd		Z  ZS )AdminVideoWidgeta2  
    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`.

    zk<div style="float:left" class="video">{video}<br />{input}</div><hr style="visibility: hidden; clear:both">Nc                    s&   ddi}|r| | t | dS )z#
        :type attrs: dict
        sizeZ40N)updatesuper__init__)selfattrsZdefault_attrs	__class__ /home/adriano.carvalho/ftp/files/BrinquedotecaVirtual/brinquedotecavirtual/venv/lib/python3.8/site-packages/embed_video/admin.pyr      s    
zAdminVideoWidget.__init__ i  i;  c              	      s`   t  ||||}|s|S z$t|}t| jj|j| |dW S  ttfk
rZ   | Y S X dS )z;
        :type name: str
        :type attrs: dict
        )videoinputN)	r   renderr   r   output_formatformatZget_embed_coder   r   )r   namevaluer   r	   Zrendereroutputbackendr   r   r   r   *   s     zAdminVideoWidget.render)N)r   Nr   N)__name__
__module____qualname____doc__r   r   r   __classcell__r   r   r   r   r      s
   r   c                       s    e Zd ZdZ fddZ  ZS )AdminVideoMixina  
    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)

    c                    s&   t |tr|jtdS t j|f|S )z%
        :type db_field: str
        )Zwidget)
isinstancer   Z	formfieldr   r   formfield_for_dbfield)r   Zdb_fieldkwargsr   r   r   r%   R   s    
z%AdminVideoMixin.formfield_for_dbfield)r   r   r    r!   r%   r"   r   r   r   r   r#   @   s   r#   N)Zdjangor   Zdjango.utils.safestringr   Zembed_video.backendsr   r   r   Zembed_video.fieldsr   Z	TextInputr   r#   r   r   r   r   <module>   s
   4