from collections.abc import Sequence from hydra_zen import store, make_config, zen, MISSING from omegaconf import OmegaConf, DictConfig class Item: def __init__(self, msg: str): self.msg = msg def __repr__(self) -> str: return f'Item(msg={self.msg})' class Repository: def __init__(self, items: Item | Sequence[Item]): self.items = items def __repr__(self) -> str: return f'Repository(items={self.items})' def app(repository: Repository, zen_cfg: DictConfig): print(repository) OmegaConf.resolve(zen_cfg) print(OmegaConf.to_yaml(zen_cfg)) items_store = store(group='repository/items') items_store(Item, msg='a', name='item_a') items_store(Item, msg='b', name='item_b') items_store( make_config( items='${oc.dict.values:repository.items._items_dict}', hydra_defaults=[ 'item_a@_items_dict.item1', 'item_b@_items_dict.item2', '_self_' ], zen_meta={'_items_dict': MISSING} ), package='_global_.repository', name='default' ) repository_store = store(group='repository') repository_store( Repository, hydra_defaults=[ '_self_', {'items': 'default'} ], name='default' ) store( app, hydra_defaults=[ '_self_', {'repository': 'default'} ] ) if __name__ == '__main__': store.add_to_hydra_store() zen(app).hydra_main(config_path=None, config_name='app', version_base='1.3')