
    Ԃ^i@                         d Z ddlZddlmZ ddlmZmZ  ed      Zedz  dz  Zedz  dz  Z	ed	z  d
z  Z
dee   fdZdee   fdZd Zedk(  r e        yy)zBuild betting/cfb_historical.json from BallDontLie ncaaf caches.

Inputs:
- data/ncaaf/games.json
- data/ncaaf/odds.json (optional; may be missing depending on API tier)
    N)Path)DictOptionalz/var/www/html/eventheodds/datancaafz
games.jsonz	odds.jsonbettingzcfb_historical.jsonreturnc                     | y t        |       j                         }|r|j                         dv ry 	 t        |      S # t        $ r Y y w xY wN)nanan)strstriplowerfloat	Exceptionxss     9/var/www/html/eventheodds/scripts/build_cfb_historical.pyto_floatr      sL    yAA	\)Qx s   
> 	A
	A
c                     | y t        |       j                         }|r|j                         dv ry 	 t        t	        |            S # t
        $ r Y y w xY wr
   )r   r   r   intr   r   r   s     r   to_intr      sQ    yAA	\)58} s   A 	AAc                     t         j                         st        dt                t        j                  t        t                     } i }t        j                         rXt        j                  t        t                    }|D ]1  j                  d      }||j                  t        |             3 g }| D ]~  }|j                  d      }||j                  d      xs dd d }|s3|j                  d      xs i }|j                  d      xs i }|j                  d	      xs |j                  d
      }	|j                  d	      xs |j                  d
      }
|	r|
s|j                  d      xs d}|j                  d      xs d}|dk(  r|dk(  r|j                  d      }t        |t              s)t        |t              r$t        |      j                         rt        |      nt        |d d       }|j                  t        |            }d d d d d ddd}|rdd<   |j                  d      d<   t        |j                  d            d<   t        |j                  d            d<   t        |j                  d            d<   t        |j                  d            d<   t        |j                  d            d<   t        fd d!D              }||z
  }|dkD  rd"n|dk  rd#nd$}|j!                  d%| |d&|||j                  d'      |	|
||d(t#        |      ||||z   d)d*        |j%                  d+ ,       t&        j(                  j+                  d-d-.       t        j,                  |t        t&        d/      d01       t/        d2 |D              }t1        d3t&         d4t3        |       d5| d6|r|t3        |      z  d7z  ndd8d9	       y ):NzMissing game_ididdate 
   	home_teamvisitor_team	full_namename
home_scorer   
away_scoreseason   none)moneylineHomemoneylineAway
spreadHome
spreadAway	totalLinesourceFballdontlier.   vendormoneyline_home_oddsr)   moneyline_away_oddsr*   spread_home_valuer+   spread_away_valuer,   total_valuer-   c              3   D   K   | ]  }j                  |      d u  y w)Nget).0kos     r   	<genexpr>zmain.<locals>.<genexpr>e   s     tA15584/ts    )r)   r*   r+   r-   homeawaydrawzcfb-cfbweek)	homeScore	awayScore)winnermargintotalPoints)r   bdl_game_idsportr   r&   rA   homeTeamawayTeamscoresoddshasRealOddsresultc                 &    | j                  dd      S )Nr   r   r7   )r   s    r   <lambda>zmain.<locals>.<lambda>y   s    155+     )keyT)parentsexist_okw   )indentc              3   D   K   | ]  }|j                  d       sd  yw)rM      Nr7   )r9   gs     r   r<   zmain.<locals>.<genexpr>|   s     6Q}!5q6s     zWrote z games=z hasRealOdds=z (d   z.1fz%))GAMESexists
SystemExitjsonloadopenODDSr8   
setdefaultr   
isinstancer   isdigitr   r   anyappendboolsortOUTparentmkdirdumpsumprintlen)gamesodds_by_gamerL   gidoutrZ   r   r=   r>   	home_name	away_namehsa_sr&   
season_into_rawhas_realrE   rD   realr;   s                       @r   mainr}   +   s   <<>8E7+,,IId5k"E$&L{{}yyd$ 	1A%%	"C{##CHa0		1 C ;eeDk;f#Sb)uu[!'Ruu^$*HH[)=TXXf-=	HH[)=TXXf-=		UU< %AeeL!&Q!Gqx$.vs$;
6SV@W\_`f\g\o\o\qS[x{  }A  BD  CD  }E  yF
  S*!!
 'AhK))H-AhK!'		2G(H!IAo!'		2G(H!IAo&uyy1D'EFAlO&uyy1D'EFAlO%eii&>?AkNt9sttHc!A:fqjFf

, EE&M!!$&S9>!'6"s(S
 	];z HH+H,JJTD1IIc4C=+6#66D	F3%ws3xjdV2UXtCH}S?P^_`c=ddf
ghrQ   __main__)__doc__r_   pathlibr   typingr   r   BASEr\   rb   rj   r   r   r   r   r}   __name__ rQ   r   <module>r      s      !,-w%g~#
Y..	8E? 		# 	Rij zF rQ   