o
     eq                     @   sl   d dl mZ d dlmZ d dlmZ d dlmZ G dd dZG dd dZ	G d	d
 d
Z
G dd dZdS )    )OrderedDictNON_FIELD_ERRORS)	force_str)Datasetc                   @   s   e Zd ZdddZdS )ErrorNc                 C   s   || _ || _|| _d S N)error	tracebackrow)selfr	   r
   r    r   H/var/www/html/venv/lib/python3.10/site-packages/import_export/results.py__init__	   s   
zError.__init__)NN)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   sH   e Zd ZdZdZdZdZdZdZdZ	e
eeeegZdd	 Zd
d ZdS )	RowResultz.Container for values relating to a row import.updatenewdeleteskipr	   invalidc                 C   s@   g | _ d | _d | _d | _i | _d | _d | _d | _d | _d | _	d S r   )
errorsvalidation_errordiffimport_type
row_values	object_idobject_reprinstanceoriginal
new_recordr   r   r   r   r   "   s   
zRowResult.__init__c                 C   s(   |d urt |dd | _t|| _d S d S )Npk)getattrr   r   r   )r   r    r   r   r   add_instance_infoF   s   zRowResult.add_instance_infoN)r   r   r   __doc__IMPORT_TYPE_UPDATEIMPORT_TYPE_NEWIMPORT_TYPE_DELETEIMPORT_TYPE_SKIPIMPORT_TYPE_ERRORIMPORT_TYPE_INVALID	frozensetvalid_import_typesr   r&   r   r   r   r   r      s"    	$r   c                   @   s<   e Zd ZdZdd Zedd Zedd Zedd	 Zd
S )
InvalidRowzVA row that resulted in one or more ``ValidationError``
    being raised during import.c                 C   sB   || _ || _|| _z|j| _W d S  ty    t|ji| _Y d S w r   )numberr	   valuesmessage_dict
error_dictAttributeErrorr   messages)r   r1   r   r2   r   r   r   r   Q   s   zInvalidRow.__init__c                 C   s   dd | j  D S )zFReturns a dictionary of field-specific validation errors for this row.c                 S   s   i | ]\}}|t kr||qS r   r   ).0keyvaluer   r   r   
<dictcomp>]   s
    z4InvalidRow.field_specific_errors.<locals>.<dictcomp>)r4   itemsr#   r   r   r   field_specific_errorsZ   s   z InvalidRow.field_specific_errorsc                 C   s   | j tg S )zDReturns a list of non field-specific validation errors for this row.)r4   getr   r#   r   r   r   non_field_specific_errorsc   s   z$InvalidRow.non_field_specific_errorsc                 C   s$   d}| j  D ]}|t|7 }q|S )z;Returns the total number of validation errors for this row.r   )r4   r2   len)r   count
error_listr   r   r   error_counth   s   zInvalidRow.error_countN)	r   r   r   r'   r   propertyr<   r>   rB   r   r   r   r   r0   M   s    	

r0   c                       st   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Z  ZS )Resultc                    sn   t    g | _g | _g | _g | _t | _tt	j
dft	jdft	jdft	jdft	jdft	jdfg| _d| _d S )Nr   )superr   base_errorsdiff_headersrowsinvalid_rowsr   failed_datasetr   r   r)   r(   r*   r+   r,   r-   totals
total_rows)r   argskwargs	__class__r   r   r   r   s    


zResult.__init__c                 C   s   dd | j D S )Nc                 S   s   g | ]
}|j tjv r|qS r   )r   r   r/   )r7   rr   r   r   
<listcomp>   s    z%Result.valid_rows.<locals>.<listcomp>)rH   r#   r   r   r   
valid_rows      zResult.valid_rowsc                 C      | j | d S r   )rH   appendr   
row_resultr   r   r   append_row_result   rT   zResult.append_row_resultc                 C   rU   r   )rF   rV   )r   r	   r   r   r   append_base_error   rT   zResult.append_base_errorc                 C   s    |st  n|}|dg | j_d S )Nr   )listrJ   headers)r   r\   r   r   r   add_dataset_headers   s   zResult.add_dataset_headersc                 C   sX   dd |  D }z
|t|j W n ty#   |t| Y nw | j| d S )Nc                 S   s   g | ]\}}|qS r   r   )r7   kvr   r   r   rR      s    z,Result.append_failed_row.<locals>.<listcomp>)r;   rV   strr	   r5   rJ   )r   r   r	   r   r   r   r   append_failed_row   s   zResult.append_failed_rowc                    s2   t  fdd| jD }| jt|||d d S )Nc                 3   s    | ]	}  |d V  qdS )z---N)r=   )r7   colr   r   r   	<genexpr>   s    z,Result.append_invalid_row.<locals>.<genexpr>)r1   r   r2   )tuplerG   rI   rV   r0   )r   r1   r   r   r2   r   rc   r   append_invalid_row   s   zResult.append_invalid_rowc                 C   s"   |j r| j|j   d7  < d S d S )N   )r   rK   rW   r   r   r   increment_row_result_total   s   z!Result.increment_row_result_totalc                 C   s   dd t | jD S )Nc                 S   s$   g | ]\}}|j r|d  |j fqS )rg   )r   )r7   ir   r   r   r   rR      s   $ z%Result.row_errors.<locals>.<listcomp>)	enumeraterH   r#   r   r   r   
row_errors   s   zResult.row_errorsc                 C   s   t | jp|  S )zReturns a boolean indicating whether the import process resulted in
        any critical (non-validation) errors for this result.)boolrF   rk   r#   r   r   r   
has_errors   s   zResult.has_errorsc                 C   
   t | jS )zrReturns a boolean indicating whether the import process resulted in
        any validation errors for this result.)rl   rI   r#   r   r   r   has_validation_errors   s   
zResult.has_validation_errorsc                 C   rn   r   )iterrH   r#   r   r   r   __iter__   s   
zResult.__iter__)r   r   r   r   rS   rY   rZ   r]   ra   rf   rh   rk   rm   ro   rq   __classcell__r   r   rO   r   rD   q   s    rD   N)collectionsr   django.core.exceptionsr   django.utils.encodingr   tablibr   r   r   r0   rD   r   r   r   r   <module>   s    >$