
    ]jju	                        d dl mZ d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d1d
Zd2dZd3d4dZd5dZd6dZd7dZ ed           G d  d!                      Zdd"d8d0ZdS )9    )annotationsN)	dataclassfield)datetimetimezone)Path)
Connection)Anyreturnstrc                 b    t          j        t          j                                                  S N)r   nowr   utc	isoformat     $src/jarvis_finance/imports/common.pyutc_nowr      s     <%%//111r   prefixpartsobjectc                    d                     d |D                       }t          j        |                    d                                                    d d         }|  d| S )N|c              3     K   | ]9}t          |pd                                                                           V  :dS ) Nr   striplower).0ps     r   	<genexpr>zstable_id.<locals>.<genexpr>   sD      CCs17||))++1133CCCCCCr   zutf-8   _)joinhashlibsha256encode	hexdigest)r   r   payloaddigests       r   	stable_idr,      sf    hhCCUCCCCCG^GNN73344>>@@"EFvr   Fvaluedefaultboolintc                    | %t          |                                           dk    r|rdndS t          |                                                                           dv rdndS )Nr      r   >   1yjayestruer   )r-   r.   s     r   
parse_boolr8      sf    }E

((**b00"qq"E

  ""((**.MMM11STTr   c                H    t          | pd                                          S )Nr   )r   r   )r-   s    r   cleanr:      s     u{!!###r   rowdict[str, Any]r   linec                z    t          |                     |                    }|st          d| d| d          |S )Nzline z: z is required)r:   get
ValueError)r;   r   r=   r-   s       r   require_textrA   !   sH    #''%..!!E ><<<<<<===Lr   path
str | Pathc                    t          |                                           }t          j        |                                          S r   )r   
read_bytesr&   r'   r)   )rB   datas     r   source_hashrG   (   s5    ::  ""D>$))+++r   T)frozenc                  x    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<    ee
          Zded<   dS )ImportResultr   import_session_idimport_typestatusr0   
rows_totalrows_newrows_existingrows_failed)default_factory	list[str]errorsN)__name__
__module____qualname____annotations__r   listrT   r   r   r   rJ   rJ   -   s{         KKKOOOMMMd333F333333r   rJ   )notesconnr	   rL   source_filename	file_hash
str | NonerM   rN   rows_importedrQ   rT   rS   rZ   c       	            t          t          j                              }
t                      }|                     d|
|||||||||t          j        |d          |	f           |                                  |
S )Na  
        INSERT INTO import_sessions(
            import_session_id, import_type, source_filename, source_hash, started_at,
            finished_at, status, rows_total, rows_imported, rows_failed, errors_json, notes
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        F)ensure_ascii)r   uuiduuid4r   executejsondumpscommit)r[   rL   r\   r]   rM   rN   r_   rQ   rT   rZ   
session_idr   s               r   create_import_sessionri   9   s     TZ\\""J
))CLL	 JvE222	
  , 	KKMMMr   )r   r   )r   r   r   r   r   r   )F)r-   r   r.   r/   r   r0   )r-   r   r   r   )r;   r<   r   r   r=   r0   r   r   )rB   rC   r   r   )r[   r	   rL   r   r\   r   r]   r^   rM   r   rN   r0   r_   r0   rQ   r0   rT   rS   rZ   r^   r   r   )
__future__r   r&   re   rb   dataclassesr   r   r   r   pathlibr   sqlite3r	   typingr
   r   r,   r8   r:   rA   rG   rJ   ri   r   r   r   <module>ro      s   " " " " " "    ( ( ( ( ( ( ( ( ' ' ' ' ' ' ' '                  2 2 2 2       U U U U U$ $ $ $   , , , ,
 $4 4 4 4 4 4 4 4, & & & & & & & &r   