Skip to content

Commit b64fbb6

Browse files
authored
Merge pull request #961 from EnergySystemsModellingLab/make-empty-csv-files-optional
enable missing optional csv files
2 parents 89e7a28 + f07d876 commit b64fbb6

9 files changed

Lines changed: 18 additions & 7 deletions

File tree

docs/templates/input_files.md.jinja

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<!-- markdownlint-disable MD033 -->
77

88
This file contains information about the file formats for MUSE2 input files.
9+
It is not required to supply every input file - empty files can be omitted.
910

1011
{{ toml_info }}
1112

examples/missing_commodity/agent_search_space.csv

Lines changed: 0 additions & 1 deletion
This file was deleted.

examples/muse1_default/agent_cost_limits.csv

Lines changed: 0 additions & 1 deletion
This file was deleted.

examples/muse1_default/agent_search_space.csv

Lines changed: 0 additions & 1 deletion
This file was deleted.

examples/simple/agent_search_space.csv

Lines changed: 0 additions & 1 deletion
This file was deleted.

examples/two_outputs/agent_search_space.csv

Lines changed: 0 additions & 1 deletion
This file was deleted.

examples/two_regions/agent_cost_limits.csv

Lines changed: 0 additions & 1 deletion
This file was deleted.

examples/two_regions/agent_search_space.csv

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/input.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ pub fn read_csv<'a, T: DeserializeOwned + 'a>(
5656
pub fn read_csv_optional<'a, T: DeserializeOwned + 'a>(
5757
file_path: &'a Path,
5858
) -> Result<impl Iterator<Item = T> + 'a> {
59+
if !file_path.exists() {
60+
return Ok(Vec::new().into_iter());
61+
}
62+
5963
let vec = read_csv_internal(file_path)?;
6064
Ok(vec.into_iter())
6165
}
@@ -347,6 +351,19 @@ mod tests {
347351
.next()
348352
.is_none()
349353
);
354+
355+
// Missing file
356+
let dir = tempdir().unwrap();
357+
let file_path = dir.path().join("a_missing_file.csv");
358+
assert!(!file_path.exists());
359+
assert!(read_csv::<Record>(&file_path).is_err());
360+
// optional csv's should return empty iterator
361+
assert!(
362+
read_csv_optional::<Record>(&file_path)
363+
.unwrap()
364+
.next()
365+
.is_none()
366+
);
350367
}
351368

352369
#[test]

0 commit comments

Comments
 (0)