Ë
    ñil  ã                  óv  — d Z ddlmZ ddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZmZmZmZ  ej&                  «       Z e	e«      j,                  j,                  dz  Zej1                  d	¬
«       edz  Zedz  Zdd„Zdd„Zdd„Zddd„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&d'd„Z'y)(z}
services/store.py
Simple async-safe JSON file store for scenarios and sessions.
Replace with a real database in production.
é    )ÚannotationsN)ÚdatetimeÚtimezone)ÚPath)ÚDictÚListÚOptional)ÚScenarioÚScenarioCreateÚScenarioUpdateÚSessionStateÚdataT)Úexist_okzscenarios.jsonzsessions.jsonc                 ód   — t        j                  t        j                  «      j	                  «       S ©N)r   Únowr   ÚutcÚ	isoformat© ó    úi/Users/priyanka/Documents/AI_Agent_Assessment/pepole_hub_candidate/people_hub_candidate/services/store.pyÚ_nowr      s   € Ü�<‰<œŸ™Ó%×/Ñ/Ó1Ð1r   c              ƒ  ó  K  — t         4 ƒd {  –—†  | j                  «       sg cd d d «      ƒd {  –—†  S t        j                  | j	                  d¬«      «      cd d d «      ƒd {  –—†  S 7 Œ]7 Œ=7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w­w)Núutf-8©Úencoding)Ú_LOCKÚexistsÚjsonÚloadsÚ	read_text)Úpaths    r   Ú_readr#      sO   è ø€ ßŽuØ�{‰{Œ}Ø÷ �u‰uô �z‰z˜$Ÿ.™.°'˜.Ó:Ó;÷ �uŠuøˆuøˆuø�u�u‰uüs^   ‚B�A+ŽB‘A1£B¯A-°Bµ$A1ÁBÁ%A/Á&BÁ-BÁ/BÁ1BÁ7A:Á8BÁ?Bc              ƒ  óÎ   K  — t         4 ƒd {  –—†  | j                  t        j                  |dd¬«      d¬«       d d d «      ƒd {  –—†  y 7 Œ>7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)NFé   )Úensure_asciiÚindentr   r   )r   Ú
write_textr   Údumps)r"   r   s     r   Ú_writer*   #   s<   è ø€ ßŽuØ�‰œŸ
™
 4°eÀAÔFÐQXˆÔY÷ �u‰uøˆuø�u�u‰uüsC   ‚A%�AŽA%‘*A»A%ÁAÁA%ÁA%ÁA"ÁAÁA"ÁA%c              ƒ  óÎ   K  — t        t        «      ƒ d {  –—† }| r$|D �cg c]  }|j                  d«      | k(  sŒ|‘Œ }}|D �cg c]  }t        di |¤Ž‘Œ c}S 7 ŒCc c}w c c}w ­w)NÚstatusr   ©r#   Ú_SCENARIOS_FILEÚgetr
   )r,   ÚrowsÚrs      r   Úlist_scenariosr2   *   s_   è ø€ Ü”Ó'×'€DÙÙÓ=™4�a 1§5¡5¨£?°fÓ#<’˜4ˆÐ=Ù#'Ó(¡4˜aŒH‰M�q‹M 4Ñ(Ð(ð (úâ=ùÚ(ùs0   ‚A%•A–
A% AºA¾A%ÁA ÁA%Á
A%c              ƒ  óŽ   K  — t        t        «      ƒ d {  –—† }|D ]#  }|j                  d«      | k(  sŒt        di |¤Žc S  y 7 Œ-­w)NÚidr   r-   )Úsidr0   r1   s      r   Úget_scenarior6   1   sC   è ø€ Ü”Ó'×'€DÛˆØ�5‰5�‹;˜#ÓÜ‘=˜a‘=Ò ð ð ð	 (úó   ‚A•A–A´Ac              ƒ  óN  K  — t        t        «      ƒ d {  –—† }t        di | j                  «       ¤t	        t        j                  «       «      dddt        «       t        «       dœ¤Ž}|j                  d|j                  «       «       t        t        |«      ƒ d {  –—†  |S 7 Œ‹7 Œ­w)NÚdraftr   g        )r4   r,   ÚcompletionsÚ	avg_scoreÚ
created_atÚ
updated_atr   )
r#   r.   r
   Ú
model_dumpÚstrÚuuidÚuuid4r   Úinsertr*   )Úbodyr0   Úrecords      r   Úcreate_scenariorE   9   s‹   è ø€ Ü”Ó'×'€DÜñ Ø
�/‰/Ó
ðäŒt�z‰z‹|ÓØØØÜ“6Ü“6ó€Fð 	‡K�K��6×$Ñ$Ó&Ô'Ü
” $Ó
'×'Ð'Ø€Mð (øð (ús"   ‚B%•B!–BB%ÂB#ÂB%Â#B%c              ƒ  ót  K  — t        t        «      ƒ d{  –—† }|D �cg c]#  }|j                  d«      | j                  k7  sŒ"|‘Œ% }}| j	                  «       }t        «       |d<   |j                  d«      st        «       |d<   |j                  d|«       t        t        |«      ƒ d{  –—†  | S 7 Œ™c c}w 7 Œ­w)zßInsert-or-replace a Scenario keyed on its `id`. Used by the external
    role-play bridge to persist scenarios that arrive inline from the browser
    so the existing WS code (which loads from the local store) can use them.Nr4   r=   r<   r   )r#   r.   r/   r4   r>   r   rB   r*   )Úscenarior0   r1   Úpayloads       r   Úupsert_scenariorI   I   sž   è ø€ ô ”Ó'×'€DÙÓ:‘t�!˜qŸu™u T›{¨h¯k©kÓ9ŠA�t€DÐ:Ø×!Ñ!Ó#€GÜ ›F€GˆLÑØ�;‰;�|Ô$Ü $£ˆ�ÑØ‡K�K��7ÔÜ
” $Ó
'×'Ð'Ø€Oð (úÚ:ð (ús3   ‚B8•B/–B8ž#B1ÁB1ÁA"B8Â(B6Â)B8Â1B8c              ƒ  ó&  K  — t        t        «      ƒ d {  –—† }t        |«      D ]d  \  }}|j                  d«      | k(  sŒi |¥|j	                  «       ¥| t        «       dœ¥}|||<   t        t        |«      ƒ d {  –—†  t        di |¤Žc S  y 7 Œw7 Œ­w©Nr4   )r4   r=   r   )r#   r.   Ú	enumerater/   r>   r   r*   r
   )r5   rC   r0   Úir1   Úupdateds         r   Úupdate_scenariorO   X   s‹   è ø€ Ü”Ó'×'€DÜ˜$–‰ˆˆ1Ø�5‰5�‹;˜#ÓØQ˜ÐQ˜dŸo™oÓ/ÐQ°sÌ$Ë&ÒQˆGØˆD�‰GÜœ¨$Ó/×/Ð/ÜÑ&˜gÑ&Ò&ð  ð ð (øð
 0ús'   ‚B•B–)BÁ 9BÁ9BÁ:BÂBc              ƒ  ó
  K  — t        t        «      ƒ d {  –—† }t        |«      D ]V  \  }}|j                  d«      | k(  sŒi |¥|¥| t	        «       dœ¥}|||<   t        t        |«      ƒ d {  –—†  t        di |¤Žc S  y 7 Œi7 Œ­wrK   )r#   r.   rL   r/   r   r*   r
   )r5   Úpatchr0   rM   r1   rN   s         r   Úpatch_scenariorR   c   s„   è ø€ Ü”Ó'×'€DÜ˜$–‰ˆˆ1Ø�5‰5�‹;˜#ÓØE˜ÐE˜eÐE¨3¼d»fÒEˆGØˆD�‰GÜœ¨$Ó/×/Ð/ÜÑ&˜gÑ&Ò&ð  ð ð (øð
 0ús'   ‚B•A?–)BÁ +BÁ+BÁ,BÂBc              ƒ  óô   K  — t        t        «      ƒ d {  –—† }|D �cg c]  }|j                  d«      | k7  sŒ|‘Œ }}t        |«      t        |«      k(  ryt	        t        |«      ƒ d {  –—†  y7 ŒYc c}w 7 Œ­w)Nr4   FT)r#   r.   r/   Úlenr*   )r5   r0   r1   Únews       r   Údelete_scenariorV   n   si   è ø€ Ü”Ó'×'€DÙÓ
1‘d�˜aŸe™e D›k¨SÓ0Š1�d€CÐ
1Ü
ˆ3ƒx”3�t“9ÒØÜ
” #Ó
&×&Ð&Øð (úÚ
1ð 'ús0   ‚A8•A/–A8žA1¸A1¼-A8Á)A6Á*A8Á1A8c              ƒ  ó  K  — t        t        «      ƒ d {  –—† }|D �cg c]#  }|j                  d«      | j                  k7  sŒ"|‘Œ% }}|j	                  d| j                  «       «       t        t        |«      ƒ d {  –—†  y 7 Œkc c}w 7 Œ­w)NÚ
session_idr   )r#   Ú_SESSIONS_FILEr/   rX   rB   r>   r*   )Úsessionr0   r1   s      r   Úsave_sessionr[   y   so   è ø€ Ü”~Ó&×&€DáÓI‘t�!˜qŸu™u \Ó2°g×6HÑ6HÓHŠA�t€DÐIØ‡K�K��7×%Ñ%Ó'Ô(Ü
” Ó
&×&Ñ&ð	 'úâIà&ús2   ‚B
•B–B
ž#BÁBÁ5B
Á;BÁ<B
ÂB
c              ƒ  óŽ   K  — t        t        «      ƒ d {  –—† }|D ]#  }|j                  d«      | k(  sŒt        di |¤Žc S  y 7 Œ-­w)NrX   r   )r#   rY   r/   r   )rX   r0   r1   s      r   Úget_sessionr]   �   sF   è ø€ Ü”~Ó&×&€DÛˆØ�5‰5�Ó *Ó,ÜÑ$ !Ñ$Ò$ð ð ð	 'úr7   c               ƒ  ó<   K  — t        t        «      ƒ d {  –—† S 7 Œ­wr   )r#   rY   r   r   r   Úlist_sessionsr_   ‰   s   è ø€ Ü”~Ó&×&Ð&Ð&ús   ‚•–)Úreturnr?   )r"   r   r`   Úlist)r"   r   r   ra   r`   ÚNoner   )r,   zOptional[str]r`   zList[Scenario])r5   r?   r`   úOptional[Scenario])rC   r   r`   r
   )rG   r
   r`   r
   )r5   r?   rC   r   r`   rc   )r5   r?   rQ   Údictr`   rc   )r5   r?   r`   Úbool)rZ   r   r`   rb   )rX   r?   r`   zOptional[SessionState])r`   ra   )(Ú__doc__Ú
__future__r   Úasyncior   r@   r   r   Úpathlibr   Útypingr   r   r	   Úmodels.schemasr
   r   r   r   ÚLockr   Ú__file__ÚparentÚ	_DATA_DIRÚmkdirr.   rY   r   r#   r*   r2   r6   rE   rI   rO   rR   rV   r[   r]   r_   r   r   r   Ú<module>rq      s¶   ðñõ
 #Û Û Û ß 'Ý ß 'Ñ 'ç QÓ Qàˆ�‰‹€Ù�‹N×!Ñ!×(Ñ(¨6Ñ1€	Ø 	‡�˜€Ô àÐ.Ñ.€Ø˜oÑ-€ó
2ó<óZô)óóó óóóó'óô'r   