
    љi                         S SK r S SKJrJr  S SKrS SKrS SKJrJrJr  S SK	r	SSK
JrJr  \R                  " \5      r " S S\5      rg)    N)datetimetimezone)DictCallable	Awaitable   )LineBotSessionLineBotSessionManagerc                       \ rS rSrSSSSSSSSSS	S
.
S\/ \\R                     4   S\S\	S\S\S\S\S\
S\	S\	4S jjrS\R                  4S jrS\R                  4S jrS\S\4S jrS\4S jrS\4S jrSrg) PostgreSQLLineBotSessionManager   N	localhosti8  aiavatarpostgresi  r      )
get_poolhostportdbnameuserpasswordconnection_strtimeoutdb_pool_min_sizedb_pool_max_sizer   r   r   r   r   r   r   r   r   r   c       
             Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        S U l
        [        R                  " 5       U l        SU l        g )NF)_get_pool_funcr   r   r   r   r   r   r   r   r   _poolasyncioLock
_pool_lock_db_initialized)selfr   r   r   r   r   r   r   r   r   r   s              k/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/adapter/linebot/session_manager/postgres.py__init__(PostgreSQLLineBotSessionManager.__init__   sV     '			 , 0 0#'
!,,.$    returnc                   #    U R                   b  U R                  5       I S h  vN nU R                  (       dX  U R                   IS h  vN   U R                  (       d   U R                  U5      I S h  vN   SU l        S S S 5      IS h  vN   U$ U$ U R                  b  U R                  $ U R                   IS h  vN   U R                  b  U R                  sS S S 5      IS h  vN   $ U R
                  (       aB  [        R                  " U R
                  U R                  U R                  S9I S h  vN U l        Om[        R                  " U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9I S h  vN U l        U R                  U R                  5      I S h  vN   SU l        S S S 5      IS h  vN   U R                  $  GN GN GN GNp! , IS h  vN  (       d  f       U$ = f GN\ GN6 N N~ NX NC! , IS h  vN  (       d  f       U R                  $ = f7f)NT)dsnmin_sizemax_size)r   r   databaser   r   r+   r,   )r   r"   r!   init_dbr   r   asyncpgcreate_poolr   r   r   r   r   r   r   )r#   pools     r$   r   (PostgreSQLLineBotSessionManager.get_pool)   s    *,,..D''???//"ll4000/3, +? K4K ::!::???zz%zz #?? ""#*#6#6++!22!22$ 
 $+#6#6![[!]]!22!22$ 
 ,,tzz***#'D + #?. zzG /*0 +??? K #
 +) #??. zzs  !IG1%I	G4
I&G=3G74G=?I
G:1I<H=I H&I%H&I+AH&3H4A-H&!H "'H&	H"
H&I H$!I4I7G=:I=HHH	IIH& H&"H&$I&I,H/-I9Ir1   c                 (  #    UR                  5        IS h  vN n UR                  S5      I S h  vN   S S S 5      IS h  vN   g  N/ N! [         a  n[        R	                  SU 35        e S nAff = f N4! , IS h  vN  (       d  f       g = f7f)Na  
                    CREATE TABLE IF NOT EXISTS linebot_sessions (
                        linebot_user_id TEXT PRIMARY KEY,
                        session_id TEXT NOT NULL,
                        user_id TEXT NOT NULL,
                        context_id TEXT,
                        updated_at TIMESTAMP NOT NULL,
                        data JSON
                    )
                    zError at init_db: )acquireexecute	Exceptionloggererror)r#   r1   connexs       r$   r.   'PostgreSQLLineBotSessionManager.init_dbQ   st     <<>>Tll	   ">>  1"67 ">>>sp   BABA8AA	ABA6B	A
A3A..A33A86B8B>B?BBlinebot_user_idc           
        #    U R                  5       I S h  vN nUR                  5        IS h  vN n UR                  SU5      I S h  vN nU(       Ga  US   =(       d+    [        R                  R                  [        R                  S9nUR                  c  UR                  [        R                  S9nUS   =(       d    0 n[        U[        5      (       a  [        R                  " U5      n[        R                  " [        R                  5      U-
  R                  5       U R                  ::  a+  [!        US   US   US   US   UUS	9sS S S 5      IS h  vN   $ [!        US
9nU R#                  U5      I S h  vN   UsS S S 5      IS h  vN   $  GN~ GNh GNP NC N" N! [$         a  n[&        R)                  SU 35        e S nAff = f! , IS h  vN  (       d  f       g = f7f)Nz
                    SELECT linebot_user_id, session_id, user_id, context_id, updated_at, data
                    FROM linebot_sessions
                    WHERE linebot_user_id = $1
                    
updated_attzinfodata
session_idr<   user_id
context_id)idr<   rC   rD   r>   rA   )r<   zError at get_session: )r   r4   fetchrowr   minreplacer   utcr@   
isinstancestrjsonloadsnowtotal_secondsr   r	   upsert_sessionr6   r7   r8   )	r#   r<   r1   r9   rowr>   rA   sessionr:   s	            r$   get_session+PostgreSQLLineBotSessionManager.get_sessiond   s    ]]_$<<>>T! MM
 $  !$\!2!_hll6J6JRZR^R^6J6_J!((0%/%7%7x||%7%L
!$V!2D!$,,#zz$/ X\\2Z?NNPTXT`T``-"<0,/0A,B$'	N'*<'8'1!% ' ">>8 )I))'222= ">> %! ": 3; "@  5bT:;A ">>s   G(FG(FG(GF#
FDF#G(FG(F#<F=F#G(F!G(G(F#G(F#!G(#
G-GGGG%GG%!G(linebot_sessionc           
        #    UR                   =(       d$    [        R                  " [        R                  5      Ul         UR                   R
                  (       a  UR                   R                  S S9OUR                   nU R                  5       I S h  vN nUR                  5        IS h  vN n UR                  (       a  [        R                  " UR                  SS9OS nUR                  SUR                  UR                  UR                  UR                   UU5      I S h  vN   S S S 5      IS h  vN   g  N N N! ["         a  n[$        R'                  SU 35        e S nAff = f N6! , IS h  vN  (       d  f       g = f7f)Nr?   F)ensure_asciia  
                    INSERT INTO linebot_sessions (linebot_user_id, session_id, user_id, context_id, updated_at, data)
                    VALUES ($1, $2, $3, $4, $5, $6)
                    ON CONFLICT(linebot_user_id) DO UPDATE SET
                        session_id = EXCLUDED.session_id,
                        user_id = EXCLUDED.user_id,
                        context_id = EXCLUDED.context_id,
                        updated_at = EXCLUDED.updated_at,
                        data = EXCLUDED.data
                    zError at upsert_session: )r>   r   rN   r   rI   r@   rH   r   r4   rA   rL   dumpsr5   r<   rE   rC   rD   r6   r7   r8   )r#   rU   updated_at_naiver1   r9   	data_jsonr:   s          r$   rP   .PostgreSQLLineBotSessionManager.upsert_session   s7    %4%?%?%]8<<PXP\P\C]"N]NhNhNoNo?55==T=J  vE  vP  vP]]_$<<>>TTcThThDJJ';';%Pnr	ll	 $33#&&#++#..$!   ">> %!&  8=>- ">>>s   BFD;F+D=,F/E.1A4E%D?&E*F5E,6F=F?E
E)E$$E))E.,F.F4E75FFc                 ^  #    U R                  5       I S h  vN nUR                  5        IS h  vN n UR                  SU5      I S h  vN   S S S 5      IS h  vN   g  NI N2 N! [         a  n[        R                  SU 35        e S nAff = f N6! , IS h  vN  (       d  f       g = f7f)Nz7DELETE FROM linebot_sessions WHERE linebot_user_id = $1zError at delete_session: )r   r4   r5   r6   r7   r8   )r#   r<   r1   r9   r:   s        r$   delete_session.PostgreSQLLineBotSessionManager.delete_session   s     ]]_$<<>>TllM#   ">> %!
  8=> ">>>s   B-A B-A"B-BA&
A$A&B-BB-"B-$A&&
B0B		BBB-B*BB*&B-)r"   r   r   r!   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____firstlineno__r   r   r/   PoolrK   intfloatr%   r   r.   r	   rS   rP   r]   __static_attributes__ r'   r$   r   r      s     ;? " ! !% 2y667% 	%
 % % % % % % % %8& &P',, &$ $ $LN >C r'   r   )r   r   r   loggingrL   typingr   r   r   r/   baser	   r
   	getLoggerr_   r7   r   rg   r'   r$   <module>rl      s<     '   , ,  7			8	$h&; hr'   