
    X3ik                    `   d dl mZ d dlZd dlZd dl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mZ d dlmZ d dlm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mZmZ ddlmZmZm Z  dZ!dZ"ddZ#ddZ$ G d d      Z%e G d d             Z& G d d      Z' G d d      Z( G d de(      Z)y)    )annotationsN)suppress)	dataclass)datetimetimezone)Path)Any)logger)
GAMMA_BASE)parse_dt   )TargetMarketselect_target_markets)LplOrderbookStoreNoopLplOrderbookStoredumpszhttps://clob.polymarket.comz4wss://ws-subscriptions-clob.polymarket.com/ws/marketc                    | g S t        | t              r| S t        | t              r*	 t        j                  |       }t        |t              r|S g S g S # t        j
                  $ r g cY S w xY wN)
isinstanceliststrjsonloadsJSONDecodeError)rawvalues     "analysis/lpl_orderbook/recorder.py
_json_listr      sn    
{	#t
#s	JJsOE #5$/u7R7I ## 	I	s   A A+*A+c                X   | dv ry t        | t              rt        |       }||S 	 t        |       } t        | t
        t        f      r;t        |       }|dkD  r|dz  }	 t        j                  |t        j                        S y # t        $ r Y y w xY w# t        t        t        f$ r Y y w xY w)N)N g   mBg     @@)tz)r   r   r   float
ValueErrorintr   fromtimestampr   utcOSErrorOverflowError)r   parsedtss      r   parse_ws_tsr+   ,   s    
%%M	%LE %#u&5\9&LB	))">>   		 
3 		s#   B $B 	BBB)(B)c                  D    e Zd Zd	dZd
dZddZddZddZddZddZ	y)	OrderBookc                     i | _         i | _        y r   )bidsasksselfs    r   __init__zOrderBook.__init__C   s    &(	&(	    c           
        |j                  dg       D ci c]H  }t        |j                  dd            dkD  r(t        |d         t        |j                  dd            J c}| _        |j                  dg       D ci c]H  }t        |j                  dd            dkD  r(t        |d         t        |j                  dd            J c}| _        y c c}w c c}w )Nr/   sizer   pricer0   )getr"   r   r/   r0   )r2   dataos      r   apply_snapshotzOrderBook.apply_snapshotG   s     XXfb)
QUU61%&* '
OU155#344
	 XXfb)
QUU61%&* '
OU155#344
	


s   AC>ACc                L   |D ]  }t        |j                  dd            }|s!t        |j                  dd            j                         dk(  r| j                  n| j                  }t        |j                  d      xs d      }|dk(  r|j                  |d        |||<    y )Nr7   r    sideBUYr6   r   )r   r8   upperr/   r0   r"   pop)r2   changeschanger7   r=   r6   s         r   apply_deltazOrderBook.apply_deltaS   s     		#F

7B/0E #FJJvr$: ; A A Cu L499RVR[R[DF+0q1Dqy%"U		#r4   c                    | j                   syt        | j                   d       }t        |      | j                   |   fS )NNNc                    t        |       S r   r"   r   s    r   <lambda>z$OrderBook.best_bid.<locals>.<lambda>b   
    u r4   key)r/   maxr"   r2   r7   s     r   best_bidzOrderBook.best_bid_   5    yyDII#=>U|TYYu---r4   c                    | j                   syt        | j                   d       }t        |      | j                   |   fS )NrE   c                    t        |       S r   rG   rH   s    r   rI   z$OrderBook.best_ask.<locals>.<lambda>h   rJ   r4   rK   )r0   minr"   rN   s     r   best_askzOrderBook.best_aske   rP   r4   c                    t        | j                  j                         d d      D cg c]  \  }}t        |      |d c}}S c c}}w )Nc                    t        | d         S Nr   rG   items    r   rI   z&OrderBook.bid_levels.<locals>.<lambda>p       tAw r4   T)rL   reverser7   r6   )sortedr/   itemsr"   r2   r7   r6   s      r   
bid_levelszOrderBook.bid_levelsk   sJ      &		!/ 
t ElD1
 	
 
s   Ac                    t        | j                  j                         d       D cg c]  \  }}t        |      |d c}}S c c}}w )Nc                    t        | d         S rW   rG   rX   s    r   rI   z&OrderBook.ask_levels.<locals>.<lambda>z   rZ   r4   rK   r\   )r]   r0   r^   r"   r_   s      r   
ask_levelszOrderBook.ask_levelsu   sG      &		!/ 
t ElD1
 	
 
s   ANreturnNone)r9   dict[str, Any]re   rf   )rA   zlist[dict[str, Any]]re   rf   )re   z!tuple[float | None, float | None])re   zlist[dict[str, float]])
__name__
__module____qualname__r3   r;   rC   rO   rT   r`   rc    r4   r   r-   r-   B   s%    )


#..

r4   r-   c                  `    e Zd ZU ded<   ded<   ded<   ded<   ded<   dZd	ed
<   edd       Zy)	LplMarketr   slugcondition_idquestionz	list[str]outcomes	token_idsNzlist[TargetMarket] | Nonetarget_marketsc           	        | j                   r}i }| j                   D ]j  }t        |j                        D ]P  \  }}|t        |j                        k  r|j                  |   nd}|r|j
                   d| n|j
                  ||<   R l |S t        | j                        D ci c]/  \  }}||t        | j                        k  r| j                  |   nd1 c}}S c c}}w )Nr    :)rs   	enumeraterr   lenrq   kind)r2   outputtargetidxtoken_idoutcomes         r   token_to_outcomezLplMarket.token_to_outcome   s    %'F-- ^%.v/?/?%@ ^MC69C<P6Pfooc2VXGEL&++ay'ARXR]R]F8$^^ M "+4>>!:
X C#dmm2D,DdmmC("L
 	
 
s   "4C)re   zdict[str, str])rh   ri   rj   __annotations__rs   propertyr~   rk   r4   r   rm   rm      s;    
IM04N-4
 
r4   rm   c                  B    e Zd Zddd	 	 	 	 	 	 	 d	dZd
dZddZddZy)JsonlWriterd         ?flush_everyflush_interval_secondsc                  || _         t        d|      | _        t        d|      | _        d| _        t        j                         | _        | j                   j                  j                  dd       |j                  dd      | _        y )	Nr           r   Tparentsexist_okautf-8encoding)pathrM   r   r   _pendingtime	monotonic_last_flush_monotonicparentmkdiropen_file)r2   r   r   r   s       r   r3   zJsonlWriter.__init__   sq     	q+.&)#/E&F#%)^^%5"		td;YYsWY5
r4   c                `   | j                   j                  t        |             | j                   j                  d       | xj                  dz  c_        t	        j
                         }| j                  | j                  k\  s|| j                  z
  | j                  k\  r| j                          y y )N
r   )
r   writer   r   r   r   r   r   r   flush)r2   rownows      r   r   zJsonlWriter.write   s~    

s$

nnMMT---T///43N3NNJJL Or4   c                x    | j                   j                          d| _        t        j                         | _        y rW   )r   r   r   r   r   r   r1   s    r   r   zJsonlWriter.flush   s(    

%)^^%5"r4   c                X    | j                          | j                  j                          y r   )r   r   closer1   s    r   r   zJsonlWriter.close   s    



r4   N)r   r   r   r$   r   r"   re   rf   )r   rg   re   rf   rd   )rh   ri   rj   r3   r   r   r   rk   r4   r   r   r      sD    
 (+66 	6
 !&6 
6	6
r4   r   c            	      P   e Zd Z ed      dddddddd		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
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d#dZd$dZ	 	 	 	 	 	 	 	 	 	 	 	 d%dZ	 	 	 	 	 	 	 	 d&dZdddd'dZed(d       Zy))LplOrderbookRecorderdata/lpl      ?      @FN      @r   r   )output_rootsnapshot_interval_secondsreconnect_delay_secondsinsecure_ssldb_dsnstatus_interval_secondsjsonl_flush_everyjsonl_flush_interval_secondsc       	           || _         || _        || _        || _        || _        || _        || _        || _        |	| _        t        t        j                               | _        t        j                         | _        d| _        d| _        d| _        d| _        d| _        d | _        d | _        d | _        d| _        d| _        i | _        d | _        d | _        d | _        d | _        d | _        y )Nr   r    r   ) rn   r   r   r   r   r   r   r   r   r   uuiduuid4
session_idasyncioEvent
stop_eventmessage_indexconnection_idreconnect_countevents_writtensnapshots_writtenstarted_at_walllast_received_at_walllast_exchange_tslast_event_typelast_status_write_monotonicbooksmarketevents_jsonlsnapshots_jsonlstatus_path
output_dir)
r2   rn   r   r   r   r   r   r   r   r   s
             r   r3   zLplOrderbookRecorder.__init__   s     	&)B&'>$('>$!2,H)djjl+!--/ !"046:"15!+.(+-
(,0437(,'+r4   c                8    | j                   j                          y r   )r   setr1   s    r   stopzLplOrderbookRecorder.stop   s    r4   c                  K   | j                   | j                  z  }|j                  dd       || _        |dz  | _        t        j                  t        j                        | _	        t        |dz  | j                  | j                        | _        t        |dz  | j                  | j                        | _        | j                  rt!        j"                  d      nd }t!        j$                  |	      4 d {   }| j'                  |       d {   | _        | j(                  j*                  D ci c]  }|t-                c}| _        | j0                  | j(                  j                  | j(                  j2                  | j(                  j4                  | j(                  j6                  | j(                  j*                  | j(                  j8                  xs g D cg c]  }|j:                   c}t        j                  t        j                        j=                         d
}|dz  j?                  tA        jB                  |ddd      dz   d       | jD                  stG        jH                  d      rtK        | jD                        n	tM               }|4 d {   }|jO                  | j0                  | j(                  j                  | j(                  j2                  | j(                  j4                  | j(                  j6                  | j(                  j*                  tQ        |      t        j                  t        j                               d {    d}	d}
tS        jT                  | jW                  |      d| j                         }tS        jT                  | jY                  d      d| j                         }	 | j[                  ||       d {    | j]                  dd       | j_                  ||       d {    	 | jd                  jg                          |ji                          |ji                          tk        tR        j`                        5  | d {    d d d        tk        tR        j`                        5  | d {    d d d        |jm                  | j0                  t        j                  t        j                        |	|
       d {    | j                  r| j                  jo                          | j                  r| j                  jo                          | j]                  |	d|
       d d d       d {    d d d       d {    y 7 o7 Yc c}w c c}w 7 7 &7 7 z# tR        j`                  $ r d}	 tb        $ r}d}	tQ        |      }
 d }~ww xY w7 R# 1 sw Y   RxY w7 6# 1 sw Y   6xY w7 # | jd                  jg                          |ji                          |ji                          tk        tR        j`                        5  | d {  7   d d d        n# 1 sw Y   nxY wtk        tR        j`                        5  | d {  7   d d d        n# 1 sw Y   nxY w|jm                  | j0                  t        j                  t        j                        |	|
       d {  7   | j                  r| j                  jo                          | j                  r| j                  jo                          | j]                  |	d|
       w xY w7 # 1 d {  7  sw Y   xY w7 # 1 d {  7  sw Y   y xY ww)NTr   zrecording_status.jsonzorderbook_events.jsonlr   zorderbook_snapshots.jsonlF)ssl)	connector)r   rn   ro   rp   rq   rr   rs   
started_atzrecording_meta.json   ensure_asciiindent	sort_keysr   r   r   DATABASE_URL)r   rn   ro   rp   rq   rr   r   r   stopped_by_userr    lpl_snapshot_)namerunninglpl_status_)force	cancellederror)r   ended_atstatusnotesr   r   )8r   rn   r   r   r   r   r   r   r&   r   r   r   r   r   r   r   aiohttpTCPConnectorClientSession_fetch_marketr   rr   r-   r   r   ro   rp   rq   rs   __dict__	isoformat
write_textr   r   r   osgetenvr   r   create_sessionr   r   create_task_periodic_snapshots_periodic_status_load_initial_books_write_status_ws_loopCancelledError	Exceptionr   r   cancelr   finish_sessionr   )r2   r   r   httpr|   rz   metastore_factorystorer   r   snapshot_taskstatus_taskexcs                 r   runzLplOrderbookRecorder.run   s     %%		1
5$%(??'||HLL9'11..#'#D#D

  +44..#'#D#D 
 8<7H7HG((U3d	((9= K	H K	H $ 2 24 88DK@D@U@UVH(IK/VDJ"oo(( $ 8 8 KK00 KK00![[2226++2L2L2RPR#(.FOO# 'll8<<8BBDD //;;

4eANQUU  <  ;;"))N"; "$++.*, 
 % 2H 2H**#))!%!9!9![[11![[11"kk33":'||HLL9 + 	 	 	 + ' 3 3,,U3(4! &11)))4&tyyk2H224???&&y&=--t444 OO'')!((*&&(!'"8"89 ,+++,!'"8"89 *)))*..#'??!)hll!;%#	 /    (())//1++,,224&&vT&Ge2H 2H3K	H K	H K	H8V#2H	* @4-- (F  $FHE ,, , ** * OO'')!((*&&(!'"8"89 ,+++, , ,!'"8"89 *)))* * *..#'??!)hll!;%#	 /    (())//1++,,224&&vT&Ge2H 2H 2H 2H3K	H K	H K	H K	Hs  C8](:U);](>]U,!]5U/B]U42B+]U9]!B5\:U<A.\:VU?,VV	VA\:!V<'V9
(V<,!\:WW	
WA\:#W$A$\:]\7]](#]$](,]/]<\:?VVV6#V11V66W9V<<W\:	WW	\:A\4/Y5X86Y;	\4Y	 \4)Y>/Y20Y>5	\4>ZA
\4[A&\44\:7]:]	 ]]	]](]%]]%!](c           	       K   |j                  t         d| j                   t        j                  d            4 d {   }|j                          |j                          d {   }d d d       d {    t        j                  d            D cg c]  }t        |       }}t        |j                  d            D cg c]  }t        |       }}|st        d| j                         t        t        |j                  d      xs | j                        t        |j                  d	      xs d
      t        |j                  d      xs d
      ||      S 7 %7 7 # 1 d {  7  sw Y   xY wc c}w c c}w w)Nz/markets/slug/   totaltimeoutrq   clobTokenIdszmarket has no clobTokenIds: rn   conditionIdr    rp   )rn   ro   rp   rq   rr   )r8   r   rn   r   ClientTimeoutraise_for_statusr   r   r   RuntimeErrorrm   )r2   r   respr   rY   rq   rr   s          r   r   z"LplOrderbookRecorder._fetch_marketH  sR    88l.4))3  
 	$ 	$ !!#		#C	$ 	$ +5SWWZ5H*IJ$CIJJ+5cggn6M+NO4SYO	O!=dii[IJJSWWV_1		2SWW]39r:,23
 	
	$
 $	$ 	$ 	$ 	$ KOsr   ?FE&F$E-)E)*E-.F9E+: FF,F
FBF)E-+F-F 3E64F ;Fc                .  K   | j                   J | j                   j                  D ]  }|j                  t         dd|it	        j
                  d            4 d {   }|j                          |j                          d {   }d d d       d {    | j                  |   j                         | j                  ||d|d        d {    | j                  ||d       d {     y 7 7 p7 b# 1 d {  7  sw Y   rxY w7 =7 $w)	N/bookr|   
   r   paramsr  	rest_bookr   
event_typeasset_idexchange_tsinitial_rest)r   rr   r8   	CLOB_BASEr   r  r  r   r   r;   _record_event_record_snapshot)r2   r   r   r|   r  r   s         r   r   z(LplOrderbookRecorder._load_initial_books[  s$    
 {{&&&-- 	IHxx+U#"H---B7    ( ( %%' IIK'( ( JJx //4$$&!  %    ''xHHH!	I( (( ( ( ( Isx   ADC6 D#$C<C8C<DC:;DDD.D/D8C<:D<D	DD	
DDc           	     0  K   | j                   J t        j                  | j                   j                  ddd      }| j                  j                         s| xj                  dz  c_        | j                  dkD  }|r| xj                  dz  c_        	 | j                  |d| j                  || j                  r| j                  j                         nd| j                  dddd        d {    |r| j                  ||d	       d {    d d
d}| j                  rt        j                         |d<   t        j                   t"        fi |4 d {   }|j%                  |       d {    t'        j(                  | j+                  |            }	 | j                  j                         s	 t'        j,                  |j/                         d       d {   }t3        |t4              r|j7                         }|r|j9                         j;                  d      s	 t        j<                  |      }	| jA                  |||	       d {    | j                  j                         s|jC                          tE        t&        jF                        5  | d {    d d d        d d d       d {    | j                  j                         s~y y 7 7 7 7 s7 	# t&        j0                  $ r Y ew xY w# t        j>                  $ r Y w xY w7 7 # 1 sw Y   ~xY w# |jC                          tE        t&        jF                        5  | d {  7   d d d        w # 1 sw Y   w xY wxY w7 # 1 d {  7  sw Y   xY w# t&        jF                  $ r  tH        $ rf}
| j                  j                         sAtK        jL                  d|
 d       t'        jN                  | jP                         d {  7   Y d }
~
Sd }
~
ww xY ww)Nr   T)
assets_idstypecustom_feature_enabledr   	reconnectr    )r  r   is_reconnectr   r   r  rest_book_after_reconnectr  )ping_intervalopen_timeoutr   r   r  {u   LPL CLOB WS 断线: u   ; 重新连接))r   r   r   rr   r   is_setr   r   r  r   r   _reload_all_booksr   r   _create_unverified_context
websocketsconnectCLOB_WSsendr   r   _pingwait_forrecvTimeoutErrorr   bytesdecodestrip
startswithr   r   _handle_ws_messager   r   r   r   r
   warningsleepr   )r2   r   r   sub_msgr  connect_kwargsws	ping_taskraw_msgmsgr   s              r   r   zLplOrderbookRecorder._ws_loops  s    
 {{&&&**"kk33 *.
 //((*!#--1L$$)$5F((&1)-););(4  $99 !66@@B!#+/+?+?
  + $ )   "  00u>YZZZ%)$&2 $$,/,J,J,LN5)%--gHH , ,B'''*** ' 3 3DJJrN CI,"&//"8"8":)070@0@TW0X*X  *'59*1..*:#*'--/2L2LS2Q ()&*jj&9 #'"9"9%s"KKK #'//"8"8": "((*%g&<&<= ,"+OO,), ,? //((**$ [,*
 +Y#*#7#7 ) () $(#7#7 ) ()K ,, , "((*%g&<&<= ,"+OO, , ,), , , ,, ))  F--/NN%9#n#MN!--(D(DEEEFs  BPAN .K/N KA
N KN M</K"0(M<L,4(K(K%K(!AL,$L9L,LL,/)M<L LL #M<+N 6M:7N ;PPN N N "M<%K((K?;L,>K??L,LL,LL,L  L)	%M<,*M7M+	MM+	"	M7+M40M77M<:N <NNN
N P-APPPPPPc                &  K   | j                   J t        |j                  d      xs d      }t        |j                  d            }t        |j                  d      xs d      }| j	                  |||||       d {    |dk(  r-|| j
                  v r| j
                  |   j                  |       y |dk(  ri }|j                  d	g       D ]P  }t        |j                  d      xs d      }	|	| j
                  v s0|j                  |	g       j                  |       R |j                         D ]#  \  }	}
| j
                  |	   j                  |
       % y |d
k(  r,|| j
                  v r| j                  |||d       d {    y y y 7 7 
w)Nr  unknown	timestampr  r    r  bookprice_changeprice_changestick_size_change rest_book_after_tick_size_change)r   r   r8   r+   r  r   r;   
setdefaultappendr^   rC   _reload_book)r2   r   r   r8  r  r  r  groupedrB   r|   rA   s              r   r0  z'LplOrderbookRecorder._handle_ws_message  s     {{&&&.;)<
!#''+"67swwz*0b1  !# ! 
 	
 	
 H

$:JJx //4>)79G''/26 Dvzz*5;<tzz)&&x4;;FCD &-]]_ :!'

8$009:--(djj2H##D%;]^^^ 3I-%	
& _s,   A>F FA>F BFFFFc                |   K   t        | j                        D ]  }| j                  ||||       d {      y 7 wr   )r   r   rC  )r2   r   r   r  r|   s        r   r"  z&LplOrderbookRecorder._reload_all_books  s?      TZZ( 	GH##D%:FFF	GFs   0<:<c                  K   |j                  t         dd|it        j                  d            4 d {   }|j	                          |j                          d {   }d d d       d {    | j                  |   j                         | j                  ||||d        d {    | j                  |||       d {    y 7 7 n7 `# 1 d {  7  sw Y   pxY w7 ;7 "w)Nr
  r|   r  r   r  r  )
r8   r  r   r  r  r   r   r;   r  r  )r2   r   r   r|   r  r  r   s          r   rC  z!LplOrderbookRecorder._reload_book  s      88k)))3  
 	$ 	$ !!#		#C	$ 	$ 	

8++C0  ! ! 
 	
 	
 ##E8Z@@@	$ $	$ 	$ 	$ 	$	
 	Ast   6C,CC,$C C!C%C,0C1;C,,C(-C,C*C,CC,C%CC%!C,*C,c                8  K   | j                   j                         sxt        j                  | j                         d {    t        | j                        D ]  }| j                  ||d       d {     | j                   j                         swy y 7 V7 %w)Nperiodic)r   r!  r   r2  r   r   r   r  )r2   r   r|   s      r   r   z(LplOrderbookRecorder._periodic_snapshots  sy     //((*-- > >??? , I++E8ZHHHI //((*?Hs(   =BB 2B2B3 BBBc                   K   | j                   j                         sT| j                  |       t        j                  | j
                         d {    | j                   j                         sSy y 7 !wr   )r   r!  r   r   r2  r   )r2   r   s     r   r   z%LplOrderbookRecorder._periodic_status  sQ     //((*v&-- < <=== //((*=s   AA4A2A40A4c                 K   | j                   J | xj                  dz  c_        t        j                  t        j
                        }t        j                         }|| _        || _	        || _
        | j                   j                  j                  |d      }| j                  | j                   j                  | j                   j                  |||| j                  | j                   |r|j#                         nd|j#                         ||d}	| j$                  J | j$                  j'                  |	       | xj(                  dz  c_        | j+                  d       |j-                  | j                  | j                   j                  | j                   j                  |||| j                  | j                   ||||       d {    y 7 w)Nr   r    )r   rn   ro   r  r}   r  r   r   r  received_at_wallreceived_at_monotonic_nsraw_jsonr   )r   r   r   r   r   r&   r   monotonic_nsr   r   r   r~   r8   r   rn   ro   r   r   r   r   r   r   insert_event)
r2   r   r   r  r  r  rK  rL  r}   r   s
             r   r  z"LplOrderbookRecorder._record_event  s     {{&&&a#<<5#'#4#4#6 %5" +)++..228R@//KK$$ KK44 $!//!//6A;002r 0 : : <(@
   ,,,$q 9%  !!11!,,,,#-%= ! 
 	
 	
s   G G
GG
c                  K   | j                   J | j                  |   }|j                         \  }}|j                         \  }}t	        j
                  t        j                        }	| j                   j                  j                  |d      }
|j                         }|j                         }| j                  | j                   j                  ||
|	j                         | j                  |||||d}| j                   J | j                   j#                  |       | xj$                  dz  c_        |j'                  | j                  | j                   j                  ||
|	| j                  |||||       d {    y 7 w)Nr    )r   rn   r  r}   snapshot_at_wallr   rO   rT   r`   rc   sourcer   )r   r   rO   rT   r   r   r   r&   r~   r8   r`   rc   r   rn   r   r   r   r   r   insert_snapshot)r2   r   r|   rR  r<  rO   	_bid_sizerT   	_ask_sizerQ  r}   r`   rc   r   s                 r   r  z%LplOrderbookRecorder._record_snapshot9  s]     {{&&&zz(#"mmo)"mmo)#<<5++..228R@__&
__&
//KK$$  0 : : <!//  $$
 ##///""3'!###!!-,,!! $ 
 	
 	
s   E6F 8E>9F r    r   c                  | j                   y t        j                         }|s|| j                  z
  | j                  k  ry || _        t        j                  t        j                        }| j                  't        || j                  z
  j                         d      nd }i d| j                  d| j                  r| j                  j                  n| j                  d|d|d|j                         d| j                   r| j                   j                         ndd	t#        | j$                  xs d      d
| j&                  d| j                  d| j(                  d| j*                  d| j,                  d| j.                  d| j0                  d| j2                  d| j4                  d| j6                  | j8                  r| j8                  j                         nd| j                  r| j                  j                         nd|t;        | j<                        d}| j                   j?                  tA        jB                  |ddd      dz   d       y )N   r   rn   r   r   
updated_atr   r    r   r   r   r   r   r   r   r   r   r   r   )r   r   last_message_age_secondstoken_countFr   Tr   r   r   r   )"r   r   r   r   r   r   r   r   r&   r   roundtotal_secondsr   r   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   r   r   )r2   r   r   r   now_monotonicr   last_agepayloads           r   r   z"LplOrderbookRecorder._write_statuse  sf   #( @ @@4C_C__+8(ll8<<( ))5 3333BBDaH 	

$//
DKK$$
 f
 U	

 #--/
 d>R>R$..88:XZ
 #doo34
 ()G)G
 &t'C'C
  !7!7
 +D,M,M
 T//
 t33
 T//
 d11
   !7!7!
" t33#
$ FJEZEZ 5 5 ? ? A`b:>:T:T**446Z\(0tzz?/
2 	##JJwU1MPTT 	$ 	
r4   c                   K   	 	 t        j                  d       d {    | j                  d       d {    77 7 # t        $ r Y y w xY ww)Nr  PING)r   r2  r'  r   )r5  s    r   r(  zLplOrderbookRecorder._ping  sN     	mmB'''ggfo%% '% 		s9   AA  <A  >A  A   	A	AAA)rn   r   r   r   r   r"   r   r"   r   boolr   
str | Noner   r"   r   r$   r   r"   re   rf   rd   r   aiohttp.ClientSessionre   rm   )r   re  r   r   re   rf   )r   r   r   re  re   rf   )r   r   r   re  r8  rg   re   rf   )r   re  r   r   r  r   re   rf   )
r   re  r   r   r|   r   r  r   re   rf   )r   r   re   rf   )r   r   re   rf   )r   r   r   rg   r  r   r  r   r  datetime | Nonere   rf   )r   r   r|   r   rR  r   re   rf   )r   r   r   rb  r   r   re   rf   )r5  r	   re   rf   )rh   ri   rj   r   r3   r   r   r   r   r   r0  r"  rC  r   r   r  r  r   staticmethodr(  rk   r4   r   r   r      s    
 !,+.),"!),!$.1', ', 	',
 $)', "'', ', ', "'', ', ',', 
',R]H~
&I#I !I 
	I0GF GF $GF 
	GFR_ _ $_ 	_
 
_>G#G !G 	G
 
GA#A !A 	A
 A 
A0I>
0
 0
 	0

 0
 0
 %0
 
0
d*
 *
 *
 	*

 
*
X ;@b ,
\  r4   r   c            
      t     e Zd Zd ed      dddddddd		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fd	Zdd
Z xZS )LplEventOrderbookRecorderNr   r   r   Fr   r   )	marketsr   r   r   r   r   r   r   r   c       
        R    t         |   ||||||||	|
	       || _        || _        y )N)	rn   r   r   r   r   r   r   r   r   )superr3   
event_slugrequested_markets)r2   rm  rj  r   r   r   r   r   r   r   r   	__class__s              r   r3   z"LplEventOrderbookRecorder.__init__  sC     	#&?$;%$;/)E 	 
	
 %!(r4   c           	     Z  K   |j                  t         d| j                   t        j                  d            4 d {   }|j                          |j                          d {   }d d d       d {    t        | j                  j                  d      xs g | j                        }|s.t        d| j                   dt        | j                               g }g }|D ]y  }t        |j                        D ]_  \  }}	|j                  |	       |t        |j                        k  r|j                  |   n|	}
|j                  |j                    d|
        a { t        t#        |            t        |      k7  rt        d	| j                         t%        t'        |j                  d
      xs | j                        dt'        |j                  d      xs |j                  d      xs | j                        |||      S 7 7 7 # 1 d {  7  sw Y   xY ww)Nz/events/slug/r   r   r  rj  z2event has no requested target markets: event_slug=z	 markets=ru   z&duplicate token ids in event targets: rn   r    titleticker)rn   ro   rp   rq   rr   rs   )r8   r   rm  r   r  r  r   r   rn  r  r]   rv   rr   rB  rw   rq   rx   r   rm   r   )r2   r   r  r   targetsrr   rq   rz   r{   r|   r}   s              r   r   z'LplEventOrderbookRecorder._fetch_market  s    88l-'89))3  
 	$ 	$ !!#		#C	$ 	$ (OOGGI$"""

 "oo.it?U?U8V7WY 
  "	  	<F!*6+;+;!< <X  *25FOO8L2L&//#.RZ6;;-q	 :;<	< s9~#i.0!GGXYZZSWWV_78)QSWWX->Q$//R"
 	
;	$
 $	$ 	$ 	$ 	$sZ   ?H+HH+$H)H*H.H+9H:FH+HH+H(HH(#H+)rm  r   rj  zset[str] | Noner   r   r   r"   r   r"   r   rb  r   rc  r   r"   r   r$   r   r"   re   rf   rd  )rh   ri   rj   r   r3   r   __classcell__)ro  s   @r   ri  ri    s    
 $( ,+.),"!),!$.1) ) !	)
 ) $)) "') ) ) "') ) ',) 
)8%
r4   ri  )r   r	   re   z	list[Any])r   r	   re   rf  )*
__future__r   r   r   r   r   r   r   
contextlibr   dataclassesr   r   r   pathlibr   typingr	   r   r$  logurur
   analysis.safe_btc5.clientsr   analysis.safe_btc5.typesr   activity_tradesr   r   r   r   r   r   r  r&  r   r+   r-   rm   r   r   ri  rk   r4   r   <module>r~     s    "   	 
    ! '      1 - @ B B *	
@,:
 :
z 
 
 
." "J^ ^BB
 4 B
r4   