def METHOD_NAME(
    cls,
    data_node_configs: List[DataNodeConfig],
    cycle_id: Optional[CycleId] = None,
    scenario_id: Optional[ScenarioId] = None,
) -> Dict[DataNodeConfig, DataNode]:
    data_node_configs = [Config.data_nodes[dnc.id] for dnc in data_node_configs]
    dn_configs_and_owner_id = []
    for dn_config in data_node_configs:
        scope = dn_config.scope
        owner_id: Union[Optional[SequenceId], Optional[ScenarioId], Optional[CycleId]]
        if scope == Scope.SCENARIO:
            owner_id = scenario_id
        elif scope == Scope.CYCLE:
            owner_id = cycle_id
        else:
            owner_id = None
        dn_configs_and_owner_id.append((dn_config, owner_id))
    data_nodes = cls._repository._get_by_configs_and_owner_ids(
        dn_configs_and_owner_id, cls._build_filters_with_version(None)
    )
    return {
        dn_config: data_nodes.get((dn_config, owner_id)) or cls._create_and_set(dn_config, owner_id, None)
        for dn_config, owner_id in dn_configs_and_owner_id
    }