Skip to content

Commit 60d1deb

Browse files
authored
Merge pull request #2059 from FedML-AI/dev/v0.7.0
Dev/v0.7.0
2 parents cf3b40f + 02e2207 commit 60d1deb

File tree

3 files changed

+35
-10
lines changed

3 files changed

+35
-10
lines changed

python/fedml/api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ def get_storage_metadata(data_name, api_key=None) -> FedMLResponse:
194194
return storage.get_metadata(api_key=api_key, data_name=data_name)
195195

196196

197-
def list_storage_obects(api_key=None) -> FedMLResponse:
197+
def list_storage_objects(api_key=None) -> FedMLResponse:
198198
return storage.list_objects(api_key=api_key)
199199

200200

python/fedml/api/modules/storage.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,19 @@
1010
from fedml.api.fedml_response import FedMLResponse, ResponseCode
1111

1212

13-
# Todo (alaydshah): Add file size
1413
class StorageMetadata(object):
1514
def __init__(self, data: dict):
1615
self.dataName = data.get("datasetName", None)
1716
self.description = data.get("description", None)
1817
self.tags = data.get("description", None)
1918
self.createdAt = data.get("createTime", None)
2019
self.updatedAt = data.get("updateTime", None)
20+
self.size = _get_size(data.get("fileSize",None))
2121

2222

23-
# Todo (alaydshah): Add file size while creating objects. Store service name in metadata
23+
# Todo (alaydshah): Store service name in metadata
2424
# Todo (alaydshah): If data already exists, don't upload again. Instead suggest to use update command
2525

26-
2726
def upload(data_path, api_key, name, description, service, show_progress, out_progress_to_err, progress_desc,
2827
metadata) -> FedMLResponse:
2928
api_key = authenticate(api_key)
@@ -32,6 +31,9 @@ def upload(data_path, api_key, name, description, service, show_progress, out_pr
3231

3332
if user_id is None:
3433
return FedMLResponse(code=ResponseCode.FAILURE, message=message)
34+
35+
if(not _check_data_path(data_path)):
36+
return FedMLResponse(code=ResponseCode.FAILURE,message="Invalid data path")
3537

3638
archive_path, message = _archive_data(data_path)
3739
if not archive_path:
@@ -41,6 +43,7 @@ def upload(data_path, api_key, name, description, service, show_progress, out_pr
4143
name = os.path.splitext(os.path.basename(archive_path))[0] if name is None else name
4244
file_name = name + ".zip"
4345
dest_path = os.path.join(user_id, file_name)
46+
file_size = os.path.getsize(archive_path)
4447

4548
file_uploaded_url = store.upload_file_with_progress(src_local_path=archive_path, dest_s3_path=dest_path,
4649
show_progress=show_progress,
@@ -53,7 +56,7 @@ def upload(data_path, api_key, name, description, service, show_progress, out_pr
5356
json_data = {
5457
"datasetName": name,
5558
"description": description,
56-
"fileSize": "",
59+
"fileSize": file_size,
5760
"fileUrl": file_uploaded_url,
5861
"tagNameList": [],
5962
}
@@ -228,6 +231,11 @@ def _get_storage_service(service):
228231
else:
229232
raise NotImplementedError(f"Service {service} not implemented")
230233

234+
def _check_data_path(data_path):
235+
if not os.path.isdir(data_path) or not os.path.isfile(data_path):
236+
return False
237+
return True
238+
231239

232240
def _archive_data(data_path: str) -> (str, str):
233241
src_local_path = os.path.abspath(data_path)
@@ -350,3 +358,20 @@ def _get_data_from_response(message: str, response: requests.Response) -> (Respo
350358
return ResponseCode.FAILURE, message, None
351359

352360
return ResponseCode.SUCCESS, "Successfully parsed data from response", data
361+
362+
def _get_size(size_in_bytes:str)->str:
363+
size_str = ""
364+
if(size_in_bytes):
365+
size = int(size_in_bytes)
366+
size_in_gb = size / (1024 * 1024 * 1024)
367+
size_in_mb = size / (1024 * 1024)
368+
size_in_kb = size / 1024
369+
if(size_in_gb >= 1):
370+
size_str = f"{size_in_gb:.2f} GB"
371+
elif(size_in_mb >= 1):
372+
size_str = f"{size_in_mb:.2f} MB"
373+
elif(size_in_kb >= 1):
374+
size_str = f"{size_in_kb:.2f} KB"
375+
else:
376+
size_str = f"{size} B"
377+
return size_str

python/fedml/cli/modules/storage.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,16 @@ def upload(data_path: str, name: str, user_metadata: str, description: str, vers
9090
)
9191
def list_data(version, api_key):
9292
fedml.set_env_version(version)
93-
response = fedml.api.list_storage_obects(api_key=api_key)
93+
response = fedml.api.list_storage_objects(api_key=api_key)
9494
if response.code == ResponseCode.SUCCESS:
9595
click.echo(f"Successfully fetched list of stored objects:")
9696
if not response.data:
9797
click.echo(f"No stored objects found for account linked with apikey: {api_key}")
9898
return
99-
object_list_table = PrettyTable(["Data Name", "Description", "Created At", "Updated At"])
99+
object_list_table = PrettyTable(["Data Name", "Data Size", "Description", "Created At", "Updated At"])
100100
for stored_object in response.data:
101101
object_list_table.add_row(
102-
[stored_object.dataName, stored_object.description, stored_object.createdAt, stored_object.updatedAt])
102+
[stored_object.dataName, stored_object.size, stored_object.description, stored_object.createdAt, stored_object.updatedAt])
103103
click.echo(object_list_table)
104104
else:
105105
click.echo(f"Failed to list stored objects for account linked with apikey {api_key}. "
@@ -157,8 +157,8 @@ def get_metadata(data_name, version, api_key):
157157
return
158158
click.echo(f"Successfully fetched metadata for object {data_name}:")
159159
# Todo (alaydshah): Add file size and tags
160-
metadata_table = PrettyTable(["Data Name", "Description", "Created At", "Updated At"])
161-
metadata_table.add_row([metadata.dataName, metadata.description, metadata.createdAt, metadata.updatedAt])
160+
metadata_table = PrettyTable(["Data Name","Data Size","Description", "Created At", "Updated At"])
161+
metadata_table.add_row([metadata.dataName,metadata.size,metadata.description, metadata.createdAt, metadata.updatedAt])
162162
click.echo(metadata_table)
163163
click.echo("")
164164
else:

0 commit comments

Comments
 (0)