import sys,json from pathlib import Path from read_links import P,connect,encode result=json.loads((P/'result.json').read_text(encoding='utf8')) before=json.loads(Path(result['backup']).read_text(encoding='utf8')) plan=json.loads((P/'plan.json').read_text(encoding='utf8')) expected={t:{r['id']:dict(r) for r in rows} for t,rows in before.items()} for r in plan['changes']:expected[r['table']][r['id']][r['field']]=r['after'] c=connect(sys.stdin.readline().strip()) try: with c.cursor() as q: q.execute("SET time_zone='+08:00'");q.execute('SELECT NOW() now');now=q.fetchone()['now'] after={} for t in before: q.execute('SELECT * FROM `'+t+'` WHERE deleted=0 ORDER BY id');after[t]={r['id']:r for r in q.fetchall()} assert encode(after[t])==encode(expected[t]),'Unexpected source or unrelated field change: '+t customers=after['crm_customer'];missing={} for t in ('mes_pro_mps','mes_pro_work_order','mes_pro_task'): bad=[r['id'] for r in after[t].values() if r['client_id'] not in customers] assert not bad,(t,bad);missing[t]=len(bad) for task in after['mes_pro_task'].values(): wo=after['mes_pro_work_order'].get(task['work_order_id']) assert wo and task['client_id']==wo['client_id'],'Task/work order mismatch' for mps in after['mes_pro_mps'].values(): order=after['erp_sale_order'].get(mps['sale_order_id']) if order:assert mps['client_id']==order['customer_id'] wo=after['mes_pro_work_order'].get(mps['work_order_id']) if wo:assert mps['client_id']==wo['client_id'] for batch in after['mes_wm_batch'].values(): if batch['work_order_id'] in after['mes_pro_work_order']: assert batch['client_id']==after['mes_pro_work_order'][batch['work_order_id']]['client_id'],'Batch/work order mismatch' passed={'passed':True,'verified_at':str(now),'updated':len(plan['changes']), 'production_customer_missing':missing,'order_mps_workorder_task_batch_consistent':True, 'only_client_id_changed':True,'customer_rows_not_added_or_modified':True, 'unresolved_oqc':len(plan['unresolved']),'unallocated_stock_batches':len(plan['unallocated_stock_batches'])} (P/'verification.json').write_text(encode(passed),encoding='utf8');print(encode(passed)) finally:c.close()