
    Uj                    Z   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZ  ed           G d	 d
                      Z ed           G d d                      Z ed           G d d                      Zd*dZd+dZd,dZd-dZddd.d!Zdd"d/d$Zd%d&d0d)ZdS )1    )annotationsN)	dataclass)datetimetimezone)Path)is_relative_toT)frozenc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )	BackupResultr   backup_filechecksum_filestrsha256int
size_bytesN__name__
__module____qualname____annotations__     \/home/agent/.hermes/worktrees/FinanceManager-sprint23.1/src/jarvis_finance/runtime/backup.pyr   r      s:         KKKOOOOOr   r   c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   d	S )
VerifyBackupResultr   r   r   r   r   boolchecksum_okexistsNr   r   r   r   r   r      sF         KKKLLLLLr   r   c                  .    e Zd ZU ded<   ded<   ded<   dS )RestoreResultr   restored_tosource_filer   verifiedNr   r   r   r   r    r       s1         NNNNNr   r    pathr   returnr   c                   t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                 .                          d          S )Ni   )read)handles   r   <lambda>zsha256_file.<locals>.<lambda>'   s    &++k":": r   r   )hashlibr   openiterupdate	hexdigest)r$   digestchunkr*   s      @r   sha256_filer3   $   s    ^F	4 !F::::C@@ 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'r   r   c                    |                      | j        dz             }|                    | d| j         dd           |S )N.sha256z  
utf-8)encoding)with_suffixsuffix
write_textname)r   r   r   s      r   write_checksum_filer=   ,   sP    ++K,>,JKKM>>+*:>>>QQQr   r   
str | Nonec                    |                                  sd S |                     dd                                          }|sd S |                                d         S )Nr7   ignore)r8   errorsr   )r   	read_textstripsplit)r   texts     r   read_expected_checksumrF   2   s^    !! t""GH"EEKKMMD t::<<?r   	repo_rootNonec                    t          |                                 |                                          rt          d|            d S )Nz8Backup/restore path must be outside the Git repository: )r   resolve
ValueError)r$   rG   s     r   ensure_outside_reporL   ;   sM    dllnni&7&7&9&9:: \ZTXZZ[[[\ \r   )	timestampdb_pathbackups_dirrM   c                   |                                                                  } |                                                                 }t          ||           t          | |           |                                 st	          d|            |                    dd           |p0t          j        t          j	                  
                    d          }|d| dz  }t          j        | |           t          |          }t          ||          }t          ||||                                j                  S )NzRuntime DB not found: Tparentsexist_okz%Y%m%dT%H%M%SZzfinance-runtime-db-z.sqlite3)r   r   r   r   )
expanduserrJ   rL   r   FileNotFoundErrormkdirr   nowr   utcstrftimeshutilcopy2r3   r=   r   statst_size)rN   rO   rG   rM   stampr   checksumr   s           r   backup_runtime_dbr`   @   s:     ""**,,G((**2244KY///+++>> D B B BCCCdT222Nhl33<<=MNNE Ee E E EEK
L+&&&;''H'X>>M###%%-	   r   )rG   Path | Nonec           	        |                                                                  } |t          | |           |                                 o|                                 }|s/t          | |                     | j        dz             ddd          S t          |           }|                     | j        dz             }t          |          }t          | ||t          |o||k              d          S )Nr5    F)r   r   r   r   r   T)rT   rJ   rL   r   is_filer   r9   r:   r3   rF   r   )r   rG   r   actualr   expecteds         r   verify_backuprg   U   s
   ((**2244KK333!!;k&9&9&;&;F 
!#%11+2Dy2PQQ
 
 
 	
 %%F++K,>,JKKM%m44H#8h&&899   r   F)yesrh   r   c                   |st          d          |                                                                 } |                                                                }t          | |           t          ||           t	          | |          }|j        st          d|            |j        st          d|            |j	        
                    dd           t          j        | |           t          || d          S )Nz0Restore requires explicit confirmation via --yes)r   rG   zBackup file not found: z%Backup checksum verification failed: TrQ   )r!   r"   r#   )PermissionErrorrT   rJ   rL   rg   r   rU   r   rK   parentrV   rZ   r[   r    )r   rN   rG   rh   verifications        r   restore_runtime_dbrm   n   s    RPQQQ((**2244K  ""**,,GY///+++ [INNNL I G+ G GHHH# PNNNOOON555
Lg&&&W+PTUUUUr   )r$   r   r%   r   )r   r   r   r   r%   r   )r   r   r%   r>   )r$   r   rG   r   r%   rH   )
rN   r   rO   r   rG   r   rM   r>   r%   r   )r   r   rG   ra   r%   r   )
r   r   rN   r   rG   r   rh   r   r%   r    )
__future__r   r,   rZ   dataclassesr   r   r   pathlibr   jarvis_finance.config.pathsr   r   r   r    r3   r=   rF   rL   r`   rg   rm   r   r   r   <module>rr      s   " " " " " "   ! ! ! ! ! ! ' ' ' ' ' ' ' '       6 6 6 6 6 6 $        $        $                \ \ \ \
 ei      * BF      2 Z_ V V V V V V V Vr   