U
    >Keq                     @   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   9/tmp/pip-unpacked-wheel-v_jw5did/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_errorZdiffimport_type
row_values	object_idobject_reprinstanceoriginalZ
new_recordr   r   r   r   r   "   s    zRowResult.__init__c                 C   s$   |d k	r t |dd | _t|| _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   sD   || _ || _|| _z|j| _W n  tk
r>   t|ji| _Y nX d S r   )numberr	   valuesZmessage_dict
error_dictAttributeErrorr   messages)r   r/   r   r0   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>)r1   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.)r1   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   )r1   r0   len)r   countZ
error_listr   r   r   error_counth   s    zInvalidRow.error_countN)	r   r   r   r%   r   propertyr9   r;   r>   r   r   r   r   r.   M   s   	

r.   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+   totalsZ
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kr|qS r   )r   r   r-   )r4   rr   r   r   
<listcomp>   s      z%Result.valid_rows.<locals>.<listcomp>)rD   r!   r   r   r   
valid_rows   s    zResult.valid_rowsc                 C   s   | j | d S r   )rD   appendr   Z
row_resultr   r   r   append_row_result   s    zResult.append_row_resultc                 C   s   | j | d S r   )rB   rO   )r   r	   r   r   r   append_base_error   s    zResult.append_base_errorc                 C   s    |s
t  n|}|dg | j_d S )Nr   )listrF   headers)r   rT   r   r   r   add_dataset_headers   s    zResult.add_dataset_headersc                 C   sZ   dd |  D }z|t|j W n" tk
rH   |t| Y nX | j| d S )Nc                 S   s   g | ]\}}|qS r   r   )r4   kvr   r   r   rM      s     z,Result.append_failed_row.<locals>.<listcomp>)r8   rO   strr	   r2   rF   )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:   )r4   colr   r   r   	<genexpr>   s     z,Result.append_invalid_row.<locals>.<genexpr>)r/   r   r0   )tuplerC   rE   rO   r.   )r   r/   r   r   r0   r   r[   r   append_invalid_row   s    zResult.append_invalid_rowc                 C   s   |j r| j|j   d7  < d S )N   )r   rG   rP   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 )r_   )r   )r4   ir   r   r   r   rM      s      z%Result.row_errors.<locals>.<listcomp>)	enumeraterD   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.)boolrB   rc   r!   r   r   r   
has_errors   s    zResult.has_errorsc                 C   s
   t | jS )zrReturns a boolean indicating whether the import process resulted in
        any validation errors for this result.)rd   rE   r!   r   r   r   has_validation_errors   s    zResult.has_validation_errorsc                 C   s
   t | jS r   )iterrD   r!   r   r   r   __iter__   s    zResult.__iter__)r   r   r   r   rN   rQ   rR   rU   rY   r^   r`   rc   re   rf   rh   __classcell__r   r   rJ   r   r@   q   s   r@   N)collectionsr   Zdjango.core.exceptionsr   Zdjango.utils.encodingr   Ztablibr   r   r   r.   r@   r   r   r   r   <module>   s   >$