
    ij                       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m	Z	 ddl
mZ ddlmZmZ ddlmZmZ ddlZddlmZ  eej.                  j1                  d	d
            Zej.                  j1                  dd      Zej.                  j1                  dd      Zej.                  j1                  dd      ZdddddddZd Zd Zd Z  G d de      Z!d Z"e#dk(  r e"        yy)z=Dash mensile live Account 2, separata dalla Dash v2 corrente.    )annotationsN)BaseHTTPRequestHandlerThreadingHTTPServer)	HTTPError)parse_qsurlsplit)Requesturlopen)
adapt_liveV2_MONTHLY_PORT5512V2_STATS_UPSTREAMzhttp://127.0.0.1:5511V2_STATS_USER V2_STATS_PASS)
index.htmltext/html; charset=utf-8)app.js%application/javascript; charset=utf-8)	charts.jsr   )	style.cssztext/css; charset=utf-8)r   indexr   r   r   r   c                     t        j                  t         dt         j	                               j                         } d|  S )N:zBasic )base64	b64encode	AUTH_USER	AUTH_PASSencodedecode)tokens    [/opt/charter-live/backups/review_navigation_counts_20260917_120941/candidate/live_server.py_auth_headerr#      s<    	{!I;7>>@AHHJEE7    c                     t        t         ddt               i      } t        | d      5 }t	        j
                  |      cd d d        S # 1 sw Y   y xY w)Nz/jsonAuthorization)headers#   timeout)r	   UPSTREAMr#   r
   jsonload)requestresponses     r"   _fetch_snapshotr0   #   sI    
%(?LN2STG	"	% #yy"# # #s   AAc                   | t         _        | d   d d t         _        t        t         _        t         j
                  j                          t        j
                  ||xs t         j                  |      }| j                  di       |d<   |S )Ngenerated_at   review_counts)	dashboardSNAPSHOTCURRENT_MONTHr   adaptmodelcache_clearget)snapshotviewmonth	alignmentresults        r"   _live_modelrA   )   sl    !I&~6r:I IOOO!__T5#CI,C,CYOF&ll?B?F?Mr$   c                  8    e Zd Zd Zd Zd	dZd Zd Zd Zd Z	y)
Handlerc                     y )N )self_s     r"   log_messagezHandler.log_message4   s    r$   c                   t         j                  j                  dd      j                         j	                         dvxsA t
         xs8 t        j                  | j                  j                  dd      t                     S )NV2_STATS_AUTH_ENABLED0>   1yestruer&   r   )
osenvironr;   striplowerr   hmaccompare_digestr'   r#   rF   s    r"   _authorizedzHandler._authorized7   s    zz~~5s;AACIIKSgg  Goxkx  G  }A  }P  }P  QU  Q]  Q]  Qa  Qa  bq  su  Qv  xD  xF  }G  	Gr$   Nc                   | j                  |       | j                  d|       | j                  dt        t        |                   | j                  dd       | j                  dd       |r| j                  dd| d	       |r| j                  d
|       | j	                          | j
                  j                  |       y )NContent-TypeContent-LengthzCache-Controlzno-storezX-Content-Type-OptionsnosniffzContent-Dispositionzattachment; filename=""Location)send_responsesend_headerstrlenend_headerswfilewrite)rF   statusbodycontent_type
attachmentlocations         r"   _sendzHandler._send:   s    6"6)3s4y>:*519=26LZLXY4Z[Z2

r$   c                    | j                  d       | j                  dd       | j                  dd       | j                          y )Ni  zWWW-AuthenticatezBasic realm="v2-stats"rY   rK   )r]   r^   ra   rU   s    r"   _unauthorizedzHandler._unauthorizedG   s?    3+-EF)3/r$   c                z   d }| j                   dk(  r>| j                  j                  t        | j                  j                  dd                  }t               dd}| j                  j                  d      r| j                  d   |d<   t        t         | j                   ||| j                         }	 t        |d	      }|j                         }| j                  |j                  ||j                  j                  dd
      |j                  j                  d            S # t        $ r}|}Y d }~rd }~ww xY w)NPOSTrY   rK   z/v2-monthly/)r&   zX-Dashboard-BaserX   )datar'   method(   r)   r   r\   rh   )commandrfilereadintr'   r;   r#   r	   r+   pathr
   r   ri   rd   )rF   re   r'   r.   r/   excpayloads          r"   _proxy_reviewzHandler._proxy_reviewM   s*   <<6!::??3t||'7'78H#'N#OPD$0NW<<N+&*ll>&BGN#XJtyyk2wW[WcWcd	w3H --/zz(//7H4D4D4H4HYs4t  @H  @P  @P  @T  @T  U_  @`z  a  	a  	H	s   6D% %	D:.D55D:c           	     8   t        | j                        }d|j                  j                  d      v r0| j                         s| j	                         S | j                         S |j                  j                  dd      d   }|t        v rt        |   \  }}|dk(  rK|j                  dk7  r<|j                  j                  d      s!| j                  dd|j                  dz         S t        j                  |z  j                         }|dk(  rH|j                  d	d
      }|j                  dd      }|j                  dd      }|j                  dd      }| j                  d||      S |dk(  rGt               }t        j                   dd|d   d      j#                         }| j                  d|d      S |dvr| j                  dd      S t%        |j&                  d      }t)        d |j+                         D              r| j                  dd      S 	 t               }t-        ||j/                  d d!g      d"   |j/                  d#d g      d"   |j/                  d$d%g      d"         }|d'k(  rJ|d    d(k(  rd)|d$   z   n|d    d!k(  rd*n|d#   }	| j                  dt        j6                  |      d+d,|	 d-      S t        j                   |d.d./      j#                  d0      }| j                  d|d1      S # t0        t2        t4        f$ r | j                  dd&      cY S w xY w)2Nz/review/   r   i4  r$   rq   s   ANTEPRIMA LOCALE · BLOCCO 4s    OPERATIVA · DATI LIVE ACCOUNT 2s   Nessun collegamento al trading.s.   Sola lettura: nessun comando verso il trading.sa   Saldo e posizioni sono quelli acquisiti nello snapshot, <strong>non valori live attuali</strong>.s=   Saldo e posizioni sono aggiornati dalla Dash v2 di Account 2.s'   Rilettura ogni 30s · stessa fotografias!   Aggiornamento automatico ogni 30s   healthokliver2   )rd   modeupstream_generated_atzapplication/json>   report
export.csvi  s	   Not foundT)keep_blank_valuesc              3  8   K   | ]  }t        |      d k7    yw)r|   N)r`   ).0valuess     r"   	<genexpr>z!Handler.do_GET.<locals>.<genexpr>u   s     >Fs6{a>s   i  s   Duplicate query parametersr=   allr   r>   r?   fulls   Periodo o vista non validir   comparezconfronto-mesi-storicoztext/csv; charset=utf-8zdash-v2-z	-live.csvF)ensure_ascii	allow_nanzutf-8zapplication/json; charset=utf-8)r   rv   rstriprV   rk   ry   rsplitSTATICendswithri   r5   ROOT
read_bytesreplacer0   r,   dumpsr   r   queryanyr   rA   r;   
ValueErrorKeyErrorOverflowError
export_csv)
rF   parsedleafnamekindre   r<   paramsrn   scopes
             r"   do_GETzHandler.do_GET\   s-   $))$**3//##%))++%%''{{!!#q)"-6>JD$|#s(:6;;CWCWX[C\zz#sV[[35FzGGNNT)557D|#||$IKtu||$FHyz||  %I  KK  L||$TVz{::c4..8&(H::vX`aoXpqryy{D::c4);<<//::c<00&,,$?>fmmo>>::c#@AA	B&(HxFUG)DQ)GT[^b]cIdefIgioisist  CI  BJ  jK  LM  jN  OD <=A&\Y=V%[(99jnoujvzj]f  FJ  KR  FSE::c9#7#7#=?X\dejdkktZuvvzz$UeDKKGTzz#t%FGG Hm4 	B::c#@AA	Bs   AK0 0&LLc                    dt        | j                        j                  v r0| j                         s| j                         S | j	                         S | j                  dd      S )Nz/review/i  s   Method not allowed)r   rv   rV   rk   ry   ri   rU   s    r"   do_POSTzHandler.do_POST   sU    $)),111##%))++%%''zz#455r$   )z
text/plainNN)
__name__
__module____qualname__rH   rV   ri   rk   ry   r   r   rE   r$   r"   rC   rC   3   s)    Ga$HL6r$   rC   c                     t        dt        ft              } t        dt         d       	 | j	                          | j                          y # t
        $ r Y w xY w# | j                          w xY w)Nz	127.0.0.1z)Dash mensile live Account 2 su 127.0.0.1:T)flush)r   PORTrC   printserve_foreverKeyboardInterruptserver_close)servers    r"   mainr      sg     +t!4g>F	5dV
<DI 	   	s#   A 	AA AA A.__main__)$__doc__
__future__r   r   rS   r,   rO   http.serverr   r   urllib.errorr   urllib.parser   r   urllib.requestr	   r
   preview_serverr5   live_adapterr   ru   rP   r;   r   r+   r   r   r   r#   r0   rA   rC   r   r   rE   r$   r"   <module>r      s    C "    	 C " + + " #
2::>>+V45::>>-/FGJJNN?B/	JJNN?B/	27<AG9

#T6$ T6n zF r$   