
    љi]                         S SK JrJr  S SKJrJr  S SKrS SKrS SKrS SKJ	r	  S SK
Jr  \R                  " \5      r " S S5      r " S S	\5      r " S
 S\5      rg)    )ABCabstractmethod)datetimetimezoneN)Dict)uuid4c                   F    \ rS rSrSSSSSS.S\S\S\S\S\S	\4S
 jjrSrg)LineBotSession   N)iduser_id
context_id
updated_atdatar   linebot_user_idr   r   r   r   c                    U=(       d    S[        5        3U l        X l        U=(       d    UU l        X@l        U=(       d$    [
        R                  " [        R                  5      U l	        U=(       d    0 U l
        g )Nlinebot_sess_)r   r   r   r   r   r   nowr   utcr   r   )selfr   r   r   r   r   r   s          g/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/adapter/linebot/session_manager/base.py__init__LineBotSession.__init__   sT     1-y1.1/$$BX\\(BJB	    )r   r   r   r   r   r   )	__name__
__module____qualname____firstlineno__strr   r   r   __static_attributes__ r   r   r
   r
      sY     #  	
     r   r
   c                   `    \ rS rSr\S\S\4S j5       r\S\4S j5       r\S\4S j5       r	Sr
g	)
LineBotSessionManager   r   returnc                    #    g 7fNr!   r   r   s     r   get_session!LineBotSessionManager.get_session            linebot_sessionc                    #    g 7fr'   r!   )r   r-   s     r   upsert_session$LineBotSessionManager.upsert_session$   r+   r,   c                    #    g 7fr'   r!   r(   s     r   delete_session$LineBotSessionManager.delete_session(   r+   r,   r!   N)r   r   r   r   r   r   r
   r)   r/   r2   r    r!   r   r   r#   r#      sX        N   C  r   r#   c                   ^    \ rS rSrSS\S\4S jjrS rS\S\4S jr	S	\4S
 jr
S\4S jrSrg)SQLiteLineBotSessionManager-   db_pathtimeoutc                 <    Xl         X l        U R                  5         g r'   )r7   r8   init_db)r   r7   r8   s      r   r   $SQLiteLineBotSessionManager.__init__.   s    r   c                     [         R                  " U R                  5      n U   UR                  S5        S S S 5        UR                  5         g ! , (       d  f       N= f!   [        R                  S5        e = f! UR                  5         f = 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 TEXT NOT NULL,
                        data TEXT
                    )
                    zError at init_db.sqlite3connectr7   executelogger	exceptionclose)r   conns     r   r:   #SQLiteLineBotSessionManager.init_db3   sg    t||,		 " JJL# 	02JJLs9   A  AA  
AA  A; A   A88A; ;Br   r%   c                   #    [         R                  " U R                  5      n UR                  SU45      nUR	                  5       nU(       a  [
        R                  " US   5      n[
        R                  " [        R                  5      U-
  R                  5       U R                  ::  ad  [        US   US   US   US   [
        R                  " US   5      US   (       a  [        R                  " US   5      O0 S9UR                  5         $ [        US	9nU R!                  U5      I S h  vN   UUR                  5         $  N! ["         a  n[$        R'                  S
U 35        e S nAff = f! UR                  5         f = f7f)Nz
                SELECT linebot_user_id, session_id, user_id, context_id, updated_at, data
                FROM linebot_sessions
                WHERE linebot_user_id = ?
                      r            )r   r   r   r   r   r   )r   zError at get_session: )r>   r?   r7   r@   fetchoner   fromisoformatr   r   r   total_secondsr8   r
   jsonloadsrC   r/   	ExceptionrA   error)r   r   rD   cursorrowr   sessionexs           r   r)   'SQLiteLineBotSessionManager.get_sessionI   sK    t||,"	\\
 !"F //#C%33CF;
LL.;JJLPTP\P\\) V(+A #A%(V%-%;%;CF%C58Vtzz#a&1* JJL % /G %%g... JJL /  	LL1"67	
 JJLsS   !FCE =FE +E,E 1FE 
E,E''E,,E/ /FFr-   c                   #    UR                   =(       d$    [        R                  " [        R                  5      Ul         [
        R                  " U R                  5      n U   UR                  SUR                  UR                  UR                  UR                  UR                   R                  5       UR                  (       a   [        R                   " UR                  5      OS 45        S S S 5        UR'                  5         g ! , (       d  f       N= f!   ["        R%                  S5        e = f! UR'                  5         f = f7f)Na  
                    INSERT INTO linebot_sessions (linebot_user_id, session_id, user_id, context_id, updated_at, data)
                    VALUES (?, ?, ?, ?, ?, ?)
                    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   r   r   r   r>   r?   r7   r@   r   r   r   r   	isoformatr   rO   dumpsrA   rB   rC   )r   r-   rD   s      r   r/   *SQLiteLineBotSessionManager.upsert_sessiono   s     %4%?%?%]8<<PXP\P\C]"t||,		 (77'**'//'22'22<<><K<P<P

?#7#78VZ 6 JJL7 ,	79 JJLsO   AE D "B
D,D 4E
DD D1 D D..D1 1EEc                 ,  #    [         R                  " U R                  5      n U   UR                  SU45        S S S 5        UR                  5         g ! , (       d  f       N= f!   [        R                  S5        e = f! UR                  5         f = f7f)Nz6DELETE FROM linebot_sessions WHERE linebot_user_id = ?zError at delete_session.r=   )r   r   rD   s      r   r2   *SQLiteLineBotSessionManager.delete_session   so     t||,	L$&  JJL 	79 JJLsJ   !BA$ AA$ B
A!A$  A? !A$ $A<<A? ?BB)r7   r8   N)zlinebot_sessions.dbi  )r   r   r   r   r   floatr   r:   r
   r)   r/   r2   r    r!   r   r   r5   r5   -   sG     e 
,$ $ $L N  DC r   r5   )abcr   r   r   r   loggingrO   r>   typingr   uuidr   	getLoggerr   rA   r
   r#   r5   r!   r   r   <module>rd      sO    # '     			8	$ &C r"7 rr   