
    Ujz                         d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
Z
dZdZ G d d	e      Z G d
 de      Z G d de      Z G d de      Ze G d d             ZefdZddZd ZddddZy)zGShared Supadata Native client for the e2e worker and maintenance batch.    N)	dataclass)Path)Anyzhttps://api.supadata.ai/v1z,/opt/struktur/youtube-research/.env.supadatac                   (     e Zd Zdddd fd
Z xZS )SupadataErrorNprovider_errorstatusbillablekindc                N    t         |   |       || _        || _        || _        y N)super__init__r
   r   r   )selfmessager
   r   r   	__class__s        /tmp/supadata_native.pyr   zSupadataError.__init__   s#    !v4;Xt}Y]ty    )__name__
__module____qualname__r   __classcell__)r   s   @r   r   r      s    *.DT ^ ^r   r   c                       e Zd Zy)NativeTranscriptUnavailableNr   r   r    r   r   r   r          r   r   c                       e Zd Zy)	QuotaWaitNr   r   r   r   r    r       r   r   r    c                       e Zd Zy)TransientSupadataErrorNr   r   r   r   r"   r"      r   r   r"   c                   ~    e Zd ZU eeeeeef      ed<   eed<   edz  ed<   eed<   e	eef   ed<   ee	ee
f      ed<   y)NativeResultsegmentslanguageNr   http_statusheaderscontent)r   r   r   listtupleintfloatstr__annotations__dictr   r   r   r   r$   r$      sQ    5U5,-..M$h#c']$s3w-  r   r$   c                     t        |       j                         j                         D ]=  }|j                  d      s|j	                  dd      d   j                         }|s;|c S  t        d      )NzSUPADATA_API_KEY==   SUPADATA_API_KEY_missing)r   	read_text
splitlines
startswithsplitstripRuntimeError)pathlinevalues      r   api_keyr>      sg    T
$$&113 #??./**S#A&,,.EUl# 1
22r   c                    | xs
 t               } t        j                  t        dz   d| id      }|j                  j                  dd      j                  d      r|j                         ni }|j                  d      }|j                  d	      }|j                  |j                  d
      ||t        |t              rt        |t              r||z
  dS d dS # t        $ r i }Y ww xY w)Nz/me	x-api-key   r(   timeoutcontent-type application/json
maxCreditsusedCreditsplan)httprI   rH   rG   	available)r>   requestsgetAPIr(   r7   json
ValueErrorstatus_code
isinstancer,   )keyrdatamaxcuseds        r   account_statusrX   #   s    wyCHLLUK;LUWX!))--r:EEFXYaffh_a	,	Ddhh}&===(8tY]&0c&:z$s?Sd_ _Y]_ _ Bts   =C C%$C%c                     | j                   j                         D ci c])  \  }}|j                         dv s|j                         |+ c}}S c c}}w )N)rD   x-billable-requestsx-billable-requestzretry-after)r(   itemslower)rT   kvs      r   _headersr`   +   sP    #$99??#4  PCAa	  FO  9OAGGIaK  P  P  Ps
   AAZ   )rS   rC   c          
       	   |xs
 t               }d|  dddd}t        j                  t        dz   |d|i|      }|j                  j                  d      xs |j                  j                  d      }t        |      }|j                  j                  dd      j                  d      r|j                         ni }|j                  dk(  r|j                  d      rt        d      D ]  }	t        j                   d       t        j                  t        dz   t#        |d         z   d|id      }
|xs8 |
j                  j                  d      xs |
j                  j                  d      }|j%                  t        |
             |
j                  dk(  rA|
}|
j                  j                  dd      j                  d      r|
j                         ni } n|
j                  dvs|
} n |j                  dv r&t'        d|j                   |j                  |d      |j                  dk(  rt)        d|j                  |d      |j                  dk7  r[|j                  d k\  r&t        d|j                   |j                  |d!      t        d|j                   |j                  |d"      |j                  d#      }|j                  d$      }t+        |t,              r|r|st)        dd|d      g }t/        |      D ]  \  }}t+        |t0              r)t#        |j                  d%d            j3                         s@t5        |j                  d&d'            d(z  }t5        |j                  d)d'            d(z  }|j9                  |||t;        |d'      z   t#        |d%         j3                         f        |st)        dd|d      t=        |t#        |      ||j                  ||      S # t        j                  $ r&}t        t        |      j                  d	
      |d }~ww xY w# t        $ r i }Y w xY w# t        j                  $ r&}t        t        |      j                  d	
      |d }~ww xY w# t6        t        f$ r Y w xY w)*Nz https://www.youtube.com/watch?v=nativefalsede)urlmodetextlangz/transcriptr@   )paramsr(   rC   network_error)r   rZ   r[   rD   rE   rF      jobIdx   r3   z/transcript/rA   rB      )rl      )i  i  http_quotar	   rp   znative transcript unavailablenative_unavailablei  provider_5xxr   r)   ri   rh   offsetr   i  duration)r>   rL   rM   rN   RequestExceptionr"   typer   r(   r`   r7   rO   rP   rQ   rangetimesleepr.   updater    r   rR   r*   	enumerater0   r9   r-   	TypeErrorappendmaxr$   )video_idrS   rC   rj   rT   exbillr(   rU   _zr)   ri   segsisstartdurs                     r   fetch_nativer   .   s(   wyC*J8*(U]emt  }A  "B&<<M)S@QZab	
,	-	T?S1TD^fgh^iV]))--r:EEFXYaffh_a}}cdhhw/s 	:AJJqM<<N 23tG}3E E{[^N_hjkd'<=dOcAdDfmftftu}~  vA  gB}}c!aiimmN2&F&Q&QRd&e!&&(kmTot}}I-qE	: 	}}	!U1==/3JRSR_R_imsz){#{}}c!<=\dedqdq{  FZ  "[  [}}c==#%;eAMM?<S[\[h[hrv  }K  &L   L$uQ]]O%<AMM[_euvvHHYGdhhv&6gd#7$)*IQT^bh|}}	D! G!!D!QUU6"-=)>)D)D)Fx*+D0UeAEE*Q<O6PQU6U#QuU3s1:-c!F)n.B.B.DEF	G
 23RZ]gk  rF  G  Gc$iq}}gwOO9 $$x2HbIZIZ`o2pvx,xx Bt
 ,,  A:PQUVXQYQbQbhw:x  A  5A  A" *%/x/sS   "O0 >=P,  0P><Q:0P)!P$$P),P;:P;>Q7!Q22Q7:RRr   )__doc__datetimeosrz   dataclassesr   pathlibr   typingr   rL   rN   ENVr:   r   r   r    r"   r$   r>   rX   r`   r   r   r   r   <module>r      s    M   !   "4^L ^ 7- 6 $ $ 1] 1
! ! !  3_P #' Pr   