Ë
    n‹£jË  ã                   ót  — d dl Z d dlZd dlmZmZ d dlZd dlmZ ddlmZm	Z	m
Z
 ddededefd	„Zed
k(  r„d dlZ ej                   «       Zej%                  de¬«       ej%                  d«       ej'                  «       Z e
«         e e j,                   eej.                  ej0                  «      «      «       yy)é    N)ÚdatetimeÚtimezone)Úinserté   )Ú	CandleRowÚSessionÚinit_dbÚ	symbol_idÚfeedÚ
outputsizec              ƒ   ó,  K  — t         j                  d   }t        j                  d¬«      4 ƒd {  –—† }|j	                  d|d|d|dœ¬«      ƒ d {  –—† }|j                  «        |j                  «       }d d d «      ƒd {  –—†  j	                  d	«      d
k(  rt        |j	                  dd«      «      ‚t        j                  «       5 }|j	                  dg «      D ]æ  }t        t        j                  |d   «      j                  t        j                  ¬«      j!                  «       «      }	|j#                  t%        t&        «      j)                  | d|	t+        |d   «      t+        |d   «      t+        |d   «      t+        |d   «      |j	                  d«      rt+        |d   «      nd d¬«	      j-                  g d¢¬«      «       Œè 	 d d d «       t/        |j	                  dg «      «      S 7 �Œ¹7 �Œ›7 �Œn# 1 ƒd {  –—†7  sw Y   �ŒxY w# 1 sw Y   ŒCxY w­w)NÚTWELVE_DATA_API_KEYé   )Útimeoutz&https://api.twelvedata.com/time_seriesÚ1minÚUTC)ÚsymbolÚintervalr   r   Úapikey)ÚparamsÚstatusÚerrorÚmessagezTwelve Data backfill failedÚvaluesr   )ÚtzinfoÚ1mÚopenÚhighÚlowÚcloseÚvolumeÚ
twelvedata)	r
   Ú	timeframeÚ	timestampr   r   r   r    r!   Úprovider)r
   r#   r$   )Úindex_elements)ÚosÚenvironÚhttpxÚAsyncClientÚgetÚraise_for_statusÚjsonÚRuntimeErrorr   ÚbeginÚintr   ÚfromisoformatÚreplacer   Úutcr$   Úexecuter   r   r   ÚfloatÚon_conflict_do_nothingÚlen)
r
   r   r   ÚkeyÚclientÚresponseÚpayloadÚdbÚrowÚtss
             útrading-ai/app/backfill.pyÚfetchr@      sw  è ø€ Ü
�
‰
Ð(Ñ)€CÜ× Ñ ¨Ô,÷ =ð =°Ø—z‘zÐ"JÐ\`Ðlrð  AKð  W\ð  fiñ  Sj�zó  k÷  kˆØ×!Ñ!Ô#¨X¯]©]«_ W÷=÷ =ð ‡{�{�8Ó˜gÒ%¬\¸'¿+¹+ÀiÐPmÓ:nÓ-oÐ'oÜ	�‰‹ð `˜BØ—;‘;˜x¨Ó+ò 	`ˆCÜ”8×)Ñ)¨#¨j©/Ó:×BÑBÌ(Ï,É,ÐBÓW×aÑaÓcÓdˆBØ�J‰J”vœiÓ(×/Ñ/¸)ÈdÐ]_ÔejÐknÐouÑkvÓewô  ~Cð  DGð  HNñ  DOó  ~Pô  UZð  [^ð  _dñ  [eó  Ufô  mrð  svð  w~ñ  só  m@ð  `c÷  `gñ  `gð  hpô  `qô  HMð  NQð  RZñ  N[ô  H\ð  w{ð  EQÐ/ó  R÷  iñ  iò  y^ð  ió  _õ  `ñ	`÷`ô ˆw�{‰{˜8 BÓ'Ó(Ð(ð=ùð kùð=ù÷ =÷ =ò =ú÷`ð `üsp   ‚.H°G)±H´G2ÁG,Á$G2Á6HÂG/ÂAHÃ	C<HÇ$HÇ,G2Ç/HÇ2HÇ8G;Ç9HÈ HÈHÈHÚ__main__)Útype)iˆ  )Úasyncior'   r   r   r)   Úsqlalchemy.dialects.postgresqlr   Údatabaser   r   r	   r0   Ústrr@   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentÚ
parse_argsÚargsÚprintÚrunr
   r   © ó    r?   ú<module>rR      s  ðß ß &Û Ý 1ß /Ñ /ñ
)˜#ð 
) 3ð 
)°#ó 
)ð ˆZÒÛØ"ˆ8×"Ñ"Ó$€F V×%8Ñ%8¸È#Ð%8Ô%NÈv×ObÑObÐciÔOjÐpv÷  qBñ  qBó  qDÐkoñ  ELô  ENñ  OTð  U`ð  U\÷  U`ñ  U`ñ  afð  gk÷  guñ  guð  vz÷  vñ  vó  a@ó  UAõ  OBð rQ   