
    1i^                       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  e	e      j                         j                   d   dz  Zed	z  Z ej&                         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)z4SQLite-backed storage for async transcription tasks.    )annotationsN)datetimetimezone)Path)AnyDictOptional   sql_datazasr_tasks.dbc                 h    t        j                  t        j                        j	                  d      S )Nseconds)timespec)r   nowr   utc	isoformat     &/app/gzzm/services/async_task_store.py_utc_now_isor      s#    <<%///CCr   c                 x    t        j                  t        t              d      } t         j                  | _        | S )N   )timeout)sqlite3connectstr_DB_PATHRowrow_factoryconns    r   	_get_connr!      s'    ??3x="5D{{DKr   c                 
   t         j                  dd       t        5  t               5 } | j	                  d       | j	                  d       | j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NT)parentsexist_okzPRAGMA journal_mode=WAL;a  
                CREATE TABLE IF NOT EXISTS transcribe_tasks (
                    task_id TEXT PRIMARY KEY,
                    filename TEXT,
                    speaker_ids TEXT,
                    status TEXT NOT NULL,
                    result_json TEXT,
                    error_message TEXT,
                    created_at TEXT NOT NULL,
                    started_at TEXT,
                    finished_at TEXT,
                    updated_at TEXT NOT NULL
                )
                )_DB_DIRmkdir_DB_LOCKr!   executecommitr   s    r   init_task_dbr*      s_    MM$M.	[DLL34LL  KKM%  
[ 
s"   A93A-A9-A6	2A99Bc                    t               }t        5  t               5 }|j                  d| ||dd d |d d |f
       |j	                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Na(  
                INSERT INTO transcribe_tasks (
                    task_id, filename, speaker_ids, status,
                    result_json, error_message, created_at,
                    started_at, finished_at, updated_at
                ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
                queuedr   r'   r!   r(   r)   )task_idfilenamespeaker_idsr   r    s        r   create_task_recordr1   3   sn    
.C	[DLL * KKM-  
[ 
s"   A&-A	A&A#	A&&A/c           	         t               }t        5  t               5 }|j                  dd||| f       |j	                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz
                UPDATE transcribe_tasks
                SET status = ?, started_at = ?, updated_at = ?
                WHERE task_id = ?
                runningr-   )r.   r   r    s      r   mark_task_runningr4   O   sW    
.C	[DLL
 Cg. KKM  
[ 
s"   A 'AA A	A  A)c                   t               }t        5  t               5 }|j                  ddt	        j
                  |d      d ||| f       |j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz
                UPDATE transcribe_tasks
                SET status = ?, result_json = ?, error_message = ?,
                    finished_at = ?, updated_at = ?
                WHERE task_id = ?
                	succeededF)ensure_ascii)r   r'   r!   r(   jsondumpsr)   )r.   resultr   r    s       r   mark_task_succeededr;   ^   sh    
.C	[DLL djjeDdCQTV]^ KKM  
[ 
s"   A7>A+A7+A4	0A77B c           
         t               }t        5  t               5 }|j                  dd|||| f       |j	                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz
                UPDATE transcribe_tasks
                SET status = ?, error_message = ?,
                    finished_at = ?, updated_at = ?
                WHERE task_id = ?
                failedr-   )r.   error_messager   r    s       r   mark_task_failedr?   n   sY    
.C	[DLL =#sG< KKM  
[ 
s"   A!(AA!A	A!!A*c                p   t         5  t               5 }|j                  d| f      j                         }d d d        d d d        y d }|d   r	 t	        j
                  |d         }|d   |d   |d   |d   ||d   |d   |d	   |d
   |d   d
S # 1 sw Y   \xY w# 1 sw Y   `xY w# t        $ r d }Y Mw xY w)Nz
                SELECT task_id, filename, speaker_ids, status, result_json,
                       error_message, created_at, started_at, finished_at, updated_at
                FROM transcribe_tasks
                WHERE task_id = ?
                result_jsonr.   r/   r0   statusr>   
created_at
started_atfinished_at
updated_at)
r.   r/   r0   rB   r:   r>   rC   rD   rE   rF   )r'   r!   r(   fetchoner8   loads	Exception)r.   r    rowr:   s       r   get_task_recordrK   ~   s    	[D,, 
 hj   
 {F
=	ZZM 23F
 y>
O=)h-_-,','=),' + [ 
&  	F	s3   B"BBB' B	BB$'B54B5)returnr   )rL   zsqlite3.Connection)rL   None)r.   r   r/   r   r0   zOptional[str]rL   rM   )r.   r   rL   rM   )r.   r   r:   zDict[str, Any]rL   rM   )r.   r   r>   r   rL   rM   )r.   r   rL   zOptional[Dict[str, Any]])__doc__
__future__r   r8   r   	threadingr   r   pathlibr   typingr   r   r	   __file__resolver#   r%   r   RLockr'   r   r!   r*   r1   r4   r;   r?   rK   r   r   r   <module>rV      s    : "    '  & &
x.
 
 
"
*
*1
-

:^#9??D08  "r   