U
    dX                     @   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-gh2cwdms/import_export/results.py__init__	   s    zError.__init__)NN)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   sD   e 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 )	RowResultupdatenewdeleteskipr	   invalidc                 C   s.   g | _ d | _d | _d | _i | _d | _d | _d S r   )errorsvalidation_errorZdiffimport_type
row_values	object_idobject_repr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   instancer   r   r   add_instance_info'   s    zRowResult.add_instance_infoN)r   r   r   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 )
InvalidRowzRA 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   r.   r   r   r   r   1   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>)r/   itemsr   r   r   r   field_specific_errors:   s    z InvalidRow.field_specific_errorsc                 C   s   | j tg S )zDReturns a list of non field-specific validation errors for this row.)r/   getr   r   r   r   r   non_field_specific_errorsB   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   )r/   r.   len)r   countZ
error_listr   r   r   error_countG   s    zInvalidRow.error_countN)	r   r   r   __doc__r   propertyr7   r9   r<   r   r   r   r   r,   .   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   Q   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+   )r2   rr   r   r   
<listcomp>a   s   z%Result.valid_rows.<locals>.<listcomp>)rC   r   r   r   r   
valid_rows`   s    zResult.valid_rowsc                 C   s   | j | d S r   )rC   appendr   Z
row_resultr   r   r   append_row_resultf   s    zResult.append_row_resultc                 C   s   | j | d S r   )rA   rN   )r   r	   r   r   r   append_base_errori   s    zResult.append_base_errorc                 C   s    |s
t  n|}|dg | j_d S )Nr   )listrE   headers)r   rS   r   r   r   add_dataset_headersl   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   )r2   kvr   r   r   rL   q   s     z,Result.append_failed_row.<locals>.<listcomp>)r6   rN   strr	   r0   rE   )r   r   r	   r   r   r   r   append_failed_rowp   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)r8   )r2   colr   r   r   	<genexpr>{   s     z,Result.append_invalid_row.<locals>.<genexpr>)r-   r   r.   )tuplerB   rD   rN   r,   )r   r-   r   r   r.   r   rZ   r   append_invalid_rowx   s    zResult.append_invalid_rowc                 C   s   |j r| j|j   d7  < d S )N   )r   rF   rO   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   )r2   ir   r   r   r   rL      s    z%Result.row_errors.<locals>.<listcomp>)	enumeraterC   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.)boolrA   rb   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.)rc   rD   r   r   r   r   has_validation_errors   s    zResult.has_validation_errorsc                 C   s
   t | jS r   )iterrC   r   r   r   r   __iter__   s    zResult.__iter__)r   r   r   r   rM   rP   rQ   rT   rX   r]   r_   rb   rd   re   rg   __classcell__r   r   rI   r   r?   P   s   r?   N)collectionsr   Zdjango.core.exceptionsr   Zdjango.utils.encodingr   Ztablibr   r   r   r,   r?   r   r   r   r   <module>   s   "