o
    lf                      @   s   d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZ ddlmZ G d	d
 d
ejZG dd dejZG dd dejZdS )    N)chain)forms)ArrayMaxLengthValidatorArrayMinLengthValidator)ValidationError)gettext_lazy   )prefix_validation_errorc                       sr   e Zd ZdediZdddd fdd
Z fdd	Zd
d Zdd Z fddZ	 fddZ
 fddZ  ZS )SimpleArrayFielditem_invalid+Item %(nth)s in the array did not validate:,N)	delimiter
max_length
min_lengthc                   sj   || _ || _t jdi | |d ur || _| jtt| |d ur3|| _	| jt
t| d S d S N )
base_fieldr   super__init__r   
validatorsappendr   intr   r   )selfr   r   r   r   kwargs	__class__r   g/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/django/contrib/postgres/forms/array.pyr      s   zSimpleArrayField.__init__c                       t  |} fdd|D S )Nc                       g | ]} j |qS r   )r   clean).0valr   r   r   
<listcomp>#       z*SimpleArrayField.clean.<locals>.<listcomp>)r   r    r   valuer   r#   r   r    !      zSimpleArrayField.cleanc                    s(   t |tr j fdd|D S |S )Nc                 3   s     | ]}t  j|V  qd S N)strr   prepare_value)r!   vr#   r   r   	<genexpr>'   s    
z1SimpleArrayField.prepare_value.<locals>.<genexpr>)
isinstancelistr   joinr&   r   r#   r   r+   %   s
   
zSimpleArrayField.prepare_valuec                 C   s   t |tr|}n|r|| j}ng }g }g }t|D ]3\}}z|| j| W q tyN } z|t	|| j
d dd|d id W Y d }~qd }~ww |rUt||S Nr   nth   )prefixcodeparams)r.   r/   splitr   	enumerater   r   	to_pythonr   r	   error_messages)r   r'   itemserrorsvaluesindexitemerrorr   r   r   r9   ,   s0   

	zSimpleArrayField.to_pythonc                       t  | g }t|D ]0\}}z| j| W q ty< } z|t|| jd dd|d id W Y d }~qd }~ww |rCt|d S r1   )r   validater8   r   r   r   r	   r:   r   r'   r<   r>   r?   r@   r   r   r   rB   E   &   
	zSimpleArrayField.validatec                    rA   r1   )r   run_validatorsr8   r   r   r   r	   r:   rC   r   r   r   rE   W   rD   zSimpleArrayField.run_validatorsc                    sH   z|  |}W n	 ty   Y nw || jv r|| jv rdS t ||S NF)r9   r   empty_valuesr   has_changed)r   initialdatar'   r   r   r   rH   i   s   zSimpleArrayField.has_changed)__name__
__module____qualname___default_error_messagesr   r    r+   r9   rB   rE   rH   __classcell__r   r   r   r   r
      s    r
   c                       sv   e Zd ZdZ fddZedd Zdd Zdd	 Zd
d Z	d fdd	Z
edd Z fddZedd Z  ZS )SplitArrayWidgetz!postgres/widgets/split_array.htmlc                    s2   t |tr| n|| _|| _t jdi | d S r   )r.   typewidgetsizer   r   )r   rS   rT   r   r   r   r   r   w   s   zSplitArrayWidget.__init__c                 C      | j jS r)   )rS   	is_hiddenr#   r   r   r   rV   |      zSplitArrayWidget.is_hiddenc                    s    fddt jD S )Nc              	      s$   g | ]}j  d |f qS )%s_%s)rS   value_from_datadictr!   r>   rJ   filesnamer   r   r   r$      s    z8SplitArrayWidget.value_from_datadict.<locals>.<listcomp>)rangerT   r   rJ   r\   r]   r   r[   r   rY      s   z$SplitArrayWidget.value_from_datadictc                    s"   t  fddtjD S )Nc                 3   s(    | ]}j  d |f V  qdS )rX   N)rS   value_omitted_from_datarZ   r[   r   r   r-      s
    
z;SplitArrayWidget.value_omitted_from_data.<locals>.<genexpr>)allr^   rT   r_   r   r[   r   r`      s   z(SplitArrayWidget.value_omitted_from_datac                 C   s   |r|d7 }|S )N_0r   )r   id_r   r   r   id_for_label   s   zSplitArrayWidget.id_for_labelNc           	   	      s   |d u ri n|}t  |||}| jr| j| j_|pg }g |d d< | |}|d}ttt|| j	D ]7}z|| }W n t
yI   d }Y nw |rXi |dd||f i}|d d | j|d|  ||d  q6|S )NrS   
subwidgetsidrX   z_%s)r   get_contextis_localizedrS   build_attrsgetr^   maxlenrT   
IndexErrorr   )	r   r]   r'   attrscontextfinal_attrsrc   iwidget_valuer   r   r   rg      s,   


zSplitArrayWidget.get_contextc                 C   rU   r)   )rS   mediar#   r   r   r   rs      rW   zSplitArrayWidget.mediac                    s   t  |}t| j|_|S r)   )r   __deepcopy__copydeepcopyrS   )r   memoobjr   r   r   rt      s   zSplitArrayWidget.__deepcopy__c                 C   rU   r)   )rS   needs_multipart_formr#   r   r   r   ry      rW   z%SplitArrayWidget.needs_multipart_formr)   )rK   rL   rM   template_namer   propertyrV   rY   r`   rd   rg   rs   rt   ry   rP   r   r   r   r   rQ   t   s    

rQ   c                       sV   e Zd ZdediZdd fdd
Zdd Z fd	d
Zdd Z fddZ	  Z
S )SplitArrayFieldr   r   F)remove_trailing_nullsc                   sB   || _ || _|| _t|j|d}|d| t jdi | d S )N)rS   rT   rS   r   )r   rT   r}   rQ   rS   
setdefaultr   r   )r   r   rT   r}   r   rS   r   r   r   r      s   zSplitArrayField.__init__c                 C   sR   d }| j r%ttt|D ]\}}|| jjv r|}q |d ur%|d | }||fS r)   )r}   reversedr/   r8   r   rG   )r   r=   r>   rq   r'   r   r   r   _remove_trailing_nulls   s   z&SplitArrayField._remove_trailing_nullsc                    r   )Nc                    r   r   )r   r9   )r!   r?   r#   r   r   r$      r%   z-SplitArrayField.to_python.<locals>.<listcomp>)r   r9   r&   r   r#   r   r9      r(   zSplitArrayField.to_pythonc           	      C   s  g }g }t |s| jrt| jd t| jt|}t|D ]@}|| }z|| j	
| W n) tyX } z|t|| jd dd|d id |d  W Y d }~qd }~ww |d  q| |\}}|d urp|d | }ttd |}|rttt||S )Nrequiredr   r2   r3   )r5   r6   )anyr   r   r:   rk   rT   rl   r^   r   r   r    r	   r   r/   filterr   from_iterable)	r   r'   cleaned_datar<   max_sizer>   r?   r@   
null_indexr   r   r   r       s:   
zSplitArrayField.cleanc                    sV   z|  |}W n	 ty   Y nw | |\}}|| jv r$|| jv r$dS t ||S rF   )r9   r   r   rG   r   rH   )r   rI   rJ   rN   r   r   r   rH      s   zSplitArrayField.has_changed)rK   rL   rM   rN   rO   r   r   r9   r    rH   rP   r   r   r   r   r|      s    r|   )ru   	itertoolsr   djangor   "django.contrib.postgres.validatorsr   r   django.core.exceptionsr   django.utils.translationr   rN   utilsr	   	CharFieldr
   WidgetrQ   Fieldr|   r   r   r   r   <module>   s    eC