
    *Kj'                     @    d Z ddlZddlZddlZd Zedk(  r e        yy)a  
backfill_ads_item_daily.py - Backfill de metricas REAIS de Product Ads por item x dia.

Uso (na VPS, dentro do venv):
    python -m app.scripts.backfill_ads_item_daily            # ultimos 60 dias
    python -m app.scripts.backfill_ads_item_daily 30         # ultimos 30 dias

Faz 1 chamada por dia (date_from == date_to) ao endpoint product_ads/ads/search.
Dias que ja possuem dados na tabela sao PULADOS (rode com --force para reprocessar).
Rate-limit friendly: pausa 2s entre dias, o retry de 429 ja esta no MeliApiService.request.
    Nc                  D   d} dt         j                  v }t         j                  dd  D ]  }|j                         st        |      }   ddlm}m}m} dd l}ddlm	} ddl
m} |j                  j                  ||j                  g        |       }		  ||	      }
t        j                  j!                         j#                         }d}d}t%        d| dz         D ]  }|t        j&                  |	      z
  }|sR|	j)                  |      j+                  |j"                  |k(        j-                         }|dkD  rt/        | d
| d       q|
j1                  |      }|s|dz  }t/        | d       |dk(  r8|dk\  r3t/        d       t/        d       t/        d        |	j3                          y |dkD  r|dk\  rt/        d       t/        d        n%t5        j6                  d       d}|	j)                  |      j+                  |j"                  |k(        j9                          d}d}|D ]  }|j;                  d      s|d   s|d   s|d   s|d   s*|	j=                   ||d   |t?        |d   d      t?        |d   d      |d   |d   |j;                  dd                   |dz  }||d   z  } |	jA                          ||z  }t/        | d| d|d       t5        j6                  d        t/        d | d!       dd"l!m"} |	j)                  |jG                  |j"                        |jI                  |j"                        |j-                  |jJ                        |jM                  |jN                              jQ                         }t/        d#|d    d$|d    d%|d    d&tS        |d'   xs d      d       |	j3                          y # tT        $ r.}dd l+}|jY                          |	j[                          Y d }~Cd }~ww xY w# |	j3                          w xY w)(N<   z--force   r   )SessionLocalengineBase)MlAdsItemDaily)MeliApiService)bindtables)daysz	: ja tem z3 registros, pulando (use --force para reprocessar).z: sem dados retornados.   zI
ABORTADO: 5 dias recentes seguidos sem dados e nenhum registro inserido.zDProvavel problema de autorizacao na API de Ads (veja os logs acima).zFTeste manual com curl (fornecido pelo assistente) para ver o erro cru.   u>   
Parando: 7 dias seguidos sem dados apos inserir registros —z3alcancado o horizonte de historico de Ads da conta.   g        item_idcostclicksprintsamountunits_quantity)r   dater   revenuer   r   r   z: z itens, gasto R$z.2fz
Backfill concluido. z registros inseridos.)funczTabela agora: z	 linhas, z a z, gasto total R$   ).sysargvisdigitintapp.core.databaser   r   r   app.models.ml_ads_item_dailyr	   app.services.meli_apir
   metadata
create_all	__table__datetimenowr   range	timedeltaqueryfiltercountprintget_ads_performance_dailyclosetimesleepdeletegetaddroundcommit
sqlalchemyr   minmaxidsumr   firstfloat	Exception	traceback	print_excrollback)r   forceargr   r   r   appr	   r
   dbmelitodaytotal_insertedconsecutive_emptyoffsetdayexistingrowsinsertedday_costrsqlfuncsummaryer>   s                            Q/var/www/hypershopcomercio.com.br/hyper-ai/app/scripts/backfill_ads_item_daily.pymainrT      s   D!Exx| ;;=s8D =<';4
 	MM&.2J2J1KL	BPb!!!%%',,. Atax( 4	F(,,&99C88N3::>;N;NRU;UV\\^a<SE8*4ghi11#6D!Q&!456 "Q&+<+Afg`abch 	
c "A%*;q*@[\OP

1 !HH^$++N,?,?3,FGNNPHH &uuY'&	Qx[AhK1X;~iLqy!,!!H+q1X;X;#$55)91#=  AAfI%&  IIKh&NSEH:%5hs^DEJJqMi4	l 	&~&66KLM 	/((KK++,KK++,MM.++,KK++,	

 %' 	 	wqzl)GAJ<s71:,N^_delmneoetst_uvy^z{| 	
  

 	
s2   D
O .HO 	P
$P P P

P P__main__)__doc__r   r/   r%   rT   __name__     rS   <module>rZ      s0   
   bJ zF rY   