
    j	                        d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZ ddZ	 	 	 	 	 	 dd	Z	 	 	 	 	 	 	 	 	 	 	 	 dd
Z	 	 	 	 	 	 	 	 ddZy)z.Redacted workflow-session persistence helpers.    )annotations)Path)validate_authorityvalidate_route)QUESTION_FIELDSMessageEvidenceOnboardingAuthorityOnboardingStatuscanonical_digest)atomic_write_private_jsonread_private_json)OnboardingStatec                ^    | j                  d      }t        |t              st        d      |S )Ncursorzinvalid onboarding cursor)get
isinstanceint
ValueError)documentr   s     y/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/dualcoach/profile/checkin_cli/nutrition_onboarding_session.pysession_cursorr      s+    \\(#Ffc"455M    c                   t        |      }t        t        |d               }t        | |||t        j                  u r|t        t              k  r	t        |   nd |j                  d      t        |j                  d                  S )Nstatebaseline_digestowner_reviewed)customer_keyr   answer_count
next_fieldr   r   )	r   r   strr
   
COLLECTINGlenr   r   bool)r   r   r   r   s       r   build_statusr$      s    
 H%FC 123E! 222vO@T7T F# %67HLL)9:; r   c                :   t        ||       t        |||       t        |       }t        |j	                  d            }|j                  d      |k7  rt        d      |j                  d      }t        |t              r|j                  |v rt        d      |S )	N)r   )rolejson)modeauthority_digestzonboarding authority is staleconsumed_updateszduplicate onboarding update)
r   r   r   r   
model_dumpr   r   r   list	update_id)session_pathr   	authorityevidencer&   r   expectedconsumeds           r   load_mutable_sessionr3   /   s     y|<9hT2 .H	 4 4& 4 ABH||&'83899||./Hh%););x)G677Or   c                    |d   }t        |t              st        d      |j                  |j                         t        | |       y )Nr*   zinvalid consumed updates)r   r,   r   appendr-   r   )r.   r   r0   r2   s       r   save_sessionr6   C   sA     *+Hh%344OOH&&'lH5r   N)r   dict[str, object]returnr   )r   r    r   r7   r8   r
   )r.   r   r   r    r/   r	   r0   r   r&   r    r8   r7   )r.   r   r   r7   r0   r   r8   None)__doc__
__future__r   pathlibr   *checkin_cli.nutrition_onboarding_authorityr   r   )checkin_cli.nutrition_onboarding_contractr   r   r	   r
   r   #checkin_cli.nutrition_onboarding_fsr   r   'checkin_cli.nutrition_onboarding_modelsr   r   r$   r3   r6    r   r   <module>rB      s    4 "  Y  ] C   	*  #	
   (
6
6  
6 	
6
 

6r   