
    j
                     H    S r SSKrSSKrSSKr " S S5      r " S S5      rg)uE   
V11 — Feeds: Binance (precio spot) y CLOB (orderbook Polymarket).
    Nc                   .    \ rS rSrS\4S jrS rS rSrg)BinanceFeed   ws_urlc                 :    Xl         SU l        S U l        SU l        g Ng        F)r   last_px_ws_stop)selfr   s     /var/www/html/v11b/feeds.py__init__BinanceFeed.__init__   s    
    c                   ^  U 4S jnSnT R                   (       d   [        R                  " T R                  US9T l        T R                  R                  SSS9  SnT R                   (       d%  [        R                  " U5        [        US-  S5      nT R                   (       d  M  g g ! [         a  n[        SU 35         S nANhS nAff = f)	Nc                 v   >  [        [        R                  " U5      S   5      Tl        g ! [         a     g f = f)Np)floatjsonloadsr	   	Exception)wsmsgr   s     r   on_msgBinanceFeed.run.<locals>.on_msg   s3    $TZZ_S%9: s   '+ 
88   )
on_message   
   ping_intervalping_timeoutz[binance] ws error: <   )r   	websocketWebSocketAppr   r
   run_foreverr   printtimesleepmin)r   r   backoffes   `   r   runBinanceFeed.run   s    	
 **2$11$++&Q$$2B$G ::

7#gk2. ***
  2,QC0112s   A B' '
C	1CC	c                 h    SU l          U R                  R                  5         g ! [         a     g f = fNTr   r
   closer   r   s    r   stopBinanceFeed.stop    .    
	HHNN 		   $ 
11)r   r
   r	   r   N)	__name__
__module____qualname____firstlineno__strr   r-   r4   __static_attributes__ r   r   r   r      s    s /$r   r   c                   B    \ rS rSrSrS\S\4S jrS rS rS r	S	 r
S
rg)CLOBFeed(   z:Tracks best bid/ask for a single token via CLOB websocket.token_idr   c                 T    Xl         X l        SU l        SU l        S U l        SU l        g r   )rB   r   best_bidbest_askr
   r   )r   rB   r   s      r   r   CLOBFeed.__init__+   s(     
r   c                 j    UR                  [        R                  " SU R                  /S.5      5        g )Nmarket)type
assets_ids)sendr   dumpsrB   )r   r   s     r   _on_openCLOBFeed._on_open3   s"    


HT]]OLMNr   c                     [         R                  " U5      n[        U[        5      (       a  UOU/nU H  nUR	                  S5      S:X  d  SU;   d  M   UR	                  S/ 5      nUR	                  S/ 5      nU(       a  [        S U 5       5      U l        U(       d  Mk  [        S U 5       5      U l        M     g ! [         a     g f = f)N
event_typebookbidsasksc              3   >   #    U  H  n[        US    5      v   M     g7fpriceNr   .0xs     r   	<genexpr>#CLOBFeed._on_msg.<locals>.<genexpr>?        +Iq!E!G*,=,=q   c              3   >   #    U  H  n[        US    5      v   M     g7frU   rW   rX   s     r   r[   r\   A   r]   r^   )
r   r   
isinstancelistgetmaxrD   r*   rE   r   )r   r   r   ititemsibas           r   _on_msgCLOBFeed._on_msg6   s    	JJsOB$R..BRDE55&&0FaKfb)Afb)A(++Iq+I(Iq(++Iq+I(I   		s   AB; AB; B; ;
CCc                    SnU R                   (       d   [        R                  " U R                  U R                  U R
                  S9U l        U R                  R                  SSS9  SnU R                   (       d%  [        R                  " U5        [        US-  S	5      nU R                   (       d  M  g g ! [         a(  n[        SU R                  S S  SU 35         S nANxS nAff = f)
Nr   )on_openr   r   r   r    z[clob:   z] reconnect: r#   )r   r$   r%   r   rM   ri   r
   r&   r   r'   rB   r(   r)   r*   )r   r+   r,   s      r   r-   CLOBFeed.runE   s    **D$11KK4<<Q$$2B$G ::

7#gk2. ***  Dt}}Ra01qcBCCDs   AB5 5
C'?C""C'c                 h    SU l          U R                  R                  5         g ! [         a     g f = fr0   r1   r3   s    r   r4   CLOBFeed.stopS   r6   r7   )r   r
   rE   rD   rB   r   N)r8   r9   r:   r;   __doc__r<   r   rM   ri   r-   r4   r=   r>   r   r   r@   r@   (   s-    D c O/r   r@   )rq   r   r(   r$   r   r@   r>   r   r   <module>rr      s'      B0 0r   