+
    -i                        ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
HtHt R R ltR R	 ltRR
 R lltR R ltRR R lltR R ltR R R lltRR R lltR!R R lltR R ltR R ltR R ltR# )"    )annotationsN)Any)	ENDPOINTS)execute	fetch_onec                   V ^8  d   QhRR/# )   returnint )formats   "scripts/repository.py__annotate__r      s     # # #    c                 L    \        \        P                  ! 4       R ,          4      # )i  )r   timer   r   r   now_msr      s    tyy{T!""r   c                    V ^8  d   QhRRRR/# )r	   datadict[str, Any] | Noner
   strr   )r   s   "r   r   r      s     F F% F# Fr   c                H    \         P                  ! T ;'       g    / R RR7      # )FT)ensure_ascii	sort_keys)jsondumps)r   s   &r   _jsonr      s    ::djjbuEEr   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )r	   
project_idr   titletopicscript_versionr
   Noner   )r   s   "r   r   r      s7     s ss s3 ss sC s[_ sr   c           	     8    \        4       p\        R WW#WD34       R# )zpINSERT OR REPLACE INTO projects(project_id,title,topic,script_version,created_at,updated_at) VALUES(?,?,?,?,?,?)Nr   r   )r   r    r!   r"   tss   &&&& r   create_projectr'      s1    	B~  AK  TY  km  @r  sr   c                    V ^8  d   QhRRRR/# )r	   scenedict[str, Any]r
   r#   r   )r   s   "r   r   r      s       4 r   c                \   \        4       p\        R V R,          V R,          V R,          V P                  R4      V P                  R4      V P                  R4      V P                  R4      V P                  RR	4      V P                  R
4      '       d   ^M^ V P                  RR4      W34       R# )zINSERT OR REPLACE INTO scenes(scene_id,project_id,ordering,narration,visual_prompt,target_duration,continuity_group,scene_type,extend_flag,status,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)scene_idr   ordering	narrationvisual_prompttarget_durationcontinuity_group
scene_typetextextend_flagstatuspendingN)r   r   get)r)   r&   s   & r   create_scener8      s"   	B  Wj5.j0A599[CY[`[d[det[uw|  xA  xA  BS  xT  V[  V_  V_  `r  Vs  uz  u~  u~  K  MS  uT  [`  [d  [d  er  [s  [s  VW  yz  |A  |E  |E  FN  PY  |Z  \^X r   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r	   r,   
str | Noneendpoint_typer   request_payloadr*   external_task_idr
   r   )r   s   "r   r   r   !   s5      * S > mw   DG r   c                    \        4       pR \        P                  ! 4       P                  R,           2p\        P
                  ! V4      pVP                  R4      p\        RWPWWsR\        V4      WD3
4       V# )kt_N   N
model_namezINSERT INTO tasks(task_id_internal,scene_id,endpoint_type,endpoint_path,model_name,external_task_id,task_status,request_payload_json,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?,?,?)created)r   uuiduuid4hexr   r7   r   r   )r,   r;   r<   r=   r&   task_id_internalendpoint_pathrB   s   &&&&    r   create_taskrI   !   s    	BTZZ\--c234MM-0M $$\2J  F  HX  dq  BL  `i  kp  q@  kA  CE  GJ  Kr   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r	   rG   r   kling_task_idr:   
request_idresponser*   r
   r#   r   )r   s   "r   r   r   *   s=     I I# Ij IV` Ilz I  @D Ir   c                    \        4       pVP                  R 4      ;'       g    / P                  R4      ;'       g    RpVR9   d   TMRp\        RWV\        V4      WFW@34       R# )r   task_status	submittedNzUPDATE tasks SET kling_task_id=?, request_id=?, task_status=?, response_json=?, submitted_at=?, finished_at=?, updated_at=? WHERE task_id_internal=?succeedfailed)r   r7   r   r   )rG   rK   rL   rM   r&   returned_statusfinished_ats   &&&&   r   mark_task_submittedrV   *   s    	B V,2277FVV;O'+??"TK  c  er  @O  QV  W_  Q`  bd  su  dH  Ir   c               0    V ^8  d   QhRRRRRRRRRRR	R
/# )r	   rG   r   error_messagecategoryr:   status_codez
int | Noneresponse_bodyr
   r#   r   )r   s   "r   r   r   1   sJ     p p# pc pU_ pu p  Xb p  nr pr   c                ,   \        4       pR VRVRVRV/p\        RRVR,          Y$;'       g    T\        V4      WUV 34       \        RV R\        V4      \        P                  ! \        V4      P                  4       4      P                  4       V34       R# )	rX   rY   rZ   r[   zUPDATE tasks SET task_status=?, task_status_msg=?, error_category=?, raw_error=?, response_json=?, finished_at=?, updated_at=? WHERE task_id_internal=?submit_failed:Ni  NsINSERT OR IGNORE INTO task_events(task_id_internal,event_type,payload_json,dedupe_key,created_at) VALUES(?,?,?,?,?)N)r   r   r   hashlibsha256encode	hexdigest)rG   rX   rY   rZ   r[   r&   payloads   &&&&&  r   mark_task_submission_failedrd   1   s1   	Bz8]T_apr  AG  f  hw  yF  GK  yL  NV  Xv  Xv  iv  x}  ~E  xF  HJ  P`  ga  b  B  DT  Ve  gl  mt  gu  w~  wE  wE  FK  LS  FT  F[  F[  F]  w^  wh  wh  wj  ln  Co  pr   c               $    V ^8  d   QhRRRRRR/# )r	   rc   r*   	auth_moder:   r
   r   )r   s   "r   r   r   8   s"      ~ * Xb r   c                j   V P                  R 4      pRpV'       d   \        RV34      pV'       g@   V P                  R4      ;'       g    / P                  R4      pV'       d   \        RV34      pV'       g   R# VR,          p\        4       p\        P                  ! \        V 4      P                  4       4      P                  4       p\        RVRV34      pV'       d   V# V P                  R4      ;'       g    / P                  R	4      ;'       g    / p	V P                  R
R4      p
V
R9   d   TMRp\        RWP                  R4      \        V 4      W`P                  R4      V	P                  R4      V	P                  R4      V	P                  R4      WWe34       \        RVR\        V 4      Wv34       V# )task_idNz8SELECT task_id_internal FROM tasks WHERE kling_task_id=?	task_infor=   z\SELECT task_id_internal FROM tasks WHERE external_task_id=? ORDER BY created_at DESC LIMIT 1rG   z[SELECT event_id FROM task_events WHERE task_id_internal=? AND event_type=? AND dedupe_key=?callbackparent_videorO   unknowna  UPDATE tasks SET task_status=?, task_status_msg=?, callback_payload_json=?, callback_received_at=?, final_unit_deduction=?, parent_video_id=?, parent_video_url=?, parent_video_duration=?, finished_at=?, callback_auth_mode=?, updated_at=? WHERE task_id_internal=?task_status_msgfinal_unit_deductionidurldurationr^   rQ   )	r7   r   r   r_   r`   r   ra   rb   r   )rc   rf   rK   taskextrG   r&   
dedupe_keyexistingparentr5   rU   s   &&          r   update_task_from_callbackrw   8   s   KK	*MDSVcUefK(..B334FG{  B  ~D  ED./	Bg 5 5 78BBDJv  zJ  LV  Xb  yc  dHkk+&,,"11.AGGRF[[	2F"66"DK  U-.gKKPfDgioisistxiy  |B  |F  |F  GL  |M  OU  OY  OY  Zd  Oe  gr  AV    B  DT  V`  bg  ho  bp  r|  CA  Br   c               <    V ^8  d   QhRRRRRRRRRRRRR	RR
RRR/	# )r	   r,   r:   source_task_id
asset_typer   original_urlwatermark_url
local_pathrq   metadatar   r
   r   )r   s   "r   r   r   S   se     	 	: 	z 	s 	bl 	  ~H 	  ]g 	  zD 	  Wl 	  xB 	r   c                   V'       d	   V'       g   R # \        RWV34      pV'       d
   VR,          # \        4       p	R\        P                  ! 4       P                  R,           2p
\        RWWW4WV\        V4      W34       V
# )NzVSELECT asset_id FROM assets WHERE source_task_id=? AND asset_type=? AND original_url=?asset_idasset_r@   zINSERT INTO assets(asset_id,scene_id,source_task_id,asset_type,original_url,watermark_url,local_path,duration,metadata_json,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?,?,?,?))r   r   rD   rE   rF   r   r   )r,   ry   rz   r{   r|   r}   rq   r~   ru   r&   r   s   &&&&&&&&   r   create_assetr   S   s    q  uC  Q]  t^  _H
##	B

((-./H    AI  Uc  q}  NX  di  jr  ds  uw  @|  }Or   c               $    V ^8  d   QhRRRRRR/# )r	   r   r   r}   r
   r#   r   )r   s   "r   r   r   _   s&     ~ ~c ~s ~t ~r   c                6    \        4       p\        R WW 34       R# )zNUPDATE assets SET local_path=?, downloaded_at=?, updated_at=? WHERE asset_id=?Nr%   )r   r}   r&   s   && r   update_asset_local_pathr   _   s    	B\_ioq^|}r   c                   V ^8  d   QhRR/# )r	   r
   zlist[dict[str, Any]]r   )r   s   "r   r   r   d   s      &: r   c                     ^ RI Hp  V ! 4       p VP                  R4      P                  4       pV Uu. uF  p\	        V4      NK  	  upVP                  4        # u upi   TP                  4        i ; i)r   )connectzuSELECT * FROM assets WHERE original_url IS NOT NULL AND (local_path IS NULL OR local_path='') ORDER BY created_at ASC)
scripts.dbr   r   fetchalldictclose)r   connrowsrs       r   list_pending_download_assetsr   d   sg    "9D||  T  U  ^  ^  `!%&AQ&

 '

s   #A AA A A0c                    V ^8  d   QhRRRR/# )r	   rG   r   r
   r   r   )r   s   "r   r   r   n   s     Z Zs Z'< Zr   c                    \        R V 34      # )z,SELECT * FROM tasks WHERE task_id_internal=?)r   )rG   s   &r   get_taskr   n   s    CFVEXYYr   )v1)N)NNN)NNNN)
__future__r   r_   r   r   rD   typingr   configs.klingr   r   r   r   r   r   r'   r8   rI   rV   rd   rw   r   r   r   r   r   r   r   <module>r      s_    "      # )#Fs
Ip6	~
Zr   