+
    \Pîi©  ã                  ó  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
 ^ RIHt / tR]R&   R R	 ltR
 R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR"R R lltR  R! ltR# )#u~   
utils/json_db.py â€” Thread-safe JSON file storage
Same interface as a real DB layer â€” swap later without touching routes.
)ÚannotationsN)ÚdatetimeÚtimezone)ÚPath)ÚAnyzdict[str, threading.Lock]Ú_locksc               ó    € V ^8„  d   QhRRRR/# )é   Úpathr   Úreturnzthreading.Lock© )Úformats   "Ú2D:\Python_Codes\gen_ai\people_hub\utils\json_db.pyÚ__annotate__r      s   € ÷ ñ �ð ˜ñ ó    c                óœ   € \        V P                  4       4      pV\        9  d   \        P                  ! 4       \        V&   \        V,          # ©N)ÚstrÚresolver   Ú	threadingÚLock)r
   Úkeys   & r   Ú_lockr      s4   € Ü
ˆd�l‰l‹nÓ
€CØ
”&ÔÜ—n’nÓ&Œˆs‰Ü�#�;Ðr   c               ó    € V ^8„  d   QhRRRR/# ©r	   r
   r   r   ú
list[dict]r   )r   s   "r   r   r      s   € ÷ 	ñ 	�ð 	˜ñ 	r   c                óp  € V P                   P                  R R R7       V P                  4       '       g   . #  \        V RR7      ;_uu_ 4       p\        P
                  ! V4      p\        V\        4      '       d   TM. uuRRR4       #   + '       g   i     R# ; i  \        P                   d    . u # i ; i)T©ÚparentsÚexist_okúutf-8©ÚencodingN)	ÚparentÚmkdirÚexistsÚopenÚjsonÚloadÚ
isinstanceÚlistÚJSONDecodeError)r
   ÚfÚdatas   &  r   Ú_readr.      s…   € Ø‡K�K×Ñ˜d¨TÐÔ2Ø�;‰;�=Š=Øˆ	ðÜ�$ ×)Õ)¨QÜ—9’9˜Q“<ˆDÜ% d¬D×1Ò1‘4°r÷ *×)×)Ó)ûô ×Ñô ØŠ	ðús/   ·B Á0BÁ<
B ÂB	ÂB ÂB ÂB5Â4B5c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r
   r   Úrecordsr   r   ÚNoner   )r   s   "r   r   r      s!   € ÷ ñ �ð  
ð ¨tñ r   c           
     ó$  € V P                   P                  R R R7       V P                  R4      p\        VRRR7      ;_uu_ 4       p\        P
                  ! W^\        RR7       RRR4       VP                  V 4       R#   + '       g   i     L#; i)	Tr   z.tmpÚwr    r!   F)ÚindentÚdefaultÚensure_asciiN)r#   r$   Úwith_suffixr&   r'   Údumpr   Úreplace)r
   r0   Útmpr,   s   &&  r   Ú_writer;      sf   € Ø‡K�K×Ñ˜d¨TÐÔ2Ø
×
Ñ
˜6Ó
"€CÜ	ˆc�3 ×	)Õ	)¨QÜ�	Š	�' Q´À%ÕH÷ 
*à‡K�K�Ö÷ 
*×	)ús   ÁA?Á?B	c               ó   € V ^8„  d   QhRR/# ©r	   r   r   r   )r   s   "r   r   r   %   s   € ÷ 2ñ 2�ñ 2r   c                 óf   € \         P                  ! \        P                  4      P	                  4       # r   )r   Únowr   ÚutcÚ	isoformatr   r   r   Únow_isorB   %   s   € Ü�<Š<œŸ™Ó%×/Ñ/Ó1Ð1r   c               ó   € V ^8„  d   QhRR/# r=   r   )r   s   "r   r   r   (   s   € ÷ ñ �ñ r   c                 ó>   € \        \        P                  ! 4       4      # r   )r   ÚuuidÚuuid4r   r   r   Únew_idrG   (   s   € ÜŒt�zŠz‹|ÓÐr   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r   +   s   € ÷ !ñ !�4ð !˜Jñ !r   c                óŽ   € \        V 4      ;_uu_ 4        \        \        V 4      4      uuR R R 4       #   + '       g   i     R # ; ir   )r   r*   r.   )r
   s   &r   Úfind_allrJ   +   s#   € Ü	ˆt��Ü”E˜$“KÓ ÷ 
��‹ús	   ”3³A	c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r
   r   Úfiltersr   r   údict | Noner   )r   s   "r   r   r   /   s!   € ÷ ñ �4ð  Cð ¨Kñ r   c                ór  a€ \        V 4      ;_uu_ 4        \        V 4       Fv  o\        ;QJ d-    V3R  lVP                  4        4       F  '       d   K   RM"	  RM! V3R  lVP                  4        4       4      '       g   Ka  \	        S4      u uuRRR4       # 	  RRR4       R#   + '       g   i     R# ; i)c              3  óP   <"  € T F  w  rSP                  V4      V8H  x € K  	  R # 5ir   ©Úget)Ú.0ÚkÚvÚrecs   &  €r   Ú	<genexpr>Úfind_one.<locals>.<genexpr>2   s   øé € Ð?©¡t q�3—7‘7˜1“: –?«ùó   ƒ#&FTN©r   r.   ÚallÚitemsÚdict)r
   rL   rU   s   &,@r   Úfind_oner]   /   sm   ø€ Ü	ˆt��Ü˜–;ˆCß‹sÔ?¨w¯}©}¬Ó?�s�sŠsÔ?¨w¯}©}¬Ó?×?Ô?Ü˜C“yÑ ÷ 
ŠÙ÷ 
ñ ÷	 
Žñ ús   •<B%Á)B%ÂB%ÂB%Â%B6	c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r
   r   rL   r   r   r   r   )r   s   "r   r   r   6   s&   € ÷ Cñ C�Dð C Sð C¨Zñ Cr   c           
     óx  a€ \        V 4      ;_uu_ 4        \        V 4       Uau. uFl  o\        ;QJ d-    V3R  lVP                  4        4       F  '       d   K   RM"	  RM! V3R  lVP                  4        4       4      '       g   Ka  \	        S4      NKn  	  upuuRRR4       # u upi   + '       g   i     R# ; i)c              3  óP   <"  € T F  w  rSP                  V4      V8H  x € K  	  R # 5ir   rP   )rR   rS   rT   Úrs   &  €r   rV   Úfind_many.<locals>.<genexpr>9   s   øé € ÐA±©¨�q—u‘u˜Q“x 1–}³ùrX   FTNrY   )r
   rL   ra   s   &,`r   Ú	find_manyrc   6   sr   ø€ Ü	ˆt��Ü!& t¤ô C¡˜Aß“3ÔA°·±´ÓA—3—3’3ÔA°·±´ÓA×Aô ”�Q–¡ñ C÷ 
ŠùòC÷ 
�ˆús-   •B(¤B#´"B#Á)B#ÂB#ÂB(Â#B(Â(B9	c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r
   r   Ú	record_idr   r   rM   r   )r   s   "r   r   r   ;   s!   € ÷ ñ �Tð  cð ¨kñ r   c                óä   € \        V 4      ;_uu_ 4        \        V 4       F0  pVP                  R 4      V8X  g   K  \        V4      u uuRRR4       # 	  RRR4       R#   + '       g   i     R# ; i)ÚidN)r   r.   rQ   r\   )r
   re   rU   s   && r   Ú
find_by_idrh   ;   sO   € Ü	ˆt��Ü˜–;ˆCØ�w‰w�t‹} 	Ö)Ü˜C“yÑ ÷ 
ŠÙ÷ 
ñ ÷	 
Žñ ús   ”"A»AÁAÁA/	c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r
   r   Úrecordr\   r   r   )r   s   "r   r   r   B   s!   € ÷ ñ �ð ˜tð ¨ñ r   c                óf  € \        V 4      ;_uu_ 4        \        V 4      pVP                  R \        4       4       VP                  R\	        4       4       VP                  R\	        4       4       VP                  V4       \        W4       \        V4      uuRRR4       #   + '       g   i     R# ; i)rg   Ú
created_atÚ
updated_atN)r   r.   Ú
setdefaultrG   rB   Úappendr;   r\   )r
   rj   r0   s   && r   Úinsertrp   B   sq   € Ü	ˆt��Ü˜“+ˆØ×Ñ˜$¤£Ô)Ø×Ñ˜,¬«	Ô2Ø×Ñ˜,¬«	Ô2Ø�‰�vÔÜˆtÔÜ�F‹|÷ 
��‹ús   ”B BÂB0	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r	   r
   r   re   r   Úupdatesr\   r   rM   r   )r   s   "r   r   r   L   s(   € ÷ ñ �ð  #ð °ð ¸ñ r   c                óH  € \        V 4      ;_uu_ 4        \        V 4      p\        V4       FW  w  rEVP                  R 4      V8X  g   K  / VCVCR\	        4       /CW4&   \        W4       \        W4,          4      u uuRRR4       # 	  RRR4       R#   + '       g   i     R# ; i)rg   rm   N)r   r.   Ú	enumeraterQ   rB   r;   r\   )r
   re   rr   r0   ÚirU   s   &&&   r   Úupdaterv   L   s€   € Ü	ˆt��Ü˜“+ˆÜ Ö(‰FˆAØ�w‰w�t‹} 	Ö)ØH ÐH wÐH°¼g»iÑH�‘
Ü�tÔ%Ü˜G�JÓ'Ñ'÷ 
Šá(÷ 
ñ ÷ 
Žñ ús   ”/BÁ1BÂBÂB!	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r	   r
   r   rj   r\   Ú	key_fieldr   r   r   )r   s   "r   r   r   V   s(   € ÷  ñ  �ð  ˜tð  °ð  ¸tñ  r   c                óš   € VP                  V4      pV'       d)   \        V 3/ W#/B pV'       d   \        WR ,          V4      # \        W4      # ©rg   )rQ   r]   rv   rp   )r
   rj   rx   Úkey_valÚexistings   &&&  r   Úupsertr}   V   sD   € Ø�j‰j˜Ó#€GßÜ˜DÑ9 YÐ$8Ñ9ˆßÜ˜$¨¥°Ó7Ð7Ü�$ÓÐr   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r
   r   re   r   r   Úboolr   )r   s   "r   r   r   ^   s!   € ÷ ñ �tð ¨ð °ñ r   c                ó6  € \        V 4      ;_uu_ 4        \        V 4      pV Uu. uF  q3P                  R 4      V8w  g   K  VNK  	  pp\        V4      \        V4      8X  d    RRR4       R# \	        W4        RRR4       R# u upi   + '       g   i     R# ; i)rg   NFT)r   r.   rQ   Úlenr;   )r
   re   r0   ra   Únew_recordss   &&   r   Údelete_by_idrƒ   ^   ss   € Ü	ˆt��Ü˜“+ˆÙ")ÓF¡'˜Q¯U©U°4«[¸IÑ-E—q�q¡'ˆÐFÜˆ{Óœs 7›|Ô+Ø÷	 
‰ô
 	ˆtÔ!Ø÷ 
‰ùâF÷ 
�ˆús(   ”B¤BÁ BÁBÁ,BÂBÂB	rz   )Ú__conditional_annotations__Ú__doc__Ú
__future__r   r'   r   rE   r   r   Úpathlibr   Útypingr   r   Ú__annotations__r   r.   r;   rB   rG   rJ   r]   rc   rh   rp   rv   r}   rƒ   )r„   s   @r   Ú<module>rŠ      sl   øðôõ #ß Ó ß 'Ý Ý à$&€Ð!Ó &õõ	õõ2õõ!õõCõ
õõ÷ ÷r   