Source code for gismap.lab_examples.irif

from bs4 import BeautifulSoup as Soup

from gismap.lab.lab_author import AuthorMetadata, LabAuthor
from gismap.lab.labmap import LabMap
from gismap.utils.requests import get


def get_irif_teams():
    soup = Soup(get("https://www.irif.fr/"), "lxml")
    teams = [a for a in soup("ul", {"class": "nav"})[1]("a") if hasattr(a, "href") and "equipes" in a["href"]]
    return {a["href"].split("/")[-2]: a.text.strip() for a in teams}


irif_teams = get_irif_teams()


[docs] class IrifMap(LabMap): """ Class for handling an IRIF team using `https://www.irif.fr/equipes/*team_acronym*/index` as entry point. Default to `graphes` team. """ name = "graphes" def _author_iterator(self): url = f"https://www.irif.fr/equipes/{self.name}/index" soup = Soup(get(url), "lxml") for a in [td.a for td in soup("td", {"class": "col0"})]: if a is None: continue name = a.text.replace("\xa0", " ").strip() if not name: continue metadata = AuthorMetadata(group=irif_teams[self.name], url=a["href"]) yield LabAuthor(name=name, metadata=metadata)
[docs] class IrifFull(IrifMap): """ Class for handling all IRIF teams. """ name = "IRIF" def _author_iterator(self): author_dict = dict() for team in irif_teams: for author in IrifMap(name=team)._author_iterator(): if author.name in author_dict: author_dict[author.name].metadata.group = "Polyteam" else: author_dict[author.name] = author for author in author_dict.values(): yield author