Skip to content

Commit ec6a984

Browse files
committed
Ignore permissions errors getting mentoring sessions
1 parent 5ded604 commit ec6a984

1 file changed

Lines changed: 45 additions & 31 deletions

File tree

src/mentoring.rs

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::collections::{btree_map::Entry, BTreeMap};
33
use anyhow::Context;
44
use chrono::{NaiveDate, Utc};
55
use serde::Serialize;
6+
use sheets::types::GridData;
67
use tracing::warn;
78

89
use crate::{
@@ -37,42 +38,13 @@ pub async fn get_mentoring_records(
3738
client: SheetsClient,
3839
mentoring_records_sheet_id: &str,
3940
) -> Result<MentoringRecords, Error> {
40-
let data = client
41-
.get(mentoring_records_sheet_id, true, &[])
42-
.await
43-
.map_err(|err| {
44-
err.with_context(|| {
45-
format!(
46-
"Failed to get spreadsheet with ID {}",
47-
mentoring_records_sheet_id
48-
)
49-
})
50-
})?;
51-
let expected_sheet_title = "Feedback";
52-
let sheet = data
53-
.body
54-
.sheets
55-
.into_iter()
56-
.find(|sheet| {
57-
sheet
58-
.properties
59-
.as_ref()
60-
.map(|properties| properties.title.as_str())
61-
== Some(expected_sheet_title)
62-
})
63-
.ok_or_else(|| {
64-
Error::Fatal(anyhow::anyhow!(
65-
"Couldn't find sheet '{}' in spreadsheet with ID {}",
66-
expected_sheet_title,
67-
mentoring_records_sheet_id
68-
))
69-
})?;
41+
let sheet_data = get_mentoring_records_grid_data(client, mentoring_records_sheet_id).await?;
7042

7143
let mut mentoring_records = MentoringRecords {
7244
records: BTreeMap::new(),
7345
};
7446

75-
for sheet_data in sheet.data {
47+
for sheet_data in sheet_data {
7648
if sheet_data.start_column != 0 || sheet_data.start_row != 0 {
7749
return Err(Error::Fatal(anyhow::anyhow!(
7850
"Start column and row were {} and {}, expected 0 and 0",
@@ -124,3 +96,45 @@ pub async fn get_mentoring_records(
12496
}
12597
Ok(mentoring_records)
12698
}
99+
100+
async fn get_mentoring_records_grid_data(
101+
client: SheetsClient,
102+
mentoring_records_sheet_id: &str,
103+
) -> Result<Vec<GridData>, Error> {
104+
let data_result = client.get(mentoring_records_sheet_id, true, &[]).await;
105+
let data = match data_result {
106+
Ok(data) => data,
107+
Err(Error::PotentiallyIgnorablePermissions(_)) => {
108+
return Ok(Vec::new());
109+
}
110+
Err(err) => {
111+
let err = err.with_context(|| {
112+
format!(
113+
"Failed to get spreadsheet with ID {}",
114+
mentoring_records_sheet_id
115+
)
116+
});
117+
return Err(err);
118+
}
119+
};
120+
let expected_sheet_title = "Feedback";
121+
let sheet = data
122+
.body
123+
.sheets
124+
.into_iter()
125+
.find(|sheet| {
126+
sheet
127+
.properties
128+
.as_ref()
129+
.map(|properties| properties.title.as_str())
130+
== Some(expected_sheet_title)
131+
})
132+
.ok_or_else(|| {
133+
Error::Fatal(anyhow::anyhow!(
134+
"Couldn't find sheet '{}' in spreadsheet with ID {}",
135+
expected_sheet_title,
136+
mentoring_records_sheet_id
137+
))
138+
})?;
139+
Ok(sheet.data)
140+
}

0 commit comments

Comments
 (0)