
    DNiO                       d Z ddlm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ZddlZddlmZ ddlmZ ddlmZ ej$                  j'                  ej$                  j'                  ej$                  j)                  e                  Zeej$                  vrej$                  j/                  de       dd	lmZ dd
lmZ ddlmZ d+dZd,dZd-dZ d.dZ!d/dZ" ejF                          ejH                  ddd       ejH                  ddde%       ejH                  ddd ej                  de             ejH                  ddd       ejH                  d dd!       ejH                  d"d#d       ejH                  d$dd%&       ejH                  d'dd(&      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0d)                                                               Z&e'd*k(  r e&        yy)1z
Run a mobile-friendly LoL signal receiver page.

Open the page on a phone, tap an event button, and the server writes
data/lpl_signals/<event_slug>/signals.jsonl.
    )annotationsN)Path)Any)web)load_dotenv)logger)make_app)select_target_markets)
GAMMA_BASEc                    | 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      scripts/run_lpl_signal_server.py
_json_listr      sn    
{	#t
#s	JJsOE #5$/u7R7I ## 	I	s   A A+*A+c                  K   t        j                  d      }ddi}t        j                  ||      4 d {   }|j                  t         d|        4 d {   }|j                          |j                          d {   }t        |t              r|ni cd d d       d {    cd d d       d {    S 7 7 d7 >7 7 # 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)N   )totalz
User-AgentzMozilla/5.0)timeoutheadersz/events/slug/)	aiohttpClientTimeoutClientSessiongetr   raise_for_statusr   r   dict)
event_slugr   r   httprespdatas         r   _fetch_eventr&   -   s     ##"-G]+G$$WgF : :$88zl-
|DE 	: 	:!!#$D%dD14r	: 	: 	:: : :	:$	::	: 	: 	:: : : : :s   6DB>DC/C C/$CCCC/'C(C/,D8C9D C/CC/DC	CC	C/D(C+)D/D5C86D=Dc                   t        | |j                  d      xs g d       }i }|D ]  }|j                  |j                  |j                  |j
                  t        |j                  d d       D cg c]1  \  }}|t        |j                        k  r|j                  |   nd|d3 c}}d||j                  <    |S c c}}w )Nmarkets    )nametoken_id)slugcondition_id	market_idquestionteams)r
   r   r-   r.   r/   r0   	enumerate	token_idslenoutcomeskind)r"   eventtargetsoutputtargetidxr,   s          r   _main_marketsr<   7   s    #J		)0D0JDQGF 
KK"//)) &/v/?/?/C%D
 "C 58#foo:N4NFOOC0TV (
v{{
 Ms   /6B<c                  K   | sddddi fS t        |        d {   }t        | |      }|j                  d      xs i }|j                  d      xs g }t        |      dk\  rt	        |d   j                  d      xs d      t	        |d	   j                  d      xs d      t	        |d   j                  d
      xs d      t	        |d	   j                  d
      xs d      |fS t        d|        7 ٭w)NABr*   	moneyliner1   r)   r   r+      r,   z*moneyline market not found for event_slug=)r&   r<   r   r4   r   RuntimeError)r"   r7   r(   r@   r1   s        r   _fetch_market_configrC   K   s     CR##z**EJ.GK(.BIMM'"(bE
5zQaV$+,aV$+,aZ(.B/aZ(.B/
 	
 CJ<P
QQ +s   C6C4CC6c                     t        j                          t        j                  t        j                  t
        j                  j                  dd      j                         dd       y )N	LOG_LEVELINFOzQ<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level:<7}</level> | {message}T)levelformatcolorize)	r   removeaddsysstderrosenvironr   upper     r   _setup_loggingrS   ]   s?    
MMO
JJ

jjnn[&1779b	rR   z--hostz0.0.0.0T)defaultshow_defaultz--porti  )rT   rU   typez--output-rootzdata/lpl_signalsF)	file_okay	path_typez--tokenr*   zHOptional signal token. Defaults to SIGNAL_SERVER_TOKEN env when omitted.)rT   helpz--event-slugz5Preset event slug. Defaults to SIGNAL_EVENT_SLUG env.z--default-marketgame1z
--editablez-Allow editing preset event/team/token fields.)is_flagrY   z--hide-tokenz Do not expose token in the page.c                   t                t                |xs t        j                  dd      }|xs t        j                  dd      }	 t	        j
                  t        |            \  }}	}
}}t        j                  d|  d| d	| d
|rdnd d| d| d|
 d|	 d|        t        j                  t        |||||	|
|||| |       | |       y # t        $ r/}t        j                  d|        ddddi f\  }}	}
}}Y d }~d }~ww xY w)NSIGNAL_SERVER_TOKENr*   SIGNAL_EVENT_SLUGu3   无法从 Gamma 获取队名/token，使用占位: r>   r?   u!   启动 LoL signal server: http://:z output_root=z auth=onoffz event_slug=z team_a=z team_b=)output_roottokenr"   team_ateam_bteam_a_token_idteam_b_token_idr(   default_marketlock_configexpose_token)hostport)r   rS   rN   getenvasynciorunrC   	Exceptionr   warninginfor   run_appr	   )rk   rl   rb   rc   r"   rh   editable
hide_tokenrd   re   rf   rg   r(   excs                 r   mainrw   g   sG   8 M9RYY4b9EAryy)<bAJYDKKK ,E
A' KK
+D64&k] S5)j\ B?+8F81_<M	O
 KK#!++)$'	
   YLSERSDGbRTVXDXA'Ys   
$C 	D	%DD	__main__)r   r   returnz	list[Any])r"   r   ry   dict[str, Any])r"   r   r7   rz   ry   rz   )r"   r   ry   z)tuple[str, str, str, str, dict[str, Any]])ry   None)rk   r   rl   intrb   r   rc   r   r"   r   rh   r   rt   boolru   r}   ry   r{   )(__doc__
__future__r   rN   rL   r   rn   pathlibr   typingr   r   clickr   dotenvr   logurur   pathdirnameabspath__file__ROOTinsert$analysis.lpl_orderbook.signal_serverr	   &analysis.lpl_orderbook.activity_tradesr
   analysis.safe_btc5.clientsr   r   r&   r<   rC   rS   commandoptionr|   rw   __name__rQ   rR   r   <module>r      s   # 	 
         	wwrwwrwwx'@ABsxxHHOOAt 9 H 1:(R$ h	=h4cB	et	4	 	S
 nb/fg 'ElD/^_nd1ST*
*
* * 	*
 * * * * 
* U ` F h C > $*Z zF rR   