I have a yaml config file that has the following structure
paths:
log: ./runs
data: ./data
data:
downloads: [
{
name: "1",
url: "url_1",
file: "file_1"
},
{
name: "2",
url: "url_2",
file: "file_2"
},
{
name: "3",
url: "url_3",
file: "file_3"
}
]
which I'd like to load into this Config dataclass:
@dataclass
class Config:
paths: Paths
data: Data
where
@dataclass
class Paths:
log: str
data: str
@dataclass
class Download:
name: str
url: str
file: str
def download(self):
print("downloading")
@dataclass
class Data:
downloads: list[Download]
so that each of 'downloads' dictionaries in my config populates a Download dataclass and I can then call the download method.
In my main function I've got something like this:
cs = ConfigStore.instance()
cs.store(name="test_config", node=Config)
@hydra.main(version_base=None, config_path="configs", config_name="config")
def main(cfg: Config):
for downloader in cfg.data.downloads:
downloader.download()
Currently the config structure sorts out the typing but I'm not getting instances of the objects, just dictionaries, and so calling download() raises an error.
I'm still getting my head round how hydra works - is it actually possible to return the populated objects or do I need some intermediate step to create them?