
    ?EFjo                        U d 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
 ddlZddlmZmZmZmZmZmZmZmZ ddlmZmZmZ ddlZ ee      Zej8                  j;                  dd	      e_        d
ej>                  d<   ejA                  ejB                         dZ"de" dZ#	  ed      jI                         jK                         Z& e
d      Z( e
d      Z)i Z*e+e,d<   dZ-i Z.e+e,d<   dZ/dZ0dZ1de+fdZ2 e2       Z3e3j;                  dd      Z4dddZ5e+e,d<    ejl                         Z7i Z8e+e,d<   dZ9d d!d"d#Z:de;fd$Z<de;fd%Z=de;fd&Z>de?fd'Z@d(d)d*d+d,d-d.ZAd/d0d1d2d3d4d5ZBd6e;d7e;d8e;de+fd9ZCd:eDde+fd;ZEd6e;d7e;d8e;fd<ZFd6e;d7e;d8e;deDe+   fd=ZGd{d?eHde;fd@ZIdAe;de+fdBZJdCe;fdDZKde;fdEZLdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUZMdCe;de+fdVZNdCe;de+fdWZOej                  dX        ZQej                  dYdZd[g\      d]        ZSej                  d^      d_        ZTej                  d`      eda               ZUej                  db      edc               ZVej                  dd      ede               ZWej                  df      edg               ZXej                  dh      edi               ZYej                  dj      edk               ZZej                  dl      edm               Z[ej                  dn      edo               Z\ej                  dp      edq               Z]ej                  dr      ds        Z^dt Z_du Z` e`        edvk(  r7 e?ej8                  j;                  dwdx            Zaej                  dyead>z       yy# e'$ r dZ&Y w xY w)|z
Dashboard Borrello.
Login simples + sidebar fixa.
Abas: Visao Geral, Meta Ads (real), Google Ads (placeholder),
Hotmart (real), Rastreamento.
    N)datetime	timedelta)Path)ZoneInfo)Flaskrender_templaterequestredirecturl_forsessionflashjsonify)check_loginlogin_requiredUSERSDASHBOARD_SECRETz#borrello-dash-secret-change-me-2026borrellodashSESSION_COOKIE_NAMEact_517468148842987z!https://graph.facebook.com/v21.0/z	/insightsz%/opt/mia/config/meta_token_renato.txt zAmerica/Sao_PauloUTC_meta_cachei  _overview_cachez4https://api-sec-vlc.hotmart.com/security/oauth/tokenz.https://developers.hotmart.com/payments/api/v1returnc                  F   i } t        d      }|j                         s| S |j                         j                         D ]`  }|j	                         }|r|j                  d      sd|vr+|j                  dd      \  }}|j	                         | |j	                         <   b | S )Nz$/opt/mia/config/hotmart_borrello.env#=   )r   exists	read_text
splitlinesstrip
startswithsplit)envpathlinekvs        5/opt/mia/workspace/clientes/borrello/dashboard/app.py_load_hotmart_envr+   B   s    
C67D;;=
 ++- #zz|ts+s$zz#q!1AGGI# J    HOTMART_BASIC        )token
expires_at_hotmart_token_cache_hotmart_cacheiX        Z   7d30d90dc                     	 t        | xs d      }|d}|j                  dd      j                  dd      j                  dd      }d| S # t        t        f$ r d}Y Nw xY w)Nr   r.   ,.2f,@.R$ )float	TypeError
ValueErrorreplace)valuer)   ss      r*   _fmt_brlrF   e   sq    %*1 T(A			#s##C-55c3?A9	 z" s   A A A c                     	 t        t        | xs d            }|dj	                  dd      S # t        t        f$ r d}Y 'w xY w)Nr   r<   r>   )intr@   rA   rB   rC   rD   r)   s     r*   _fmt_intrJ   o   sN    ejq!" UC%% z" s   . AAc                 \    	 t        | xs d      }|ddS # t        t        f$ r d}Y w xY w)Nr   r.   z.2f%)r@   rA   rB   rI   s     r*   _fmt_pctrM   w   s@    %*1 WA; z" s    ++c           	          | syd}| D ]U  }|j                  d      xs dj                         }|dv s+	 |t        t        |j                  d      xs d            z  }W |S # t        t
        f$ r Y kw xY w)Nr   action_typer   )leadz offsite_conversion.fb_pixel_leadrD   )getr"   rH   r@   rA   rB   )actionstotalats       r*   _extrair_leadsrV      s    E UU=!'R..0<<U155>#6Q788	 L z* s   *A""A43A4todaylast_7dlast_30d
this_month
last_month	yesterday)hoje	ultimos_7
ultimos_30este_mesmes_passadoontemHojeOntemUltimos 7 diaszUltimos 30 diaszEste meszMes passado)rW   r\   rX   rY   rZ   r[   presetcustom_inicio
custom_fimc                    t         st        d      t         dddd}d}| dk(  ra|r_|r]d|d	|d
|d<   	 t        j                  |      j	                  d      }t        j                  |      j	                  d      }| d| }n1t        j                  | d      }||d<   t        j                  |d      }t        j                  t        |d      }|j                  dk7  r(t        d|j                   d|j                  d d        |j                         }	|	j                  dg       xs g |dS # t
        $ r
 | d| }Y w xY w)NzCToken Meta nao configurado em /opt/mia/config/meta_token_renato.txtzVcampaign_name,campaign_id,spend,impressions,clicks,ctr,cpm,cpc,actions,reach,objectivecampaignd   )access_tokenfieldslevellimitr   custom
{"since":"","until":""}
time_rangez%d/%m/%Yz a rX   date_presetre   r4   paramstimeout   z	Meta API : i,  data)campanhas_rawperiodo_label)_META_TOKENRuntimeErrorr   fromisoformatstrftime	ExceptionMETA_PRESET_MAPrQ   META_LABEL_MAPrequestsMETA_GRAPH_URLstatus_codetextjson)
rf   rg   rh   rw   labeldidfru   rr{   s
             r*   buscar_meta_insightsr      sN   `aa $j	F Em
@MzZ|	6''6??
KB''
3<<ZHBd#bTNE &))&)< +}"";0@A^FB?A}}Yq}}oRt~FGG668D!XXfb17R%PP  	6$oS5E	6s   AD2 2EEr|   c                 j   d}d}d}d}d}g }| D ]  }	 t        |j                  d      xs d      }	 t	        t        |j                  d      xs d            }		 t	        t        |j                  d      xs d            }
	 t        |j                  d      xs d      }	 t        |j                  d      xs d      }	 t        |j                  d      xs d      }	 t	        t        |j                  d	      xs d            }t        |j                  d
      xs g       }|dkD  r||z  nd}||z  }||	z  }||
z  }||z  }||z  }|j                  |j                  d      xs d|j                  d      xs dt        |      |t        |	      t        |
      ||dkD  rt        |      ndt        |      t        |      |dkD  rt        |      ndd        |j                  d        |dkD  r||z  nd}|dkD  r||z  dz  nd}|dkD  r||z  dz  nd}|dkD  r||z  nd}t        |      t        |      t        |      t        |      ||dkD  rt        |      ndt        |      t        |      |dkD  rt        |      ndd	}||dS # t        t        f$ r d}Y ow xY w# t        t        f$ r d}	Y _w xY w# t        t        f$ r d}
Y Ow xY w# t        t        f$ r d}Y Hw xY w# t        t        f$ r d}Y Aw xY w# t        t        f$ r d}Y :w xY w# t        t        f$ r d}Y *w xY w)Nr.   r   spendimpressionsclicksctrcpmcpcreachrR   campaign_namezSem nome	objective-)nomeobjetivogasto	gasto_raw
impressoescliquesleadscplr   r   r   c                     | d    S )Nr    xs    r*   <lambda>zagregar_meta.<locals>.<lambda>   s    !K. r,   keyrk     )	gasto_totalr   alcancer   r   r   r   r   r   )resumo	campanhas)r@   rQ   rA   rB   rH   rV   appendrF   rJ   rM   sort)r|   r   impressoes_totalcliques_totalleads_totalreach_totalr   cr   r   r   r   r   r   r   r   r   	cpl_total	ctr_total	cpm_total	cpc_totalr   s                         r*   agregar_metar      so   KMKKI 3	!%%.-A.E	U155#7#<1=>J	%h 4156G	e)*C	e)*C	e)*C	aeeGn123E quuY/526!&uu}uJ& uuEE/*8jk*1ce_":.($)AI8C=3C=C=$'!G8C=
 	O3j NN0N1/:Q{*CI<Lq<P!11C7VYI;Ka;O//$6UXI1>1B},I  ,/0K(M*&1Aox	"3	"	"&3a&7x	"S
F 955K :& 	E	 :& 	J	 :& 	G	 :& 	C	 :& 	C	 :& 	C	 :& 	E	s|   J'J%'J=K"K-L 'LJ"!J"%J:9J:=KKK*)K*-LLLLL21L2c                    d|  d| d| }t        j                          }|t        v r&t        |   }||d   z
  t        k  r|d   |d   |d   fS t        | ||      }t	        |d         }||d   |d   |d   dt        |<   |d   |d   |d   fS )	Nzmeta||tsr   r   r}   r|   )r   r   r   r}   )timer   	_META_TTLr   r   )rf   rg   rh   	cache_keynowentryinsightsaggs           r*   coletar_meta_cachedr     s    xqq=I
))+CKI&ty(?E+$6o8NNN#FM:FH
x0
1Ch-%!/2	K	 x=#k*H_,EEEr,   c           
         t         sg S t         ddddd}| dk(  r|r|rd|d|d	|d
<   nt        j                  | d      }||d<   	 t        j                  t        |d      }|j
                  dk7  rg S |j                         j                  dg       xs g }g }|D ]  }|j                  d      xs d}		 t        j                  |	      }
|
j                  d      }	 t        |j                  d      xs d      }t        |j                  d      xs g       }|j                  ||	|t!        |d      d        |j#                  d        |S # t        $ r g cY S w xY w# t        $ r |	}Y w xY w# t        t        f$ r d}Y w xY w)Nzspend,actionsaccountr   ry   )rl   rm   rn   time_incrementro   rp   rq   rr   rs   rt   rX   ru   r4   rv   r{   
date_startr   z%d/%mr   r   r.   rR      )r{   data_isor   r   c                 &    | j                  dd      S )Nr   r   rQ   r   s    r*   r   z$buscar_meta_diario.<locals>.<lambda>R  s    QUU:r2 r,   r   )r~   r   rQ   r   r   r   r   r   r   r   r   r@   rA   rB   rV   r   roundr   )rf   rg   rh   rw   ru   r   r{   serierowr   dtr   r   r   s                 r*   buscar_meta_diarior   )  s   	 $!F m
@MzZ|%))&)< +}LLC==CIvvx||FB'-2 E hWW\*0b
	''
3BKK(E	#'''*/a0E swwy17R8eeV[\acdVefgh 
JJ2J3L'  	  	E	 :& 	E	s<   ,E 4$E 5&E E1EE E.-E.1FFFforcec           	         t         st        d      t        5  t        j                         }t        j                  d      xs d}t        j                  d      xs d}|r| s||dz
  k  r|cd d d        S t        j                  t        dt         idd	id
      }|j                  dk7  r(t        d|j                   d|j                  d d        |j                         }|j                  d      xs d}|st        d      t        |j                  d      xs d      }|t        d<   ||z   t        d<   |cd d d        S # 1 sw Y   y xY w)NzEHOTMART_BASIC nao configurado em /opt/mia/config/hotmart_borrello.envr/   r   r0   r.   <   Authorization
grant_typeclient_credentialsr4   headersrw   rx   ry   zHotmart OAuth rz   rl   z(Hotmart OAuth: resposta sem access_token
expires_ini  )_HOTMART_BASICr   _hotmart_token_lockr   r1   rQ   r   postHOTMART_OAUTH_URLr   r   r   rH   )r   r   cachedr0   r   r{   r/   r   s           r*   _hotmart_get_tokenr   Y  s9   bcc	 iik%))'28b)--l;Bs
%C*r/$9  MM$n5 "67	
 ==CbOPPvvx(.BIJJ,/748
(-W%-0:-=\*-  s   AE6CEEr&   c           
         t               }t         |  }t        j                  |dd| i|d      }|j                  dk(  r*t        d      }t        j                  |dd| i|d      }|j                  dk7  r+t        d	|  d
|j                   d|j                  dd        	 |j                         S # t        $ r t        d	|  d      w xY w)zAparams pode ser dict ou lista de tuplas (para valores repetidos).r   zBearer r4   r   i  T)r   ry   zHotmart  rz   Nz: resposta nao-JSON)	r   HOTMART_API_BASEr   rQ   r   r   r   r   rB   )r&   rw   r/   urlr   s        r*   _hotmart_getr   v  s     Etf
%C GE7"34		A 	}}".LL$w&78	
 	}}XdV1Q]]O2affTcl^LMMAvvx AXdV+>?@@As   'B7 7Cperiodc                     t         j                  | d      }t        t        j                         dz        }t        t        j                         |dz  z
  dz        }|||fS )Nr4   r   iQ )HOTMART_PERIOD_DAYSrQ   rH   r   )r   daysend_msstart_mss       r*   _hotmart_period_msr     sT    ""62.Dt#$FDIIK$,.$67HVT!!r,   c                     	 t        |       }t        j                  |dz  t              }|j	                  d      S # t
        $ r Y yw xY w)Nr   )tzz%d/%m/%Y %H:%Mr   )rH   r   fromtimestampTZ_BRr   r   )msr)   r   s      r*   _fmt_data_brr     sH    G##AH7{{+,, s   9< 	AAAprovada	Concluida	CanceladaReembolsadazReembolso parcial
ChargebackRecusadaExpiradazAguardando pgtoVencidazCheckout iniciadoz
Em analisezBoleto impresso
Protestada	Bloqueada)APPROVEDCOMPLETE	CANCELLEDREFUNDEDPARTIALLY_REFUNDED
CHARGEBACKREFUSEDEXPIREDWAITING_PAYMENTOVERDUESTARTEDUNDER_ANALISYSPRINTED_BILLET	PROTESTEDBLOCKEDc                 
   t        |       \  }}}g }d }d}g d}t        |      D ]  }dd|fd|fg}	|D ]  }
|	j                  d|
f        |r|	j                  d|f       t        d|	      }|j	                  d	      xs g }|j                  |       |j	                  d
      xs i j	                  d      xs d }|r n d}d}d}d}i }g }ddh}d}d}d}d}|D ]"  }|j	                  d      xs i }|j	                  d      xs i }|j	                  d      xs i }|j	                  d      xs i }|j	                  d      xs i }|j	                  d      xs dj                         xs d}|j	                  d      xs dj                         }	 t        |j	                  d      xs d      } |j	                  d      }!	 |!t        |!      nd }"	 t        |j	                  d      xs d      }#|#dk  rd}#|"|"dk  rd}$d}%nd}$|"}%|$dk(  r|#dkD  r|% d|# n|% }&n|#dk  rd }&nd!|# }&|j	                  |d      dz   ||<   |dz  }||v rD|dz  }|d"k(  r || z  }|$dk(  r|dz  }|| z  }n%|dz  }|| z  }n|d#k(  r|| z  }|$dk(  r|dz  }n|dz  }|j                  i d$|j	                  d%      xs d&d'|j	                  d%      xs |j	                  d(      xs d&d(|j	                  d(      xs dd)| d*|xs d"d+|d"k(  r6d,| d-j                  d.d/      j                  d0d.      j                  d/d0      n| d1| d-d|d2t        j	                  ||j                               d3|j	                  d4      xs |j	                  d5      xs dd6t        |j	                  d4      xs |j	                  d5      xs d      d7|j	                  d8      xs dd9|$d:|%d;|#d<|&d=|j	                  d>      xs d       % |j                  d? d@A       |dkD  r
|dkD  r||z  nd}'|dkD  r||z  dBz  nd}(g })|j!                         D ]T  \  }
}*|)j                  |
t        j	                  |
|
j                               |*|dkD  rt#        |*|z  dBz  d      nddC       V |)j                  dD E       t%        |      t#        |dF      t#        |dF      |dkD  rdG|d-nd|||'dkD  rt%        |'      nd&t'        |(      ||t%        |      t#        |dF      t%        |      t#        |dF      dH}+| dI| dJ|+|)|d dK dLS # t        t        f$ r d} Y w xY w# t        t        f$ r d }"Y w xY w# t        t        f$ r d}#Y w xY w)MN   )r   r   r   r   r  r  r  r  r  r  r	  r
  r  r  )max_resultsry   
start_dateend_datetransaction_status
page_tokenz/sales/historyitems	page_infonext_page_tokenr.   r   r   r   purchasebuyerproductpricepaymentstatusr   ?currency_coderD   recurrency_numberinstallments_numberr   novaparcela/u   À vistaz1/BRLUSDprodutonamer   	compradoremailvalormoeda	valor_fmtr?   r;   r<   r=   r>   r   status_labeldata_ms
order_dateapproved_datedata_fmt	transacaotransactiontipoparcela_atualtotal_parcelasparcela_labelmetodo_pagamentomethodc                 &    | j                  dd      S )Nr-  r   r   r   s    r*   r   z"_hotmart_coletar.<locals>.<lambda>:  s    quuY': r,   T)r   reverseg      Y@)r  r   qtdpctc                     | d    S )Nr;  r   r   s    r*   r   z"_hotmart_coletar.<locals>.<lambda>I  s    !E( r,   r   r   zUS$ )total_vendido_brltotal_vendido_brl_rawtotal_vendido_usdtotal_vendido_usd_fmtn_vendasn_aprovadasticket_mediotaxa_aprovacaovendas_novasvendas_parcelasreceita_novasreceita_novas_rawreceita_parcelasreceita_parcelas_rawzUltimos z dias2   )periodor}   r   	breakdownvendas)r   ranger   r   rQ   extendupperr@   rA   rB   rH   rC   HOTMART_STATUS_LABELtitler   r   r  r   rF   rM   ),r   r   r   r   todas_itemsr  	max_pagesstatus_filter_rw   rE   r{   r  r>  r@  rB  rC  status_countvendas_recentesapproved_statesn_vendas_novasn_vendas_parcelasreceita_novas_brlreceita_parcelas_brlitr  r  r  r  r  r  currencyr)  	recur_raw	recur_numr5  r3  r4  r6  ticket_medio_brlrE  rN  r;  r   s,                                               r*   _hotmart_coletarre    s   /7Hfd KJIM 9  8$ 

  	5AMM/34	5MM<45,f5!'R5!xx,2778IJSt
$ HKLO!:.O N V66*%+w%2&&#)rW%+,,y)/R,,x(.B557>3IIo.4";;=	%))G,12E LL!45		*3*?ITI	 -B!C!HqIN QN	QDMD%M 9CQTUCU}oQ~.>?^k]lM" * #%^$4 5+//:Q>VA_$1K5 !U*!6>"a'N%.%%*%(E1(U"!U*!6>"a'N%*%  
w{{6*1c 
6*Iuyy/A/HS 
 UYYw'-2 
 U	 

 X& 
 %.  d|,44S#>FFsCPXXY\^ab"*1U4L9 
 f 
 044VV\\^L 
 x||L1WX\\/5RWVW 
 X\\,%?%e8<<P_C`%edef 
 m4: 
 D 
 ] 
  n! 
" ]# 
$ H 5 ;% 
 	GVr :DI =H!OPadePe)K7kn9AAkH,u43N I$$& 3)--a;9AA5#.50153	
 	 NN*N+ &&78!&'8!!<"#4a8DUXYDY4(9$'?!@_a"6F6J!12PS">2&,!"34"#4a8$%9: %&:A >F& #D6/!#2& e :& 	E	 :& 	I	
 :& 	N	s6   T7UU'7UUU$#U$'U<;U<c                     t        j                          }t        j                  |       }|r||d   z
  t        k  r|d   S t	        |       }||dt        | <   |S )Nr   r{   r   r{   )r   r2   rQ   _HOTMART_TTLre  )r   r   r   r{   s       r*   _hotmart_coletar_cachedri  f  sX    
))+Cv&EuT{"\1V}F#D$'6N6Kr,   c                  j    t        j                  d      t        j                         j                  dS )Nuser)current_usercurrent_year)r   rQ   r   r   yearr   r,   r*   inject_globalsro  s  s)      F+ ++ r,   z/loginGETPOST)methodsc                     t         j                  dk(  rt         j                  j                  d      xs dj	                         j                         } t         j                  j                  d      xs dj	                         }t        | |      r@| t        d<   t         j                  j                  d      xs t        d      }t        |      S t        dd	       t        d
      S )Nrq  usernamer   passwordrk  nextindexzUsuario ou senha invalidos.errorz
login.html)r	   r8  formrQ   r"   lowerr   r   argsr   r
   r   r   )rt  ru  nxts      r*   loginr}  ~  s    ~~LL$$Z06B==?EEGLL$$Z06B==?x*&GFO,,""6*>gg.>CC= +W5<((r,   z/logoutc                  R    t        j                          t        t        d            S )Nr}  )r   clearr
   r   r   r,   r*   logoutr    s    MMOGG$%%r,   r"  c                      t         j                  j                  dd      } t         j                  j                  dd      }t         j                  j                  dd      }t        dd| ||      S )	Nrf   r^   inicior   fimz
index.htmlhome)activerf   rg   rh   r	   r{  rQ   r   rf   rg   rh   s      r*   rw  rw    sb     \\h4FLL$$Xr2M!!%,J# r,   z/api/overviewc            
         t         j                  j                  dd      } t         j                  j                  dd      }t         j                  j                  dd      }d|  d| d| }t        j                         }|t        v r&t        |   }||d   z
  t
        k  rt        |d	         S d
| ddddd}	 t        | ||      \  }}}	t        | ||      }
g }|xs g d d D ]b  }|j                  |j                  d      xs dt        |j                  d      xs d      t        |j                  d      xs d      d       d |	|d<   d
||
|d|d<   	 t#        j$                         }t#        j&                  |      }t#        j(                         }t#        j*                  |      }d
|d   |d   |d   |d   d|d<   ||dt        |<   t        |      S # t        $ r=}t        j                  j                  d|        dt!        |      d|d<   Y d }~d }~ww xY w# t        $ r}dt!        |      d|d<   Y d }~d }~ww xY w)Nrf   r^   r  r   r  z	overview|r   r   r{   TFokerro)r  rf   r}   meta   r   r   r   r   r   )r   r   r   r}   )r  r   serie_diariatop_campanhasr  zoverview meta: rS   
ultimos_7d)r  clicks_total	clicks_7dpageviews_totalpageviews_7drastreamentorg  )r	   r{  rQ   r   r   _OVERVIEW_TTLr   r   r   r   rH   r@   r   apploggerwarningstrtrackingcarregar_clicksagregar_clickscarregar_pageviewsagregar_pageviews)rf   rg   rh   r   r   r   outresumo_metacampanhas_meta
label_meta
serie_metatop_campr   er   
agg_clickspvsagg_pvss                     r*   api_overviewr    sY    \\h4FLL$$Xr2M!!%,JF81]O1ZLAI
))+CO#	*t},5=)) b)	C42Efm]g2h/^Z'zJ
 &B+ 	AOOf,QUU7^0q1quu[16Q7 	  *O!&%	
F<))+,,V4
))+,,S1&w/#L1&w/#L1
N ),S!9OI3<+  4

_QC01"CF3F4"  <%*CF;N<s2   9BG A)H  	H 3HH 	I)H??Iz	/meta-adsc                      t         j                  j                  dd      } t         j                  j                  dd      }t         j                  j                  dd      }t        ddd| ||	      S )
Nrf   r^   r  r   r  zmeta_ads.htmlmeta_adszMeta Ads)r  section_titlerf   rg   rh   r  r  s      r*   r  r    se     \\h4FLL$$Xr2M!!%,J # r,   z/api/meta-adsc                     t         j                  j                  dd      } t         j                  j                  dd      }t         j                  j                  dd      }	 t        | ||      \  }}}t        d
|||d      S # t        $ rB}t
        j                  j                  d       t        dt        |      d      d	fcY d }~S d }~ww xY w)Nrf   r^   r  r   r  zerro api_meta_adsFr    T)r  r}   r   r   )
r	   r{  rQ   r   r   r  r  	exceptionr   r  )rf   rg   rh   r   r   r}   r  s          r*   api_meta_adsr    s     \\h4FLL$$Xr2M!!%,J;+>v}V`+a(	=
 &	  	  ;

01eSV45s::;s   "B 	C7C	C	Cz/google-adsc                      t        ddd      S )Nzgoogle_ads.html
google_adsz
Google Ads)r  r  )r   r   r,   r*   r  r    s     " r,   z/hotmartc                  t    t         j                  j                  dd      } | t        vrd} t	        ddd|       S )NrM  r8   zhotmart.htmlhotmartHotmart)r  r  rM  )r	   r{  rQ   r   r   )r   s    r*   r  r    sA     \\i/F((	 r,   z/api/hotmart-salesc                  6   t         j                  j                  dd      } | t        vrd} 	 t	        |       }t        d| |d   |d	   d
      S # t
        $ rB}t        j                  j                  d       t        dt        |      d      dfcY d }~S d }~ww xY w)NrM  r8   zerro api_hotmart_salesFr  r  Tr}   rO  )r  rM  r}   rO  r	   r{  rQ   r   ri  r   r  r  r  r   r  r   r{   r  s      r*   api_hotmart_salesr    s     \\i/F((;&v. o.x.	    ;

56eSV45s::;s   A 	B7BBBz/api/hotmart-summaryc                  >   t         j                  j                  dd      } | t        vrd} 	 t	        |       }t        d| |d   |d	   |d
   d      S # t
        $ rB}t        j                  j                  d       t        dt        |      d      dfcY d }~S d }~ww xY w)NrM  r8   zerro api_hotmart_summaryFr  r  Tr}   r   rN  )r  rM  r}   r   rN  r  r  s      r*   api_hotmart_summaryr  /  s     \\i/F((;&v. o.x.+&    ;

78eSV45s::;s   A 	B7BBBz/rastreamentoc            
         t        j                         } t        j                  |       }t        j                         }t        j                  |      }t        ddd||t        j                  j                  d            S )Nzrastreamento.htmlr  Rastreamentor"  )r  r  r  r  base_url)	r  r  r  r  r  r   r	   host_urlrstrip)r   r  	pageviewsr  s       r*   r  r  C  sp     %%'F((0J++-I((3G$!!((- r,   z/healthzc                  T    t        dt        t        j                               d      S )NT)r  r   )r   rH   r   r   r,   r*   healthzr  V  s    $c$))+&6788r,   c                      g d} | D ]  }	 t        |dd        dD ]  }	 t	        |        y # t        $ r t        j                          Y Fw xY w# t        $ r t        j                          Y Tw xY w)N)r^   r_   r`   ra   r]   r   r6   )r   r   	traceback	print_excri  )presetsrf   r   s      r*   _warm_all_cachesr  ^  s~    LG "	"B/"
 ' "	"#F+"  	"!	"
  	"!	"s    .AAAA10A1c                      d } t        j                  | dd      }|j                          t        j                  t        dd      j                          y )Nc                      	 t        j                  d       	 t                !# t        $ r t	        j
                          Y  w xY w)N   )r   sleepr  r   r  r  r   r,   r*   _loopz"_start_cache_warmer.<locals>._loopm  s=    JJsO& "   &##%&s   
# AATzcache-warmer-loop)targetdaemonr&  zcache-warmer-initial)	threadingThreadstartr  )r  rU   s     r*   _start_cache_warmerr  l  sD    & 	d9LMAGGI,T@VW]]_r,   __main__PORTi"  z0.0.0.0)hostportdebug)F)c__doc__osr   r  r  r   r   pathlibr   zoneinfor   r   flaskr   r   r	   r
   r   r   r   r   authr   r   r   r  __name__r  environrQ   
secret_keyconfigregister_blueprintbpMETA_ACCOUNT_IDr   r    r"   r~   r   r   TZ_UTCr   dict__annotations__r   r   r  r   r   r+   _HOTMART_ENVr   r1   Lockr   r2   rh  r   r  rF   rJ   rM   rH   rV   r   r   r   listr   r   r   boolr   r   r   r   rS  re  ri  context_processorro  router}  r  rw  r  r  r  r  r  r  r  r  r  r  r  r  runr   r,   r*   <module>r     s!   
    (   	 	 	 4 3 
 Ho 24YZ$2

  !   x{{ #
 (4_4EYO>?IIKQQSK 	$%	%T 	 
 K C 4  !"!!/26 (*= d =$inn&     s &s &s s $  !Q QS Qc Qd Q@P6 P6 P6fF FC FS F&*s *3 *C *DQUJ *`d s :As At A6"s "  -(""' &oS oT odC D    8eV_-	) .	) 9& &
 3
  
 ?:  :z ;   ?  & =   :	  	    !" !"  #$ ?  " :9 9"`   zrzz~~fd+,DGGUG3 c  Ks   *$M4 4M?>M?