This is an automated email from the ASF dual-hosted git repository.
suyanhanx pushed a commit to branch gdrive
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/gdrive by this push:
new 941f17ed7 address issues
941f17ed7 is described below
commit 941f17ed7c543ecc2dd9c0333a29de6177fc16a2
Author: suyanhanx <[email protected]>
AuthorDate: Mon Aug 21 21:27:53 2023 +0800
address issues
Signed-off-by: suyanhanx <[email protected]>
---
core/src/services/gdrive/backend.rs | 15 +++++-
core/src/services/gdrive/core.rs | 97 +++++++++++++++++--------------------
2 files changed, 58 insertions(+), 54 deletions(-)
diff --git a/core/src/services/gdrive/backend.rs
b/core/src/services/gdrive/backend.rs
index 0e322545e..6da2c6d04 100644
--- a/core/src/services/gdrive/backend.rs
+++ b/core/src/services/gdrive/backend.rs
@@ -221,12 +221,23 @@ impl GdriveBackend {
"application/vnd.google-apps.folder" => EntryMode::DIR,
_ => EntryMode::FILE,
});
- meta =
meta.with_content_length(metadata.size.parse::<u64>().unwrap_or(0));
+ meta = meta.with_content_length(
+ metadata
+ .size
+ .unwrap_or(String::from("0"))
+ .parse::<u64>()
+ .map_err(|e| {
+ Error::new(ErrorKind::Unexpected, "parse content
length").set_source(e)
+ })?,
+ );
meta = meta.with_last_modified(
metadata
.modified_time
+ .unwrap_or_default()
.parse::<chrono::DateTime<Utc>>()
- .unwrap_or_default(),
+ .map_err(|e| {
+ Error::new(ErrorKind::Unexpected, "parse last modified
time").set_source(e)
+ })?,
);
Ok(meta)
}
diff --git a/core/src/services/gdrive/core.rs b/core/src/services/gdrive/core.rs
index cd816c7b7..3d5517a71 100644
--- a/core/src/services/gdrive/core.rs
+++ b/core/src/services/gdrive/core.rs
@@ -82,14 +82,14 @@ impl GdriveCore {
query += " and mimeType =
'application/vnd.google-apps.folder'";
}
- let req = self.sign(
- Request::get(format!(
- "https://www.googleapis.com/drive/v3/files?q={}",
- percent_encode_path(&query)
- ))
- .body(AsyncBody::default())
- .map_err(new_request_build_error)?,
- );
+ let mut req = Request::get(format!(
+ "https://www.googleapis.com/drive/v3/files?q={}",
+ percent_encode_path(&query)
+ ))
+ .body(AsyncBody::default())
+ .map_err(new_request_build_error)?;
+
+ let _ = self.sign(&mut req);
let resp = self.client.send(req).await?;
let status = resp.status();
@@ -143,14 +143,13 @@ impl GdriveCore {
item, parent
);
- let req = self.sign(
- Request::get(format!(
- "https://www.googleapis.com/drive/v3/files?q={}",
- percent_encode_path(&query)
- ))
- .body(AsyncBody::Empty)
- .map_err(new_request_build_error)?,
- );
+ let mut req = Request::get(format!(
+ "https://www.googleapis.com/drive/v3/files?q={}",
+ percent_encode_path(&query)
+ ))
+ .body(AsyncBody::Empty)
+ .map_err(new_request_build_error)?;
+ let _ = self.sign(&mut req);
let resp = self.client.send(req).await?;
let status = resp.status();
@@ -219,11 +218,11 @@ impl GdriveCore {
percent_encode_path(query.as_str())
);
- let req = self.sign(
- Request::get(&url)
- .body(AsyncBody::Empty)
- .map_err(new_request_build_error)?,
- );
+ let mut req = Request::get(&url)
+ .body(AsyncBody::Empty)
+ .map_err(new_request_build_error)?;
+
+ self.sign(&mut req)?;
self.client.send(req).await
}
@@ -238,7 +237,7 @@ impl GdriveCore {
) -> Result<Response<IncomingAsyncBody>> {
let url = "https://www.googleapis.com/drive/v3/files";
- let req = Request::post(url)
+ let mut req = Request::post(url)
.header(header::CONTENT_TYPE, "application/json")
.body(AsyncBody::Bytes(bytes::Bytes::from(
serde_json::to_vec(&json!({
@@ -256,7 +255,7 @@ impl GdriveCore {
)))
.map_err(new_request_build_error)?;
- let req = self.sign(req);
+ let _ = self.sign(&mut req);
self.client.send(req).await
}
@@ -266,14 +265,13 @@ impl GdriveCore {
// The file metadata in the Google Drive API is very complex.
// For now, we only need the file id, name, mime type and modified
time.
- let req = self.sign(
- Request::get(&format!(
-
"https://www.googleapis.com/drive/v3/files/{}?fields=id,name,mimeType,size,modifiedTime",
- path_id.as_str()
- ))
- .body(AsyncBody::Empty)
- .map_err(new_request_build_error)?,
- );
+ let mut req = Request::get(&format!(
+
"https://www.googleapis.com/drive/v3/files/{}?fields=id,name,mimeType,size,modifiedTime",
+ path_id.as_str()
+ ))
+ .body(AsyncBody::Empty)
+ .map_err(new_request_build_error)?;
+ let _ = self.sign(&mut req);
self.client.send(req).await
}
@@ -284,11 +282,10 @@ impl GdriveCore {
self.get_file_id_by_path(path).await?
);
- let req = self.sign(
- Request::get(&url)
- .body(AsyncBody::Empty)
- .map_err(new_request_build_error)?,
- );
+ let mut req = Request::get(&url)
+ .body(AsyncBody::Empty)
+ .map_err(new_request_build_error)?;
+ let _ = self.sign(&mut req);
self.client.send(req).await
}
@@ -315,7 +312,8 @@ impl GdriveCore {
req = req.header(header::CONTENT_TYPE, mime)
}
- let req = self.sign(req.body(body).map_err(new_request_build_error)?);
+ let mut req = req.body(body).map_err(new_request_build_error)?;
+ let _ = self.sign(&mut req);
self.client.send(req).await
}
@@ -330,7 +328,7 @@ impl GdriveCore {
.body(AsyncBody::Empty)
.map_err(new_request_build_error)?;
- req = self.sign(req);
+ let _ = self.sign(&mut req);
self.client.send(req).await
}
@@ -374,7 +372,7 @@ impl GdriveCore {
let mut req = multipart.apply(req)?;
- req = self.sign(req);
+ let _ = self.sign(&mut req);
self.client.send(req).await
}
@@ -397,20 +395,17 @@ impl GdriveCore {
.body(AsyncBody::Bytes(body))
.map_err(new_request_build_error)?;
- req = self.sign(req);
+ let _ = self.sign(&mut req);
self.client.send(req).await
}
- fn sign<T>(&self, mut req: Request<T>) -> Request<T> {
+ fn sign<T>(&self, req: &mut Request<T>) -> Result<()> {
let auth_header_content = format!("Bearer {}", self.access_token);
- req.headers_mut().insert(
- header::AUTHORIZATION,
- auth_header_content
- .parse()
- .expect("failed to parse auth header"),
- );
- req
+ req.headers_mut()
+ .insert(header::AUTHORIZATION,
auth_header_content.parse().unwrap());
+
+ Ok(())
}
}
@@ -423,10 +418,8 @@ pub struct GdriveFile {
pub mime_type: String,
pub id: String,
pub name: String,
- #[serde(default)]
- pub size: String,
- #[serde(default)]
- pub modified_time: String,
+ pub size: Option<String>,
+ pub modified_time: Option<String>,
}
// refer to
https://developers.google.com/drive/api/reference/rest/v3/files/list