
    蒶i                       S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SK	r
S SKr\" \5      R                  5       R                  S   r\S-  S-  S	-  r\R#                  S
S
S9  SrSrSrS"S jrS#S jr   S$             S%S jjr        S&S jr      S'S jr\S:X  a'  \" S\SSSS9  \" S\SSSS9  \" S\\SS9  \" S \\S!S9  gg)(    )annotationsN)StringIO)Path)Optional   datarawratesT)parentsexist_okz3https://api.stlouisfed.org/fred/series/observationszjhttps://api.statistiken.bundesbank.de/rest/download/BBSSY/D.REN.EUR.A610.000000WT0202.A?format=csv&lang=enzjhttps://api.statistiken.bundesbank.de/rest/download/BBSSY/D.REN.EUR.A630.000000WT1010.A?format=csv&lang=enc                    [         U-  nU R                  USS9  [        SU S[        U 5       SU S   R	                  5        SU S   R                  5        35        g )NF)indexzSaved z | rows=z	 | range=datez -> )
RATES_PATHto_csvprintlenminmax)dffilenameouts      LC:\Users\paul_\OneDrive\fx_macro_intraday\src\ingestion\auto_rates_loader.py_save_seriesr      sb    
x
CIIcI	

(3r7) ,F!"$r&z~~'7&8	:    c                   U R                  5       n U R                   Vs/ s H   o"R                  5       R                  5       PM"     snU l        0 nSU R                  ;   a  SU R                  ;  a  SUS'   SU R                  ;   a  SU R                  ;  a  SUS'   SU R                  ;   a  SU R                  ;  a  SUS'   U R	                  USS9  SU R                  ;  d  SU R                  ;  al  [        U R                  5      S:  a-  U R                  S S 2S S24   R                  5       n SS/U l        O&[        S	U R                  R                  5        35      e[        R                  " U S   S
S9U S'   [        R                  " U S   S
S9U S'   U R                  SS/S9R                  S/S9R                  S5      R                  SS9n U S   R                   R#                  S5      U S'   U R	                  SU0S9SU/   $ s  snf )Nobservation_dater   time_period	obs_valuevalueT)columnsinplacer   z/Could not identify date/value columns. Columns=coerceerrorssubsetdrop%Y-%m-%d)r!   )copyr!   striplowerrenamer   iloc
ValueErrortolistpdto_datetime
to_numericdropnadrop_duplicatessort_valuesreset_indexdtstrftime)r   value_col_namec
rename_maps       r   _clean_two_col_seriesr>   &   s   	B-/ZZ8Z'')//#Z8BJJRZZ'F"**,D)/
%&

"vRZZ'?$*
=!bjj WBJJ%>")
;IIj$I/ RZZ7"**#<rzz?aBQB$$&B '*BJA"**BSBSBUAVW  6
8<BvJ--7H=BwK 			&'*	+		)	V		$		  F''
3BvJ99g~6978PQQE 9s   'H
1990-01-01c                   U=(       d    [         R                  " S5      nU(       d  [        S5      eU USUS.nU(       a  XVS'   [        R                  " [
        USS9nUR                  5         UR                  5       nUR	                  S/ 5      n	U	(       d  [        S	U  35      e[        R                  " U	5      S
S/   n
[        XS9nU$ )NFRED_API_KEYz@FRED_API_KEY not found. Set it as an environment variable first.json)	series_idapi_key	file_typeobservation_startobservation_end   )paramstimeoutobservationsz)No observations returned for FRED series r   r    r;   )osgetenvr0   requestsgetFRED_BASE_URLraise_for_statusrB   r2   	DataFramer>   )rC   output_namer;   rD   rF   rG   rI   rpayloadrK   r	   cleans               r   fetch_fred_seriesrX   M   s     2>2G[\\ .	F $3 !]62>AffhG;;~r2LDYKPQQ
,,|
$fg%6
7C!#EELr   c                :   SS0n[         R                  " XSS9nUR                  5         UR                  nUR	                  5       nS n[        U5       HS  u  pU	R                  5       R                  5       n
SU
;   d  SU
;   d  SU
;   d  M7  SU
;   d  S	U
;   d  S
U	;   d  SU	;   d  MQ  Un  O   Ub  SR                  XgS  5      nOUn [        R                  " [        U5      S SS9n[        XS9nU$ ! [         a"    [        R                  " [        U5      5      n N6f = f)NAcceptztext/csv<   )headersrJ   r   r   z	date/timer    r   ;,
python)sepenginerL   )rO   rP   rR   text
splitlines	enumerater,   r-   joinr2   read_csvr   	Exceptionr>   )csv_urlrT   r;   r\   rU   rc   lines
header_idxiliner-   sampler	   rW   s                 r   fetch_bundesbank_seriesro   o   s   
 $GWr:A66DOOE JU#

""$u_ 6+:NE![E%9SD[CSWKJ $ 5-.,kk(6*XF "#EEL	  ,kk(6*+,s   C. .)DDc                  [         U -  nUR                  5       (       d  U" SX S.UD6n[        XP5        U$ [        R                  " U5      nUR
                   Vs/ s H   owR                  5       R                  5       PM"     snUl        [        UR
                  5      S:  a  [        U  S35      eUR                  S S 2S S24   R                  5       nSU/Ul        [        R                  " US   SS9US'   [        R                  " Xb   SS9Xb'   UR                  SU/S9R                  S/S9R!                  S5      R#                  SS	9n U" SX S.UD6n[        R                  " US   SS9US'   [        R*                  " Xh/SS9n
U
R                  SU/S9R                  S/S9R!                  S5      R#                  SS	9n
U
S   R&                  R)                  S5      U
S'   [        X5        U
$ s  snf ! [         aI  n	[%        S
U  SU	 35        US   R&                  R)                  S5      US'   [        X`5        Us S n	A	$ S n	A	ff = f)N)r;   rT   r   z has fewer than 2 columns.r   r#   r$   r&   Tr(   zFailed to refresh z: r*   )ignore_index )r   existsr   r2   rg   r!   r,   r-   r   r0   r/   r+   r3   r4   r5   r6   r7   r8   r   r9   r:   concat)local_filenamefetch_fnr;   fetch_kwargspathr   existingr<   freshecombineds              r   update_local_csvr}      s=    &D;;==`^`S_`R(	{{4 H3;3C3CD3Ca	)3CDH
8q N++EFGG}}QU#((*H/H~~hv&6xHHV!}}X-EhWH78		)	V		$		 ccVbc NN5=BE&Myy(*>H78		)	V		$		   '**33J?HV*OE E$  ">"2"QC89#F+..77
CX.	s$   'G0
G5 5
I?>I=II__main__zus2y.csvDGS2us2y)rC   r;   rF   z	us10y.csvDGS10us10yzde2y.csvde2y)ri   r;   z	de10y.csvde10y)r   pd.DataFramer   strreturnNone)r   r   r;   r   r   r   )Nr?   N)rC   r   rT   r   r;   r   rD   Optional[str]rF   r   rG   r   r   r   )ri   r   rT   r   r;   r   r   r   )ru   r   r;   r   r   r   )
__future__r   rM   ior   pathlibr   typingr   pandasr2   rO   __file__resolver   	BASE_PATHr   mkdirrQ   BUNDESBANK_DE2Y_CSVBUNDESBANK_DE10Y_CSVr   r>   rX   ro   r}   __name__rr   r   r   <module>r      s   " 	     N""$,,Q/	%''1
 
    -E7 7 $RV ")%)  	
  # D$$$ $ 	$N11 	1 1h z& & #	 $	1 r   