[docs]classSpain(CountryVaxBase):location="Spain"vaccine_mapping={"Pfizer":"Pfizer/BioNTech","Moderna":"Moderna","AstraZeneca":"Oxford/AstraZeneca","Janssen":"Johnson&Johnson",}_date_field_raw="Fecha de la última vacuna registrada (2)"_max_days_back=20
[docs]def_parse_data(self,last_update:str):"""Goes back _max_days_back days to retrieve data. Does not exceed `last_update` date. """records=[]fordaysinrange(self._max_days_back):date_it=clean_date(datetime.now()-timedelta(days=days))# print(date_it)# print(f"{date_it} > {last_update}?")ifdate_it>last_update:source=self._get_source_url(date_it.replace("-",""))try:df_=pd.read_excel(source,index_col=0,parse_dates=[self._date_field_raw])exceptHTTPError:# print(f"Date {date_it} not available!")pass# logging.info(f"Date {date_it} not available!")else:# print("Adding!")self._check_vaccine_names(df_)ds=self._parse_data_day(df_,source)records.append(ds)else:# print("End!")breakiflen(records)>0:returnpd.DataFrame(records)print("No data being added to Spain")returnNone
[docs]def_parse_data_day(self,df:pd.DataFrame,source:str)->pd.Series:"""Parse data for a single day"""df.loc[~df.index.isin(["Sanidad Exterior"]),self._date_field_raw].dropna().max()data={"total_vaccinations":clean_count(round(df.loc["Totales","Dosis administradas (2)"])),"people_vaccinated":clean_count(df.loc["Totales","Nº Personas con al menos 1 dosis"]),"people_fully_vaccinated":clean_count(df.loc["Totales","Nº Personas vacunadas(pauta completada)"]),"date":clean_date(df.loc[~df.index.isin(["Sanidad Exterior"]),"Fecha de la última vacuna registrada (2)",].dropna().max()),"source_url":source,"vaccine":", ".join(self._get_vaccine_names(df,translate=True)),}if(col_boosters:="Nº Personas con dosis adicional")indf.columns:# print("EEE")data["total_boosters"]=clean_count(df.loc["Totales",col_boosters])returnpd.Series(data=data)