
    ocj;                        d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZ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mZ dZdZddZddZddZddZddZddZd dZedk    r e             dS dS )!    )annotationsN)Path)load_settings)apply_migrationsget_schema_version(480d7a1b72a950e864c4bb021d3f58af8f8c15f9)   pathr   returnc                    |                                  }|t          d          k    st          d          |j        vrt          d|           |S )Nz/tmpz%CI path must be isolated below /tmp: )resolver   parentsRuntimeError)r
   resolveds     #scripts/ci_portfolio_phase3_gate.py_assert_tmp_pathr      sO    ||~~H4<<4<<x7G#G#GM8MMNNNO    sqlite3.Connectionc                P    t          j        |           }t           j        |_        |S )N)sqlite3connectRowrow_factory)r
   
connections     r   _connectr      s!    &&J$[Jr   r   strc                v    t          |                     d                                          d                   S )NzPRAGMA integrity_checkr   )r   executefetchone)r   s    r   
_integrityr    "   s0    z!!":;;DDFFqIJJJr   c                   i }dD ]}d |                      d| d          D             |                      d| dd                    d D                       z                                             }fd	|D             ||<   t          j        |d
dt
                                                    }t          j        |          	                                S )N)	platformsaccountsc                    g | ]
}|d          S )    ).0rows     r   
<listcomp>z _seed_digest.<locals>.<listcomp>)   s    YYYc3q6YYYr   zPRAGMA table_info("z")zSELECT * FROM "z" ORDER BY z, c              3  "   K   | ]
}d | d V  dS )"Nr&   )r'   columns     r   	<genexpr>z_seed_digest.<locals>.<genexpr>+   s*      <a<av]]]]<a<a<a<a<a<ar   c                .    g | ]fd D             S )c                     g | ]
}|         S r&   r&   )r'   r,   r(   s     r   r)   z+_seed_digest.<locals>.<listcomp>.<listcomp>-   s    ===63v;===r   r&   )r'   r(   columnss    @r   r)   z _seed_digest.<locals>.<listcomp>-   s/    NNN#====W===NNNr   T),:)ensure_ascii
separatorsdefault)
r   joinfetchalljsondumpsr   encodehashlibsha256	hexdigest)r   payloadtablerowsencodedr0   s        @r   _seed_digestrB   &   s    -/G* O OYYZ%7%78We8W8W8W%X%XYYY!!0e000499<a<aY`<a<a<a3a3aa
 

(** 	 ONNNNNNjt
TWXXX__aaG>'"",,...r   repo
export_dirdatabaseNonec                   t          j        ddt          |           dt          g          }|                    d           t          j        t          j        |          d          5 }|	                                D ]`}||j
        z                                  }|                                |j        vr'||                                k    rt          d          a|                    |           d d d            n# 1 swxY w Y   d	}t          j                                        }t          |d
z            |d<   t          j        t&          j        d|t          |          g||d           d S )Ngitz-CarchiveTr   zr:)fileobjmodezUnsafe path in Git archivea  
import sqlite3
import sys
from jarvis_finance.storage.migrations import apply_migrations, get_schema_version

path = sys.argv[1]
conn = sqlite3.connect(path)
conn.row_factory = sqlite3.Row
apply_migrations(conn)
assert get_schema_version(conn) == 40
conn.execute(
    "INSERT INTO platforms(platform_id,name,platform_type,country,default_currency,is_active,notes,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?)",
    ("ci-platform", "Synthetic CI Platform", "bank", "CH", "CHF", 1, "synthetic", "2026-01-01T00:00:00Z", None),
)
conn.execute(
    "INSERT INTO accounts(account_id,platform_id,account_name,account_type,currency,performance_included,is_health_reserve,is_active,notes,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?)",
    ("ci-account", "ci-platform", "Synthetic CI Account", "brokerage", "CHF", 1, 0, 1, "synthetic", "2026-01-01T00:00:00Z", None),
)
conn.commit()
assert conn.execute("PRAGMA integrity_check").fetchone()[0] == "ok"
print("sprint5_fixture_schema=40")
src
PYTHONPATHz-c)cwdenvcheck)
subprocesscheck_outputr   SPRINT5_COMMITmkdirtarfileopenioBytesIO
getmembersnamer   r   r   
extractallosenvironcopyrunsys
executable)	rC   rD   rE   rI   bundlememberdestinationcodeenvironments	            r   _create_sprint5_databaserh   2   s   %udCIIy.&YZZGT"""	bj11	=	=	= &'')) 	A 	AF%3<<>>K!!##;+>>>;R\RdRdRfRfCfCf"#?@@@*%%%& & & & & & & & & & & & & & &D, *//##K #J$6 7 7KN	tS]]3	     s   *BDDDrootc                $   dt          |dz            t          |dz            d}t          | |          }|j        |dz                                  k    sJ dddd}	 t          | |           t	          d          # t
          $ r Y d S w xY w)	Ntestzguard-runtimezguard.sqlite3)JARVIS_FINANCE_ENVJARVIS_FINANCE_RUNTIME_DIRJARVIS_FINANCE_DB_PATH)	repo_rootr^   z)/home/agent/jarvis_runtime/finance-systemz>/home/agent/jarvis_runtime/finance-system/data/finance.sqlite3z/Productive paths were not rejected in test mode)r   r   db_pathr   AssertionError
ValueError)rC   ri   acceptedsettingsrejecteds        r   _verify_settings_guardrv   [   s    $&)$*@&A&A"%d_&<"="= H
 tX>>>H 6??AAAAAA %&Q"b H
Ph7777 NOOO    s   !B 
BBc                   	 t          t                                                    j        d         } t	          t          t
          j                            dd                              }|                                rt          j
        |           |                    d           t          | |           |dz  }t          |          }t          |           |                                 t!          |          t"          k    sJ t%          |          dk    sJ dD ]9}|                    d	| d
                                          d         dk    sJ :|                                 |dz  }t-          | |dz  |           t          |          	t!          	          dk    sJ t/          	          }	fddD             }t          	           	                                 t!          	          t"          k    sJ t%          	          dk    sJ t/          	          |k    sJ 	fd|D             }||k    sJ dD ]9}	                    d	| d
                                          d         dk    sJ :	                                 t1          d           t1          d           t1          d|            t1          d           d S )Nr%   JARVIS_FINANCE_CI_ROOTz/tmp/financemanager-phase3-ciTrJ   zempty.sqlite3ok)portfolio_ingestion_batchesportfolio_ingestion_itemsSELECT COUNT(*) FROM "r+   r   zsprint5.sqlite3zsprint5-source(   c                t    i | ]4}|                     d | d                                          d         5S r|   r+   r   r   r   r'   r?   sprint5s     r   
<dictcomp>zmain.<locals>.<dictcomp>   sT        	w@@@@AAJJLLQO  r   )r"   r#   transactionsportfolio_valuation_snapshotsc                t    i | ]4}|                     d | d                                          d         5S r   r   r   s     r   r   zmain.<locals>.<dictcomp>   sT        	w@@@@AAJJLLQO  r   zphase3_migration_gate=PASSz-empty_schema=41 integrity=ok ingestion_rows=0z1sprint5_schema=40_to_41 integrity=ok seed_digest=z2settings_guard=PASS production_paths_rejected=true)r   __file__r   r   r   r]   r^   getexistsshutilrmtreerU   rv   r   r   commitr   EXPECTED_SCHEMAr    r   r   closerh   rB   print)
rC   ri   
empty_pathemptyr?   sprint5_pathdigest_beforecounts_beforecounts_afterr   s
            @r   mainr   q   s   >>!!##+A.DD0HJi!j!jkkllD{{}} dJJtJ4&&&'JZ  EU	LLNNNe$$7777e$$$$M S S}}>e>>>??HHJJ1MQRRRRRR	KKMMM++LT4*:#:LIII|$$Gg&&",,,, ))M   _  M WNNg&&/9999g$&&&&  M1111   "  L =((((M U U@@@@AAJJLLQOSTTTTTTMMOOO	
&'''	
9:::	
Mm
M
MNNN	
>?????r   __main__)r
   r   r   r   )r
   r   r   r   )r   r   r   r   )rC   r   rD   r   rE   r   r   rF   )rC   r   ri   r   r   rF   )r   rF   )
__future__r   r;   rX   r8   r]   r   r   rR   ra   rV   pathlibr   jarvis_finance.config.settingsr   !jarvis_finance.storage.migrationsr   r   rT   r   r   r   r    rB   rh   rv   r   __name__r&   r   r   <module>r      so   " " " " " "  				  				       



        8 8 8 8 8 8 R R R R R R R R;      K K K K	/ 	/ 	/ 	/& & & &RP P P P,-@ -@ -@ -@` zDFFFFF r   