from configparser import SectionProxy from .home import Home from .linker import LinkFiles from .cargo import CargoInstall from .run import Run from . import git class Resource: resource_types: list[type] = [ Home, LinkFiles, CargoInstall, Run, git.Repo, ] @classmethod def from_name(cls, name: str) -> type: """ from_name is to be implemented by resource classes """ for T in cls.resource_types: if T.resource_name == name: return T raise ValueError(f"No section type has name {name}") @classmethod def from_section(cls, name: str, section: SectionProxy): parts = name.split(" ") name = parts[0] try: label = parts[1] except IndexError: label = None T = cls.from_name(name) return T(label, section)