o
    ChU&                     @   s   d dl Zd dlmZ d dlmZ d dlmZ d dl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ZG dd de	jZG dd deZG dd deZdS )    N)Iterable)deepcopy)chain)forms)settings)gettext_lazy   )ModelResourcec                       sR   e Zd ZejeddddZejedddZ fddZd	d
 Z	dd Z
  ZS )ImportExportFormBaseResource F)labelchoicesrequiredFormat)r   r   c                    s*   t  jdi | | | | | d S )Nr   )super__init___init_resources_init_formatsselfformats	resourceskwargs	__class__r   e/var/www/html/myvaluetrips/my_value_trip_new/venv/lib/python3.10/site-packages/import_export/forms.pyr      s   
zImportExportFormBase.__init__c                 C   sT   |st ddd t|D | jd _t|dkr(t | jd _d| jd< d S d S )Nzno defined resourcesc                 S   s   g | ]
\}}||  fqS r   )get_display_name).0iresourcer   r   r   
<listcomp>    s    z8ImportExportFormBase._init_resources.<locals>.<listcomp>r    r   0)	
ValueError	enumeratefieldsr   lenr   HiddenInputwidgetinitial)r   r   r   r   r   r      s   z$ImportExportFormBase._init_resourcesc                 C   s~   |st ddd t|D }t|dkr+| jd }|d   |_d|_d|jjd< t|dkr7|	dd	 || jd _
d S )
Nzinvalid formats listc                 S   s"   g | ]\}}t ||  fqS r   )str	get_title)r   r   fr   r   r   r!   +   s   " z6ImportExportFormBase._init_formats.<locals>.<listcomp>r   formatr   Treadonly) z---)r#   r$   r&   r%   r+   valuer)   r(   attrsinsertr   )r   r   r   fieldr   r   r   r   '   s   
z"ImportExportFormBase._init_formats)__name__
__module____qualname__r   ChoiceField_r    r-   r   r   r   __classcell__r   r   r   r   r
      s    
r
   c                       sD   e Zd ZejeddZg dZ fddZe	 fddZ
  ZS )
ImportFormzFile to import)r   )r    import_filer-   c                    sN   t  j||fi | t|dkr%d| jd jjd< d| jd jjd< d S d S )Nr   guess_formatr;   classr-   )r   r   r&   r%   r(   r1   r   r   r   r   r   ?   s
   zImportForm.__init__c                    s4   t  j}tjr	dnd}|tjd| dddfd S )Nr/   z.minzadmin/js/vendor/jquery/jqueryz.jszadmin/js/jquery.init.jszimport_export/guess_format.js)js)r   mediar   DEBUGr   Media)r   r?   extrar   r   r   r?   E   s   
zImportForm.media)r4   r5   r6   r   	FileFieldr8   r;   field_orderr   propertyr?   r9   r   r   r   r   r:   7   s    r:   c                   @   sV   e Zd Zeje dZeje dZeje dZeje ddZ	dd Z
dS )ConfirmImportForm)r(   Fr(   r   c                 C   s   | j d }tj|}|S )Nimport_file_name)cleaned_dataospathbasename)r   datar   r   r   clean_import_file_nameX   s   
z(ConfirmImportForm.clean_import_file_nameN)r4   r5   r6   r   	CharFieldr'   rH   original_file_namer-   r    rN   r   r   r   r   rF   R   s    rF   c                   @   s   e Zd Zeje ddZdS )
ExportFormFrG   N)r4   r5   r6   r   MultipleChoiceFieldMultipleHiddenInputexport_itemsr   r   r   r   rQ   ^   s    
rQ   c                       s   e Zd Z fddZe fddZdee ddfdd	Zd
ede	de	fddZ
d
ededdfddZed
ede	de	fddZdd ZdeddfddZdd ZdeddfddZdd Zd ddZ  ZS )!SelectableFieldsExportFormc                    s$   t  j||fi | | | d S N)r   r   _init_selectable_fieldsr   r   r   r   r   e   s   z#SelectableFieldsExportForm.__init__c                    s    t  j}|tjdddgid S )N)z)import_export/export_selectable_fields.jsallzimport_export/export.css)r>   css)r   r?   r   rA   )r   r?   r   r   r   r?   i   s   z SelectableFieldsExportForm.mediar   returnNc                 C   sh   || _ d| _dd |D | _t|D ]\}}| ||}|| j|j< qdgt| j  }| | dS )z>
        Create `BooleanField(s)` for resource fields
        Tc                 S   s   i | ]}|j g qS r   )r4   )r   r    r   r   r   
<dictcomp>y   s    zFSelectableFieldsExportForm._init_selectable_fields.<locals>.<dictcomp>r    N)	r   is_selectable_fields_formresource_fieldsr$   _create_boolean_fieldsr4   r   valuesorder_fields)r   r   indexr    boolean_fieldsordered_fieldsr   r   r   rW   s   s   z2SelectableFieldsExportForm._init_selectable_fieldsr    
field_namec                 C   s@   | dd }|j|}|r|j|kr| d|j d}|S )Nr8    z ())replacetitler%   getcolumn_name)r   r    rd   rh   r3   r   r   r   _get_field_label   s
   z+SelectableFieldsExportForm._get_field_labelra   c           	      C   s   |   }g }d}|D ]8}| ||}tj| ||dddd}d|_|j|_||_||j	j
d< |du r9d |_}|| j|< || q|S )NFr/   T)r   label_suffixr)   r   zresource-id)get_export_ordercreate_boolean_field_namer   BooleanFieldrk   is_selectable_fieldr4   resource_nameresource_indexr(   r1   initial_fieldr%   append)	r   r    ra   r%   rb   is_initial_fieldr3   rd   boolean_fieldr   r   r   r^      s(   



z1SelectableFieldsExportForm._create_boolean_fieldsc                 C   s   | j  d | S )a1  
        Create field name by combining `resource_name` + `field_name` to prevent
        conflict between resource fields with same name

        Example:
            BookResource            +   name -> bookresource_name
            BookResourceWithNames   +   name -> bookresourcewithnames_name
        r8   )r4   lower)r    rd   r   r   r   rn      s   
z4SelectableFieldsExportForm.create_boolean_field_namec                 C   s0   |   }|r| | | | | | | jS rV   )get_selected_resource"_remove_unselected_resource_fields_normalize_resource_fields_validate_any_field_selectedrI   r   selected_resourcer   r   r   clean   s   


z SelectableFieldsExportForm.cleanr}   c                 C   sD   t | j}| j D ]\}}|j|krq
|D ]}||= qq
|| _dS )zO
        Remove boolean fields except the fields for selected resource
        N)r   rI   r]   itemsr4   )r   r}   _cleaned_datarq   r%   r3   r   r   r   ry      s   


z=SelectableFieldsExportForm._remove_unselected_resource_fieldsc                 C   sX   t | dd sttdd}d| jv r'z	t| jd }W n	 ty&   Y nw | j| S )NrI   z,Form is not validated, call `is_valid` firstr   r    )getattrr   ValidationErrorr8   rI   intr#   r   )r   rr   r   r   r   rx      s   

z0SelectableFieldsExportForm.get_selected_resourcec                 C   sp   |j  d }i }g | _| j D ]!\}}||v r.||d}|||< |du r-| j| q|||< q|| _dS )z
        Field names are combination of resource_name + field_name,
        normalize field names by removing resource name
        r8   r/   TN)r4   rw   _selected_resource_fieldsrI   r   rg   rt   )r   r}   selected_resource_namer   kvrd   r   r   r   rz      s   

z5SelectableFieldsExportForm._normalize_resource_fieldsc                    s*   |   }|    fdd| j D S )Nc                    s$   g | ]\}}| v r|d u r|qS )Tr   )r   r3   r0   r]   r   r   r!      s
    zRSelectableFieldsExportForm.get_selected_resource_export_fields.<locals>.<listcomp>)rx   rm   rI   r   r|   r   r   r   #get_selected_resource_export_fields   s
   

z>SelectableFieldsExportForm.get_selected_resource_export_fieldsc                    sJ   t |   t fdd| j D s#tjtddd| iddS )zN
        Validate if any field for resource was selected in form data
        c                 3   s     | ]\}}| v r|V  qd S rV   r   )r   r   r   r   r   r   	<genexpr>
  s    zJSelectableFieldsExportForm._validate_any_field_selected.<locals>.<genexpr>z9Select at least 1 field for "%(resource_name)s" to exportinvalidrq   )codeparamsN)	listrm   anyrI   r   r   r   r8   r   )r   r    r   r   r   r{     s   z7SelectableFieldsExportForm._validate_any_field_selected)rZ   N)r4   r5   r6   r   rE   r?   r   r	   rW   r*   rk   r   r^   staticmethodrn   r~   ry   rx   rz   r   r{   r9   r   r   r   r   rU   d   s&    	

rU   )os.pathrJ   collections.abcr   copyr   	itertoolsr   djangor   django.confr   django.utils.translationr   r8   r   r	   Formr
   r:   rF   rQ   rU   r   r   r   r   <module>   s    *