U
    dk                     @   s|   d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ eedZdd	dZG d
d deZdS )    )FieldDoesNotExistImproperlyConfigured)	CharFieldsignals)
ImageField)get_image_file_background_color)color_hex_validatorcolor_hexa_validator)ColorWidgethexhexaz#FFFFFFz	#FFFFFFFFc                       sT   e Zd Zg Z fddZ fddZ fddZ fddZd	d
 Zdd Z	  Z
S )
ColorFieldc                    s   | dd | _| dd | _| jdkr:td| jt| j g| _| dd | _| jrh|dd |d	d
 |	dr|dd |dd  n*|	dr|dd n|dt
| j  tt| j|| | jr| jrtdd S )Nsamplesformatr   r   zUnsupported color format: {}image_fieldZblankT
max_length   nulldefault z{Invalid options: 'choices' and 'samples' are mutually exclusive, you can set only one of the two for a ColorField instance.)popr   lowerr   
ValueErrorVALIDATORS_PER_FORMATdefault_validatorsr   
setdefaultgetDEFAULT_PER_FORMATsuperr   __init__choicesr   )selfargskwargs	__class__ 5/tmp/pip-unpacked-wheel-gyyeoqb6/colorfield/fields.pyr       s(    


zColorField.__init__c                    sj   g }| j r&| jdd}dd |D }n| jr<dd | jD }t|  | j|dd|d< tt| jf |S )	NF)Zinclude_blankc                 S   s   g | ]}|d  qS r   r'   .0choicer'   r'   r(   
<listcomp>2   s     z(ColorField.formfield.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r)   r'   r*   r'   r'   r(   r-   4   s     )r   r   palette)attrsZwidget)	r!   Zget_choicesr   r
   get_defaultr   r   r   	formfield)r"   r$   r.   r!   r%   r'   r(   r1   .   s    
	zColorField.formfieldc                    s>   t t| j||f| |jjr"d S | jr:tjj| j	|d d S )N)Zsender)
r   r   contribute_to_class_metaZabstractr   r   Z	post_saveconnect_update_from_image_field)r"   clsnamer$   r%   r'   r(   r2   @   s
    zColorField.contribute_to_classc                    s6   t t|  \}}}}| j|d< | j|d< ||||fS )Nr   r   )r   r   deconstructr   r   )r"   r7   pathr#   r$   r%   r'   r(   r8   G   s    

zColorField.deconstructc              	   C   s@   d}t || j}|r<| jdk}| }t||}W 5 Q R X |S )Nr   r   )getattrr   r   openr   )r"   instancecolorZ
image_filealpha_r'   r'   r(   _get_image_field_colorM   s    

z!ColorField._get_image_field_colorc           
      O   s   |r|j r| jsd S z$|j| j}t|ts6tdW n$ tk
r\   td| jY nX | 	|}| j
}t||d }||kr|r|p| j}t||| |jj}	|	j|j djf ||i d S )NzNInvalid "image_field" field type, expected an instance of "models.ImageField".z7Invalid "image_field" field name, "{}" field not found.)pk)rA   r   r3   	get_field
isinstancer   r   r   r   r@   Zattnamer:   r   setattrr&   Zobjectsfilterupdate)
r"   r<   createdr#   r$   Z	field_clsr=   Zcolor_field_nameZcolor_field_valuemanagerr'   r'   r(   r5   V   s0    



z#ColorField._update_from_image_field)__name__
__module____qualname__r   r    r1   r2   r8   r@   r5   __classcell__r'   r'   r%   r(   r      s   	r   N)Zdjango.core.exceptionsr   r   Zdjango.db.modelsr   r   Zdjango.db.models.fields.filesr   Zcolorfield.utilsr   Zcolorfield.validatorsr   r	   Zcolorfield.widgetsr
   r   r   r   r'   r'   r'   r(   <module>   s   

