[docs]classKosovo(CountryVaxBase):location:str="Kosovo"source_url:str="https://msh.rks-gov.net/sq/statistikat-covid-19/"source_url_ref:str="https://msh.rks-gov.net/sq/statistikat-covid-19/"regex:dict={"Total":"Numri total i vaksinave të administruara","Dose2":"Numri i të vaksinuarve me të dy dozat","Dose3":"Numri i dozave të treta të administruara","Boosters":"Numri i dozave përforcuese të administruara",}
[docs]defread(self)->pd.DataFrame:"""Read data from source"""soup=get_soup(self.source_url,verify=False)df=self._parse_data(soup)returndf
[docs]def_parse_data(self,soup:BeautifulSoup)->pd.DataFrame:"""Parse data from the soup"""# the dashboard URLlink=soup.find("iframe",{"title":"Covid Dashboard"})["src"]ifnotlink:raiseValueError("Dashboard not found, please update the script")soup=get_soup(link,verify=False)# the metricsmetrics=self._parse_metrics(soup)# DataFramedf=pd.DataFrame({**metrics,})returndf
[docs]def_parse_metrics(self,soup:BeautifulSoup)->int:"""Parse metrics from the soup"""total=soup.find(text=self.regex["Total"])dose2=soup.find(text=self.regex["Dose2"])dose3=soup.find(text=self.regex["Dose3"])boosters=soup.find(text=self.regex["Boosters"])ifnottotalornotdose2ornotdose3ornotboosters:raiseValueError("Metrics not found, please update the script")total_vaccinations=clean_count(total.parent.find_next().text)people_fully_vaccinated=clean_count(dose2.parent.find_next().text)total_boosters=clean_count(dose3.parent.find_next().text)+clean_count(boosters.parent.find_next().text)people_vaccinated=total_vaccinations-people_fully_vaccinated-total_boostersdf={"people_vaccinated":[people_vaccinated],"people_fully_vaccinated":[people_fully_vaccinated],"total_boosters":[total_boosters],"total_vaccinations":[total_vaccinations],}returndf
[docs]defpipeline(self,df:pd.DataFrame)->pd.DataFrame:"""Pipeline for data processing"""returndf.pipe(self.pipe_metadata).pipe(self.pipe_date).pipe(self.pipe_vaccine)
[docs]defexport(self):"""Exports data to csv"""df=self.read().pipe(self.pipeline)self.export_datafile(df,attach=True)