
    UjZ	                        d dl mZ d dlZd dlmZmZ d dlmZ ddlm	Z	 ddl
mZ  ed	           G d
 d                      ZddZddddZdS )    )annotationsN)	dataclassfield)Path   )detect_dialect)compute_row_hashT)frozenc                      e Zd ZU ded<   ded<   ded<   ded<   ded<   dZded	<   dZded
<   dZded<    ee          Z	ded<   dS )DryRunResultint
rows_total
rows_validrows_failedz	list[str]
row_hasheserrorsr   rows_newrows_existingrows_duplicate)default_factoryrow_statusesN)
__name__
__module____qualname____annotations__r   r   r   r   listr        ]/home/agent/.hermes/worktrees/FinanceManager-sprint23.1/src/jarvis_finance/imports/dry_run.pyr   r      s         OOOOOOHMN#eD999L999999r   r   path
str | Pathrequired_columnsset[str]return&tuple[list[dict[str, str]], list[str]]c                   t          |           } |                     d          d d         }t          |          }g }|                     dd          5 }t	          j        ||          }t          |j        pg           }||z
  }|r!g dt          |           gfcd d d            S d |D             }	d d d            n# 1 swxY w Y   |	|fS )	Nzutf-8)encodingi    )newliner'   )dialectzMissing columns: c                ,    g | ]}t          |          S r   )dict).0rows     r   
<listcomp>z!read_csv_rows.<locals>.<listcomp>#   s    ,,,cS		,,,r   )	r   	read_textr   opencsv
DictReaderset
fieldnamessorted)
r    r"   sampler*   r   freaderr5   missingrowss
             r   read_csv_rowsr<      sA   ::D^^W^--ete4FV$$GF	2	0	0 -A7333*0b11
"Z/ 	?=F7OO==>>- - - - - - - - -,V,,,- - - - - - - - - - - - - - - <s   AC+CC
C)existing_hashesr=   set[str] | Nonec                  t          | |          \  }}|rt          dddg |          S |pt                      }t                      }g }g }dx}x}	}
t          |d          D ]\  }}t	          |          }|                    |           ||v r3|
dz  }
|                    d           |                    d|            n9||v r|	dz  }	|                    d           n|dz  }|                    d           |                    |           t          t          |          t          |          t          |          z
  t          |          ||||	|
|		  	        S )
Nr      )startr   	duplicatezDuplicate row hash at CSV line existingnew)	r   r   r   r   r   r   r   r   r   )r<   r   r4   	enumerater	   appendaddlen)r    r"   r=   r;   r   seenr   r   r   r   r   indexr.   row_hashs                 r   dry_run_csvrL   '   s    !'788LD& 1Aq!R000%.OUUDJ L011H1}~A...  
s#C(((###taN,,,MMCECCDDDD((QM
++++MH&&&t99t99s6{{*KK#%!
 
 
 
r   )r    r!   r"   r#   r$   r%   )r    r!   r"   r#   r=   r>   r$   r   )
__future__r   r2   dataclassesr   r   pathlibr   csv_dialectr   rK   r	   r   r<   rL   r   r   r   <module>rQ      s    " " " " " " 



 ( ( ( ( ( ( ( (       ' ' ' ' ' ' & & & & & & $	: 	: 	: 	: 	: 	: 	: 	:   & (,	& & & & & & & &r   