
    NwgL&                         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e	j"                        Z G d de      Z G d de	j"                        Z G d de      Z G d de      Zy)    N)deepcopy)chain)Iterable)forms)settings)gettext_lazy   )ModelResourcec                        e Zd Z ej                   ed      dd      Z ej                   ed      d      Z fdZd Z	d	 Z
 xZS )
ImportExportFormBaseResource F)labelchoicesrequiredFormat)r   r   c                 h    t        |   di | | j                  |       | j                  |       y )Nr   )super__init___init_resources_init_formatsselfformats	resourceskwargs	__class__s       J/var/www/horilla/myenv/lib/python3.12/site-packages/import_export/forms.pyr   zImportExportFormBase.__init__   s/    "6"Y'7#    c                 2   |st        d      t        |      D cg c]  \  }}||j                         f c}}| j                  d   _        t        |      dk(  r6t        j                         | j                  d   _        d| j                  d<   y y c c}}w )Nzno defined resourcesresourcer	   0)

ValueError	enumerateget_display_namefieldsr   lenr   HiddenInputwidgetinitial)r   r   ir!   s       r   r   z$ImportExportFormBase._init_resources   s    344@I)@T+
1<HQ))+,+
J' y>Q-2->->-@DKK
#*'*DLL$ +
s   Bc                    |st        d      t        |      D cg c]%  \  }}t        |       |       j                         f' }}}t	        |      dk(  rL| j
                  d   } |d          j                         |_        d|_        d|j                  j                  d<   t	        |      dkD  r|j                  dd       || j
                  d   _        y c c}}w )Nzinvalid formats listr	   formatr   Treadonly) z---)r#   r$   str	get_titler'   r&   valuer*   r)   attrsinsertr   )r   r   r+   fr   fields         r   r   z"ImportExportFormBase._init_formats'   s    3449B79KLACFACMMO,LLw<1KK)E$'!*,002EKEM-1ELLz*w<!NN1k*(/H% Ms   *C)__name__
__module____qualname__r   ChoiceField_r!   r-   r   r   r   __classcell__r   s   @r   r   r      sO     u  
mH
 UkF
$
+0r   r   c                   l     e Zd Z ej                   ed            Zg dZ fdZe	 fd       Z
 xZS )
ImportFormzFile to import)r   )r!   import_filer-   c                     t        |   ||fi | t        |      dkD  rMd| j                  d   j                  j
                  d<   d| j                  d   j                  j
                  d<   y y )Nr	   guess_formatr@   classr-   )r   r   r'   r&   r)   r3   r   s       r   r   zImportForm.__init__?   sf    )6v6w<!?MDKK&--33G<:HDKK!((..w7 r   c                     t         |   }t        j                  rdnd}|t	        j
                  d| dddf      z   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   rF   extrar   s      r   rF   zImportForm.mediaE   sH    nn&u{{/wc:)/
 
 	
r   )r7   r8   r9   r   	FileFieldr;   r@   field_orderr   propertyrF   r<   r=   s   @r   r?   r?   7   s:    !%//*:(;<K
 8KI 	
 	
r   r?   c                   $   e Zd Z ej                   ej
                               Z ej                   ej
                               Z ej                   ej
                               Z ej                   ej
                         d      Z	d Z
y)ConfirmImportForm)r)   Fr)   r   c                 b    | j                   d   }t        j                  j                  |      }|S )Nimport_file_name)cleaned_dataospathbasename)r   datas     r   clean_import_file_namez(ConfirmImportForm.clean_import_file_nameX   s,      !34ww%r   N)r7   r8   r9   r   	CharFieldr(   rQ   original_file_namer-   r!   rW   r   r   r   rN   rN   R   s{    &u.?e.?.?.AB(0A0A0A0CDU__$5E$5$5$78Fu&7e&7&7&9EJHr   rN   c                   R    e Zd Z ej                   ej
                         d      Zy)
ExportFormFrO   N)r7   r8   r9   r   MultipleChoiceFieldMultipleHiddenInputexport_itemsr   r   r   r[   r[   ^   s$    ,5,,(u((*ULr   r[   c                        e Zd Z fdZe fd       Zdee   ddfdZdede	de	fd	Z
ded
eddfdZedede	de	fd       Zd ZdeddfdZd ZdeddfdZd ZddZ xZS )SelectableFieldsExportFormc                 J    t        |   ||fi | | j                  |       y N)r   r   _init_selectable_fieldsr   s       r   r   z#SelectableFieldsExportForm.__init__e   s%    )6v6$$Y/r   c                 R    t         |   }|t        j                  dddgi      z   S )N)z)import_export/export_selectable_fields.jsallzimport_export/export.css)rE   css)r   rF   r   rH   )r   rF   r   s     r   rF   z SelectableFieldsExportForm.mediai   s5    u{{=23
 
 	
r   r   returnNc                 N   || _         d| _        |D ci c]  }|j                  g  c}| _        t	        |      D ]0  \  }}| j                  ||      }|| j                  |j                  <   2 dgt        | j                  j                          }| j                  |       yc c}w )z>
        Create `BooleanField(s)` for resource fields
        Tr!   N)	r   is_selectable_fields_formr7   resource_fieldsr$   _create_boolean_fieldsr   valuesorder_fields)r   r   r!   indexboolean_fieldsordered_fieldss         r   rc   z2SelectableFieldsExportForm._init_selectable_fieldss   s     #)-&FOP( 1 12 5P(3 	EOE8!885IN6DD  !2!23	E 
 D((//12

 	.)  Qs   B"r!   
field_namec                     |j                  dd      j                         }|j                  j                  |      }|r!|j                  |k7  r| d|j                   d}|S )Nr;    z ())replacetitler&   getcolumn_name)r   r!   rq   rv   r6   s        r   _get_field_labelz+SelectableFieldsExportForm._get_field_label   s_    ""3,224##J/U&&*4gR 1 12!4Er   rn   c                     |       j                         }g }d}|D ]  }| j                  ||      }t        j                  | j	                  ||      ddd      }d|_        |j                  |_        ||_        ||j                  j                  d<   |du r	dx|_        }|| j                  |<   |j                  |        |S )NFr/   T)r   label_suffixr*   r   zresource-id)get_export_ordercreate_boolean_field_namer   BooleanFieldry   is_selectable_fieldr7   resource_nameresource_indexr)   r3   initial_fieldr&   append)	r   r!   rn   r&   ro   is_initial_fieldr6   rq   boolean_fields	            r   rk   z1SelectableFieldsExportForm._create_boolean_fields   s    ,,.  	.E77%HJ!..++He<	M 15M-*2*;*;M'+0M(8=M  &&}55(AEE+.>&3DKK
#!!*-%	.( r   c                 B    | j                   j                         dz   |z   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
        r;   )r7   lower)r!   rq   s     r   r}   z4SelectableFieldsExportForm.create_boolean_field_name   s#       &&(3.;;r   c                     | j                         }|r3| j                  |       | j                  |       | j                  |       | j                  S rb   )get_selected_resource"_remove_unselected_resource_fields_normalize_resource_fields_validate_any_field_selectedrR   )r   selected_resources     r   cleanz SelectableFieldsExportForm.clean   sM     668334EF++,=>--.?@   r   r   c                     t        | j                        }| j                  j                         D ]  \  }}|j                  |k(  r|D ]  }||=  ! || _        y)zO
        Remove boolean fields except the fields for selected resource
        N)r   rR   rj   itemsr7   )r   r   _cleaned_datar   r&   r6   s         r   r   z=SelectableFieldsExportForm._remove_unselected_resource_fields   si     !!2!23%)%9%9%?%?%A 	)!M6 ))]: )!%()	) *r   c                     t        | dd       st        j                  t        d            d}d| j                  v r	 t        | j                  d         }| j                  |   S # t        $ r Y w xY w)NrR   z,Form is not validated, call `is_valid` firstr   r!   )getattrr   ValidationErrorr;   rR   intr#   r   )r   r   s     r   r   z0SelectableFieldsExportForm.get_selected_resource   s~    t^T2''@A 
 ***!$T%6%6z%B!C ~~n--  s   A$ $	A0/A0c                 "   |j                   j                         dz   }i }g | _        | j                  j	                         D ]E  \  }}||v r7|j                  |d      }|||<   |du r| j                  j                  |       A|||<   G || _        y)z
        Field names are combination of resource_name + field_name,
        normalize field names by removing resource name
        r;   r/   TN)r7   r   _selected_resource_fieldsrR   r   ru   r   )r   r   selected_resource_namer   kvrq   s          r   r   z5SelectableFieldsExportForm._normalize_resource_fields   s    
 "3!;!;!A!A!Cc!I)+&%%++- 		!DAq%*YY'=rB
,-j)9 2299*E M!		! *r   c                     | j                         } |       j                         }| j                  j                         D cg c]  \  }}||v r|du r| c}}S c c}}w )NT)r   r|   rR   r   )r   r   rj   r6   r2   s        r   #get_selected_resource_export_fieldsz>SelectableFieldsExportForm.get_selected_resource_export_fields   se     668+->>@ !% 1 1 7 7 9
u'ETM 
 	
 
s   Ac                     t         |       j                               t        fd| j                  j	                         D              s1t        j                  t        d      dd|j                         i      y)zN
        Validate if any field for resource was selected in form data
        c              3   2   K   | ]  \  }}|v s|  y wrb   r   ).0r   r   rj   s      r   	<genexpr>zJSelectableFieldsExportForm._validate_any_field_selected.<locals>.<genexpr>
  s     SAa?>R1Ss   z9Select at least 1 field for "%(resource_name)s" to exportinvalidr   )codeparamsN)	listr|   anyrR   r   r   r   r;   r%   )r   r!   rj   s     @r   r   z7SelectableFieldsExportForm._validate_any_field_selected  so     xz::<=S!2!2!8!8!:SS''QR#X%>%>%@  Tr   )rg   N)r7   r8   r9   r   rL   rF   r   r
   rc   r0   ry   r   rk   staticmethodr}   r   r   r   r   r   r   r<   r=   s   @r   r`   r`   d   s    0 
 
*-1H *T *( C C } S T 8 	<M 	<s 	<s 	< 	<!*!.*	*$.*M *d *,
r   r`   )os.pathrS   copyr   	itertoolsr   typingr   djangor   django.confr   django.utils.translationr   r;   r   r
   Formr   r?   rN   r[   r`   r   r   r   <module>r      sf           6 $'05:: '0T
% 
6	

 	% m mr   