Skip to content

Commit 61454da

Browse files
committed
feat(#540): add dataset-size to response
The dataset-response now also contains the number of rows and columns of the dataset. Signed-off-by: Tobias Anker <tobias.anker@kitsunemimi.moe>
1 parent 117ea17 commit 61454da

5 files changed

Lines changed: 51 additions & 18 deletions

File tree

.github/workflows/build_test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,7 @@ jobs:
619619
mkdir -p test_dir
620620
cp sdk_api_test.py test_dir/
621621
cp test_values.py test_dir/
622+
cp csv_test.csv test_dir/
622623
cd test_dir
623624
/usr/bin/python3 sdk_api_test.py
624625

src/hanami/src/api/http_endpoints/dataset/create_dataset_v1_0.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use crate::database::dataset_table;
3030
use crate::config;
3131

3232
use hanami_dataset::converter::{load_mnist_images, load_csv_file};
33+
use hanami_dataset::dataset_io::read_data_set_file;
3334
use hanami_common::error::HanamiError;
3435

3536
use super::dataset_structs::DatasetResp;
@@ -231,10 +232,19 @@ pub async fn upload_binary(mut payload: Multipart, path: Path<(String, String)>,
231232
}
232233
}
233234

235+
let file_handle = match read_data_set_file(&target_filepath) {
236+
Ok(file_handle) => file_handle,
237+
Err(_) => {
238+
return Err(ErrorResponse::InternalError("".to_string()));
239+
}
240+
};
241+
234242
// create response
235243
let resp = DatasetResp {
236244
uuid: dataset_uuid.clone(),
237245
name: dataset.name.clone(),
246+
number_of_rows: file_handle.get_number_of_rows(),
247+
number_of_columns: file_handle.header.columns.len() as u64,
238248
created_by: dataset.created_by.clone(),
239249
created_at: dataset.created_at.clone(),
240250
updated_by: dataset.updated_by.clone(),

src/hanami/src/api/http_endpoints/dataset/dataset_structs.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ pub struct DatasetCreateReq {
2727
pub struct DatasetResp {
2828
pub uuid: Uuid,
2929
pub name: String,
30+
pub number_of_rows: u64,
31+
pub number_of_columns: u64,
3032
pub created_at: String,
3133
pub created_by: String,
3234
pub updated_at: String,

src/hanami/src/api/http_endpoints/dataset/get_dataset_v1_0.rs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ use actix_web::web::Json;
1616
use actix_web::web::Path;
1717
use apistos::api_operation;
1818
use uuid::Uuid;
19+
use std::path::PathBuf;
1920

2021
use crate::api::errors::ErrorResponse;
2122
use crate::api::user_context::UserContext;
2223
use crate::database::dataset_table;
24+
2325
use hanami_common::enums;
26+
use hanami_dataset::dataset_io::read_data_set_file;
2427

2528
use super::dataset_structs::DatasetResp;
2629

@@ -34,19 +37,8 @@ use super::dataset_structs::DatasetResp;
3437
error_code = 500
3538
)]
3639
pub async fn get_dataset(dataset_uuid: Path<Uuid>, context: UserContext) -> Result<Json<DatasetResp>, ErrorResponse> {
37-
match dataset_table::get_dataset(&dataset_uuid, &context) {
38-
Ok(dataset) => {
39-
let resp = DatasetResp {
40-
uuid: dataset_uuid.clone(),
41-
name: dataset.name.clone(),
42-
created_by: dataset.created_by.clone(),
43-
created_at: dataset.created_at.clone(),
44-
updated_by: dataset.updated_by.clone(),
45-
updated_at: dataset.updated_at.clone(),
46-
};
47-
48-
return Ok(Json(resp));
49-
},
40+
let dataset_data = match dataset_table::get_dataset(&dataset_uuid, &context) {
41+
Ok(dataset_data) => dataset_data,
5042
Err(enums::DbError::InternalError) => {
5143
return Err(ErrorResponse::InternalError("".to_string()));
5244
},
@@ -55,4 +47,24 @@ pub async fn get_dataset(dataset_uuid: Path<Uuid>, context: UserContext) -> Resu
5547
return Err(ErrorResponse::NotFound(msg));
5648
}
5749
};
50+
51+
let file_handle = match read_data_set_file(&PathBuf::from(dataset_data.file_path)) {
52+
Ok(file_handle) => file_handle,
53+
Err(_) => {
54+
return Err(ErrorResponse::InternalError("".to_string()));
55+
}
56+
};
57+
58+
let resp = DatasetResp {
59+
uuid: dataset_uuid.clone(),
60+
name: dataset_data.name.clone(),
61+
number_of_rows: file_handle.get_number_of_rows(),
62+
number_of_columns: file_handle.header.columns.len() as u64,
63+
created_by: dataset_data.created_by.clone(),
64+
created_at: dataset_data.created_at.clone(),
65+
updated_by: dataset_data.updated_by.clone(),
66+
updated_at: dataset_data.updated_at.clone(),
67+
};
68+
69+
return Ok(Json(resp));
5870
}

testing/python_sdk_api/sdk_api_test.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,21 +137,29 @@ def test_dataset():
137137

138138
result = dataset.upload_mnist_files(
139139
token, address, train_dataset_name, train_inputs, train_labels, False)
140-
dataset_uuid = result["uuid"]
140+
mnist_dataset_uuid = result["uuid"]
141141

142142
dataset.list_datasets(token, address, False)
143-
dataset.get_dataset(token, address, dataset_uuid, False)
143+
mnist_dataset = dataset.get_dataset(token, address, mnist_dataset_uuid, False)
144+
assert mnist_dataset["number_of_rows"] == 60000
145+
assert mnist_dataset["number_of_columns"] == 2
144146

145-
dataset.upload_csv_files(
147+
result = dataset.upload_csv_files(
146148
token, address, "csv_test", "./csv_test.csv", False)
149+
csv_dataset_uuid = result["uuid"]
150+
151+
csv_dataset = dataset.get_dataset(token, address, csv_dataset_uuid, False)
152+
assert csv_dataset["number_of_rows"] == 3
153+
assert csv_dataset["number_of_columns"] == 3
147154

148155
try:
149156
dataset.get_dataset(token, address, " 569003fd-bf24-410b-8678-28f141877ac9", False)
150157
except hanami_exceptions.NotFoundException:
151158
pass
152-
dataset.delete_dataset(token, address, dataset_uuid, False)
159+
dataset.delete_dataset(token, address, mnist_dataset_uuid, False)
160+
dataset.delete_dataset(token, address, csv_dataset_uuid, False)
153161
try:
154-
dataset.delete_dataset(token, address, dataset_uuid, False)
162+
dataset.delete_dataset(token, address, mnist_dataset_uuid, False)
155163
except hanami_exceptions.NotFoundException:
156164
pass
157165

0 commit comments

Comments
 (0)