a
    YÒOcã	  ã                   @   sB   d dl Zd dlmZ d dlmZ d dlmZ G dd„ dej	ƒZ
dS )é    N)ÚValidationError)Úmodels)Úgettext_lazyc                       sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	‡ fdd„Z
dd„ Z‡  ZS )ÚMultipleChoiceFieldzÁ
    Field that can take a set of string values
    and store them in a charfield using a delimiter

    This needs to be compatible with django-rest-framework's
    multiple choice field.
    c                 C   s   dd„ |D ƒS )Nc                 S   s   g | ]}|  d ¡‘qS )z{}' )Ústrip)Ú.0Úvalue© r	   úN/var/www/html/gsl.tools/lib/python3.9/site-packages/django_peeringdb/fields.pyÚ
<listcomp>   ó    z6MultipleChoiceField.cleaned_values.<locals>.<listcomp>r	   )ÚselfÚvaluesr	   r	   r
   Úcleaned_values   s    z"MultipleChoiceField.cleaned_valuesc                 C   sH   |D ]>}d}| j D ]\}}||krd} q,q|sttdƒ |¡ƒ‚qd S )NFTzInvalid value: {})Úchoicesr   Ú_Úformat)r   r   r   ÚexistsÚchoiceÚlabelr	   r	   r
   Úclean_choices   s    z!MultipleChoiceField.clean_choicesc                 C   s`   | j s
d S |  |  |¡¡ |d u r:| js:t| jd dd�‚| js\|| jv r\t| jd dd�‚d S )NÚnull)ÚcodeÚblank)Úeditabler   r   r   r   Zerror_messagesr   Zempty_values)r   r   Zmodel_instancer	   r	   r
   Úvalidate   s    zMultipleChoiceField.validatec                 C   s:   |d u rd S |r|dkrg S |   | d¡¡}|  |¡ |S ©Nz[]ú,)r   Úsplitr   )r   r   Z
expressionÚ
connectionr   r	   r	   r
   Úfrom_db_value,   s    
z!MultipleChoiceField.from_db_valuec                 C   s<   |d u rdS g }| j D ]\}}||v r| |¡ qd |¡S )NÚ r   )r   ÚappendÚjoin)r   r   Zpickedr   r   r	   r	   r
   Úget_prep_value:   s    z"MultipleChoiceField.get_prep_valuec                 C   sJ   t |tttfƒr|S |d u r |S |dkr,d S |  | d¡¡}|  |¡ |S r   )Ú
isinstanceÚlistÚsetÚtupler   r   r   )r   r   r   r	   r	   r
   Ú	to_pythonF   s    
zMultipleChoiceField.to_pythonc                    s.   dt jji}|jf i |¤Ž tƒ jf i |¤ŽS )NZ
form_class)ÚdjangoZformsr   ÚupdateÚsuperÚ	formfield)r   ÚkwargsÚdefaults©Ú	__class__r	   r
   r-   U   s    zMultipleChoiceField.formfieldc                 C   s$   |   |¡}|  |  |¡¡ d |¡S )Nr   )Zvalue_from_objectr   r   r#   )r   Úobjr   r	   r	   r
   Úvalue_to_stringZ   s    
z#MultipleChoiceField.value_to_string)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r$   r)   r-   r3   Ú__classcell__r	   r	   r0   r
   r      s   r   )Zdjango.formsr*   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.utils.translationr   r   Z	CharFieldr   r	   r	   r	   r
   Ú<module>   s   