o
    Ch#                     @   s   d dl Z d dlZ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 e eZG dd	 d	ZG d
d dZG dd dZG dd dZG dd dZdS )    N)OrderedDictNON_FIELD_ERRORS)	force_str)cached_property)gettext_lazy)Datasetc                   @   s.   e Zd ZdZd	ddZdd Zedd ZdS )
ErrorzQ
    Base class representing an Error arising from error during data import.
    Nc                 C   s   || _ || _|| _dS )z
        :param error: Instance of an Exception class.
        :param row: The row as a dict of fields and values (optional).
        :param number: The row number (optional).
        Nerrorrownumber)selfr   r   r    r   g/var/www/html/myvaluetrips/my_value_trip_new/venv/lib/python3.10/site-packages/import_export/results.py__init__   s   
zError.__init__c                 C   sL   d| j }| jd ur|d| j 7 }| jd ur |d| j 7 }|d7 }|S )Nz<Error: z at row z at number >r
   )r   resultr   r   r   __repr__   s   

zError.__repr__c                 C   s6   t jdkrt| j}n
td | j| jj}d|S )N)   
    )sysversion_info	tracebackformat_exceptionr   __traceback__join)r   linesr   r   r   r   '   s   

zError.traceback)NN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r	      s    

	r	   c                   @   s   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d Zdd Zdd Zdd Zdd 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 S N)	errorsvalidation_errordiffimport_type
row_values	object_idobject_reprinstanceoriginalr   r   r   r   r   E   s   
zRowResult.__init__c                 C      | j tjkS )zT
        :return: ``True`` if import type is 'update', otherwise ``False``.
        )r-   r#   IMPORT_TYPE_UPDATEr3   r   r   r   	is_updated      zRowResult.is_updatec                 C   r4   )zQ
        :return: ``True`` if import type is 'new', otherwise ``False``.
        )r-   r#   IMPORT_TYPE_NEWr3   r   r   r   is_newj   r7   zRowResult.is_newc                 C   r4   )zT
        :return: ``True`` if import type is 'delete', otherwise ``False``.
        )r-   r#   IMPORT_TYPE_DELETEr3   r   r   r   	is_deletep   r7   zRowResult.is_deletec                 C   r4   )zR
        :return: ``True`` if import type is 'skip', otherwise ``False``.
        )r-   r#   IMPORT_TYPE_SKIPr3   r   r   r   is_skipv   r7   zRowResult.is_skipc                 C   r4   )zS
        :return: ``True`` if import type is 'error', otherwise ``False``.
        )r-   r#   IMPORT_TYPE_ERRORr3   r   r   r   is_error|   r7   zRowResult.is_errorc                 C   r4   )zU
        :return: ``True`` if import type is 'invalid', otherwise ``False``.
        )r-   r#   IMPORT_TYPE_INVALIDr3   r   r   r   
is_invalid   r7   zRowResult.is_invalidc                 C   s   | j | jv S )zn
        :return: ``True`` if import type is not 'error' or 'invalid', otherwise
          ``False``.
        )r-   valid_import_typesr3   r   r   r   is_valid   s   zRowResult.is_validc              
   C   sh   |d ur2t |dd | _zt|| _W d S  ty1 } zttdt|  W Y d }~d S d }~ww d S )Npkz*call to force_str() on instance failed: %s)	getattrr/   r   r0   	Exceptionloggerdebug_str)r   r1   er   r   r   add_instance_info   s   $zRowResult.add_instance_infoN)r   r    r!   r"   r5   r8   r:   r<   r>   r@   	frozensetrB   r   r6   r9   r;   r=   r?   rA   rC   rL   r   r   r   r   r#   2   s0    	r#   c                   @   sD   e Zd ZdZdd Zedd Zedd Zedd	 Z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)   )r   r   valuesmessage_dict
error_dictAttributeErrorr   messages)r   r   r+   rO   r   r   r   r      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>)rQ   itemsr3   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.)rQ   getr   r3   r   r   r   non_field_specific_errors   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   )rQ   rO   len)r   count
error_listr   r   r   error_count   s   zInvalidRow.error_countc              	   C   s*   dt | j d| j d| jd| j d	S )N<z(row=z, error=z, error_count=z)>)typer   r   r   r_   r3   r   r   r   r      s   zInvalidRow.__repr__N)
r   r    r!   r"   r   propertyrY   r[   r_   r   r   r   r   r   rN      s    	


rN   c                   @   s   e Zd ZdZdd ZdS )ErrorRowzEA row that resulted in one or more errors being raised during import.c                 C   s   || _ || _d S r)   r   r*   )r   r   r*   r   r   r   r      s   
zErrorRow.__init__N)r   r    r!   r"   r   r   r   r   r   rc      s    rc   c                       s|   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dd Z  ZS )Resultc                    st   t    g | _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_rows
error_rowsr   failed_datasetr   r#   r8   r5   r:   r<   r>   r@   totals
total_rows)r   argskwargs	__class__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#   rB   )rT   rr   r   r   
<listcomp>   s    z%Result.valid_rows.<locals>.<listcomp>)ri   r3   r   r   r   
valid_rows      zResult.valid_rowsc                 C      | j | d S r)   )ri   appendr   
row_resultr   r   r   append_row_result   rv   zResult.append_row_resultc                 C   rw   r)   )rg   rx   )r   r   r   r   r   append_base_error   rv   zResult.append_base_errorc                 C   s   |sg n|}|dg | j _d S )Nr	   )rl   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   )rT   kvr   r   r   rt      s    z,Result.append_failed_row.<locals>.<listcomp>)rX   rx   rJ   r   rR   rl   )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)rZ   )rT   colr   r   r   	<genexpr>   s    z,Result.append_invalid_row.<locals>.<genexpr>)r   r+   rO   )tuplerh   rj   rx   rN   )r   r   r   r+   rO   r   r   r   append_invalid_row   s   zResult.append_invalid_rowc                 C   s   | j t||d d S )Nrd   )rk   rx   rc   )r   r   r   r*   r   r   r   append_error_row  s   zResult.append_error_rowc                 C   s"   |j r| j|j   d7  < d S d S )N   )r-   rm   ry   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*   )rT   ir   r   r   r   rt     s   $ z%Result.row_errors.<locals>.<listcomp>)	enumerateri   r3   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.)boolrg   r   r3   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.)r   rj   r3   r   r   r   has_validation_errors  s   
zResult.has_validation_errorsc                 C   r   r)   )iterri   r3   r   r   r   __iter__  s   
zResult.__iter__)r   r    r!   r   ru   r{   r|   r~   r   r   r   r   r   r   r   r   __classcell__r   r   rq   r   re      s    re   )loggingr   r   collectionsr   django.core.exceptionsr   django.utils.encodingr   django.utils.functionalr   django.utils.translationr   rI   tablibr   	getLoggerr   rG   r	   r#   rN   rc   re   r   r   r   r   <module>   s    
#g+
