Skip to content

Commit feac95b

Browse files
authored
Merge pull request #1352 from microbiomedata/1344-bulk-download-size
Show per-workflow and per-filetype sizes in bulk download
2 parents 97c1249 + e3b2e9c commit feac95b

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

nmdc_server/aggregations.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ def get_data_object_aggregation(
175175
models.DataObject.workflow_type,
176176
models.DataObject.file_type,
177177
func.count(models.DataObject.id),
178+
func.sum(func.coalesce(models.DataObject.file_size_bytes, 0)),
178179
)
179180
.filter(
180181
models.DataObject.workflow_type != None,
@@ -195,6 +196,7 @@ def get_data_object_aggregation(
195196
db.query(
196197
models.DataObject.workflow_type,
197198
func.count(models.DataObject.id),
199+
func.sum(func.coalesce(models.DataObject.file_size_bytes, 0)),
198200
)
199201
.filter(
200202
models.DataObject.workflow_type != None,
@@ -205,13 +207,15 @@ def get_data_object_aggregation(
205207
)
206208
for row in rows:
207209
agg[row[0]].count = row[1]
210+
agg[row[0]].size = row[2]
208211

209212
# aggregate file_types
210213
rows = (
211214
db.query(
212215
models.DataObject.workflow_type,
213216
models.DataObject.file_type,
214217
func.count(models.DataObject.id),
218+
func.sum(func.coalesce(models.DataObject.file_size_bytes, 0)),
215219
)
216220
.filter(
217221
models.DataObject.workflow_type != None,
@@ -222,5 +226,7 @@ def get_data_object_aggregation(
222226
.group_by(models.DataObject.workflow_type, models.DataObject.file_type)
223227
)
224228
for row in rows:
225-
agg[row[0]].file_types[row[1]] = row[2]
229+
agg[row[0]].file_types[row[1]] = schemas.DataObjectAggregationNode(
230+
count=row[2], size=row[3]
231+
)
226232
return agg

nmdc_server/schemas.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,13 @@ class Config:
190190
orm_mode = True
191191

192192

193-
class DataObjectAggregationElement(BaseModel):
193+
class DataObjectAggregationNode(BaseModel):
194194
count: int = 0
195-
file_types: Dict[str, int] = {}
195+
size: int = 0
196+
197+
198+
class DataObjectAggregationElement(DataObjectAggregationNode):
199+
file_types: Dict[str, DataObjectAggregationNode] = {}
196200

197201

198202
DataObjectAggregation = Dict[str, DataObjectAggregationElement]

web/src/components/BulkDownload.vue

+11-3
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,21 @@ export default defineComponent({
3535
download,
3636
} = useBulkDownload(stateRefs.conditions, dataObjectFilter);
3737
38+
function createLabelString(label: string, count: number, size: number): string {
39+
const labelString = `${label} (${count}`;
40+
if (size > 0) {
41+
return `${labelString}, ${humanFileSize(size)})`;
42+
}
43+
return `${labelString})`;
44+
}
45+
3846
const options = computed(() => Object.entries(downloadOptions.value)
3947
.map(([key, val]) => ({
4048
id: key,
41-
label: `${key} (${val.count})`,
42-
children: Object.entries(val.file_types).map(([filetype, count]) => ({
49+
label: createLabelString(key, val.count, val.size),
50+
children: Object.entries(val.file_types).map(([filetype, fileTypeStats]) => ({
4351
id: `${key}::${filetype}`,
44-
label: `${filetype} (${count})`,
52+
label: createLabelString(filetype, fileTypeStats.count, fileTypeStats.size),
4553
})),
4654
})));
4755

web/src/data/api.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,8 @@ export const opMap: Record<opType, string> = {
295295
// See https://github.com/microbiomedata/nmdc-server/pull/403 for documentation
296296
export type BulkDownloadSummary = Record<string, {
297297
count: number;
298-
file_types: Record<string, number>,
298+
size: number;
299+
file_types: Record<string, { count: number, size: number }>,
299300
}>;
300301

301302
export type BulkDownloadAggregateSummary = {

0 commit comments

Comments
 (0)