"""Re-read an authorized source row while preserving its cycle rhythm.""" import argparse import copy import json from pathlib import Path import sys root=Path(__file__).resolve().parents[1] sys.path.insert(0,str(root/'src/backend' if (root/'src/backend').is_dir() else root)) def run(args): import server from cad_rebar_recipe import load_sources from body_source_tie import build_reference_review server.require_modeling_rules() job=json.loads(args.job.read_text());plan=job['result'];working=copy.deepcopy(plan) selected=[g for g in working['rebar_groups'] if g.get('mark')==args.mark and g.get('rebar_block')==args.block] if len(selected)!=1:raise ValueError('selected fabrication row is not unique') target=selected[0];rule=target['source_body_tie_binding']['reference_rule'] for g in working['rebar_groups']:g.pop('quantity_distribution',None) target['quantity_distribution']={'explicit_user_authorization':True,'preserve_cycle_rhythm':True} sources=load_sources(server.rehydrate_drawing_set_analysis(job['sourceContext']['analysis'])) failures=[];groups=build_reference_review(working,sources,rule,authorized=True,failures=failures) generated=[g for g in groups if g['id']==target['id']] if len(generated)!=1:raise ValueError('selected row failed fresh generation: '+str(failures)) result=copy.deepcopy(plan);result['rebar_groups']=[g for g in plan['rebar_groups'] if g.get('id')!=target['id']]+generated result['quantityDistributionReview']={'group_ids':[target['id']],'failures':[],'engineering_approved':False} authorization={'explicit_request':True,'source_sha256':sorted(sources),'marks':[args.mark], 'scope':'user-authorized source cycle rhythm with drawing-N terminal selection'} with args.output.open('x') as stream:json.dump({'result':result,'authorization':authorization},stream,ensure_ascii=False) print(json.dumps({'generated':target['id'],'count':generated[0]['count'],'station_policy':generated[0]['quantity_distribution']['policy']})) if __name__=='__main__': p=argparse.ArgumentParser(description=__doc__);p.add_argument('job',type=Path) p.add_argument('--mark',required=True);p.add_argument('--block',required=True);p.add_argument('--output',type=Path,required=True) run(p.parse_args())