
    j                        d Z ddlm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 ddlmZ ddZdd	Zdd
ZddZddZddZddZ	 	 	 	 	 	 	 	 ddZy)zIPrivate canonical JSON and structural validators for readiness artifacts.    )annotationsN)Mapping)Path)cast)DIGEST_PATTERNc                    | j                         D ci c]  \  }}|dk7  s|| }}}t        j                  |ddd      j                  d      }t	        j
                  |      j                         S c c}}w )NdigestF),:T)ensure_ascii
separators	sort_keysutf-8)itemsjsondumpsencodehashlibsha256	hexdigest)documentkeyvaluepayloadencodeds        /home/cube/projects/richard/traning coach/task-12-independent-verification-r9/build/hermes-full/dualcoach/profile/checkin_cli/nutrition_readiness_io.pycanonical_digestr      su    ,4NN,<P,<jc5xsEz,<GPjj	
 fWo  >>'",,.. Qs
   A5A5c                   	 | j                  d      }| j                         s|j                  |      sy |j                         }|j	                         r1|j
                  dk7  s"t        j                  |j                        dz  ry t        t        t        j                  |j                  d                  }t!        |t"              rt        t$        t&        t        f   |      S d S # t        t        t        j                  f$ r Y y w xY w)NT)strict   ?   r   )encoding)resolve
is_symlinkis_relative_tostatis_filest_nlinkS_IMODEst_moder   objectr   loads	read_textOSError
ValueErrorJSONDecodeError
isinstancedictr   str)pathrootresolvedinfoparseds        r   load_documentr9      s    <<t<,??H$;$;D$A}}  "}}!||DLL)E1fdjj););W);)MNO 2<FD1I4V$f-StS Z!5!56 s   3C* AC* 3C* *D
Dc                    | j                  d      }t        |t              xr' t        j                  |      d uxr |t        |       k(  S )Nr	   )getr1   r3   r   	fullmatchr   )r   declareds     r   valid_digestr>   ,   sJ    ||H%H8S! 	3$$X.d:	3(22    c                $    |j                  |       S N)issubset)r   fieldss     r   requiredrD   5   s    ??8$$r?   c                b    t        | t        t        f      xr t        | t               xr | dkD  S )Nr   )r1   intfloatbool)r   s    r   positive_numberrI   9   s3    53,' 	5$''	AIr?   c                X    t        |       xr |t        t        |       cxk  xr |k  S c S rA   )rI   r   rG   )r   minimummaximums      r   number_in_rangerM   A   s)    5!NgeU1C&Nw&NN&NNr?   c                   t        | t              r| syt        t        t           |       D ]  }t        |t              s yt        t
        t        t        f   |      }|j                  d      rZ|j                  d      dvsG|j                  d      r6|j                  d      r%t        |j                  d      t              r|d   r y y)	NFrule_idaction>   informexcluderequire_human_reviewseverityapplicability
source_idsT)r1   listr   r+   r2   r   r3   r;   )r   	candidaterules      r   valid_rule_listrZ   E   s    eT"%$v,.	)T*GCK()4#xx!)VV88J'88O,dhh|4d;% / r?   c                   t        | t              syt        t        t           |       }t	        |      dk7  s7t        |      r,t        |      r!t        t        |      t        t        |      k\  ryt        |d      D ]  \  }}t        |t              s yt        t        t        t        f   |      }|j                  d      |k7  r y|j                  d      }t        |      rt        |j                  d            rmt        |j                  d            rSt        |j                  d	            r9t        t        |      t        t        |      cxk  rt        t        |      k  r y  y y
)NF   r    )startweekcalories_kcal	protein_gcarbohydrate_gfat_gT)r1   rW   r   r+   lenrI   rG   	enumerater2   r   r3   r;   )weeksminimum_caloriesmaximum_calories
week_itemsexpected_weekrX   itemcaloriess           r   valid_week_targetsrl   X   s/   
 eT"d6lE*JJ2/0/0'(D8H,II$-j$B y)T*GCK()488F},88O,)"488K#89"488,<#=>"488G#45/0E8$-E+,- 	- ! %C" r?   )r   Mapping[str, object]returnr3   )r4   r   r5   r   rn   zMapping[str, object] | None)r   rm   rn   rH   )r   rm   rC   zfrozenset[str]rn   rH   )r   r+   rn   rH   )r   r+   rK   rG   rL   rG   rn   rH   )re   r+   rf   r+   rg   r+   rn   rH   )__doc__
__future__r   r   r   r&   collections.abcr   pathlibr   typingr   (checkin_cli.nutrition_readiness_contractr   r   r9   r>   rD   rI   rM   rZ   rl    r?   r   <module>rv      sn    O "    #   C/T$%O&      
	 r?   