From 946c3b7f02bc0bfed96a6990417eaf0bb7f92763 Mon Sep 17 00:00:00 2001 From: Michael Nguyen Date: Mon, 20 Jan 2025 13:47:35 -0500 Subject: [PATCH 1/9] init --- .DS_Store | Bin 10244 -> 0 bytes datatorch/api/scripts/bulk_upload.py | 2 ++ setup.py | 10 +++++----- 3 files changed, 7 insertions(+), 5 deletions(-) delete mode 100644 .DS_Store create mode 100644 datatorch/api/scripts/bulk_upload.py diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 09cf8f047bfbc7139a0cc5c468e900e63acc7913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHM&2AGh5FR%v*|dP7svJNJ#gUCAUFUj*+5zj2*6N-?tL(i6Q5>+M5(=cEdm}kI7SB^^bmI7)f&+n0oFC0vdP)mPg zL5oAZL>=;JsLuH_+;igX+&-sEpBV*l^NQHR!9-`$GI3f`&HsQb$9tfsGaoVP}NZl%!r4w;Mh5m*^ed(Vw1CGW9LNQ~}rybV7_% zqPkoq-;ngdwhz9wH4rnH)L$kS%rUZ^o=LKoL}sN`uq=&Ruy<@dsyiMWx`EugpYCDc z4~CBOODtuw%U5z%&RVrzH@eZdF>DS;gIcrylHZ<1QQ)4mo9=Vp8}Ap^A4lP^>4#ol zD)?;=kXJAKupNzS(I{*Wq;5lfu<}-Zzi?|ZDQ`Ltigvl|>>L;E$xeB@Xm4*-j*s)! zjXU=r?(H80y)gO$K2SuQ^68p-pFO{#HM9Jv(GP|$MW2B0+HKS~ zs9YE~RZ^_&WYBDq|g%T+pt@a;hYHP|p3&fd6u>b%qx<=KLSuJf}|0 L=KOz#_ppBfvc4Ue diff --git a/datatorch/api/scripts/bulk_upload.py b/datatorch/api/scripts/bulk_upload.py new file mode 100644 index 0000000..ccdd25b --- /dev/null +++ b/datatorch/api/scripts/bulk_upload.py @@ -0,0 +1,2 @@ +import datatorch +print('hello world') \ No newline at end of file diff --git a/setup.py b/setup.py index a41131e..a20eec8 100644 --- a/setup.py +++ b/setup.py @@ -1,8 +1,8 @@ from setuptools import setup, find_packages import sys -# Ensure the Python version is 3.13 or higher -assert sys.version_info >= (3, 13, 0), "DataTorch requires Python 3.13+" +# Ensure the Python version is 3.12 or higher +assert sys.version_info >= (3, 12, 0), "DataTorch requires Python 3.12+" with open("README.md", "r", encoding="utf-8") as fp: long_description = fp.read() @@ -33,7 +33,7 @@ setup( name="datatorch", - version="0.4.8.4", + version="0.4.8.5", description="A CLI and library for interacting with DataTorch.", author="DataTorch", author_email="support@datatorch.io", @@ -45,7 +45,7 @@ long_description=long_description, long_description_content_type="text/markdown", install_requires=requirements, - python_requires=">=3.13", + python_requires=">=3.12", license="MIT license", zip_safe=False, include_package_data=True, @@ -55,7 +55,7 @@ "Framework :: Pytest", "Intended Audience :: Developers", "Natural Language :: English", - "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Python Modules", ], From eda03944e19dc5f0412be0ccf2c99892d1ee5853 Mon Sep 17 00:00:00 2001 From: han-nwin Date: Mon, 20 Jan 2025 17:43:27 -0600 Subject: [PATCH 2/9] upload file in bulk using bulk_upload.py script --- datatorch/api/api.py | 45 ++++++++++++ datatorch/api/scripts/bulk_upload.py | 101 ++++++++++++++++++++++++++- 2 files changed, 144 insertions(+), 2 deletions(-) diff --git a/datatorch/api/api.py b/datatorch/api/api.py index 883b9fb..f6f4d61 100644 --- a/datatorch/api/api.py +++ b/datatorch/api/api.py @@ -163,6 +163,51 @@ def upload_to_default_filesource( ) print(r.text + " " + endpoint) + def upload_to_storage_with_id( + self, + storage_id: str, + file: IO, + storageFolderName=None, + dataset: Dataset = None, + **kwargs, + ): + """Uploads a file to a specific storage ID.""" + storageFolderName = "" if storageFolderName is None else storageFolderName + datasetId = "" if dataset is None else dataset.id + importFiles = "false" if dataset is None else "true" + + # Construct the endpoint + endpoint = f"{self.api_url}/file/v1/upload/{storage_id}?path={storageFolderName}&import={importFiles}&datasetId={datasetId}" + + # Debugging request details + # print(f"Uploading to endpoint: {endpoint}") + # print(f"Headers: {self.token_header}: {self._api_token}") + # print(f"File Name: {file.name}") + # print(f"Storage ID: {storage_id}, Folder Name: {storageFolderName}") + + # Determine MIME type + if magic: + tell = file.tell() + mimetype = magic.from_buffer(file.read(1024), mime=True) + file.seek(tell) + else: + mimetype = mimetypes.guess_type(file.name)[0] + print(f"MIME Type: {mimetype}") + + # Make the POST request + r = requests.post( + endpoint, + files={"file": (os.path.basename(file.name), file, mimetype)}, + headers={self.token_header: self._api_token}, + stream=True, + ) + + # Print response for debugging + print(f"Response Status Code: {r.status_code}") + print(f"Response Text: {r.text}") + + r.raise_for_status() + def glob_upload_folder( self, project: Project, diff --git a/datatorch/api/scripts/bulk_upload.py b/datatorch/api/scripts/bulk_upload.py index ccdd25b..ad7953e 100644 --- a/datatorch/api/scripts/bulk_upload.py +++ b/datatorch/api/scripts/bulk_upload.py @@ -1,2 +1,99 @@ -import datatorch -print('hello world') \ No newline at end of file +import sys +import os +from datatorch.core.settings import UserSettings +from datatorch.api.api import ApiClient + +def main(folder_path: str, project_id: str): + if not os.path.exists(folder_path): + print(f"Error: The folder '{folder_path}' does not exist.") + sys.exit(1) + + # Load user settings + user_settings = UserSettings() + api_key = user_settings.api_key + api_url = user_settings.api_url + + if not api_key or not api_url: + print("You are not logged in. " + "Please log in using the `login` command.") + sys.exit(1) + + # Initialize the API client + client = ApiClient(api_url=api_url, api_key=api_key) + + # Validate the endpoint + if not client.validate_endpoint(): + print("Error: Invalid API endpoint.") + sys.exit(1) + else: + print("Valid endpoint") + + # Retrieve the project by ID + try: + project = client.project(project_id) + print(f"\nRetrieved project: {project.name}") + except Exception as e: + print(f"Error: Unable to retrieve project with ID '{project_id}'. {e}") + sys.exit(1) + + # Display available storage links and prompt user selection + try: + storage_links = project.storage_links() + if not storage_links: + print("No storage available for this project.") + sys.exit(1) + + print("\nAvailable Storages:") + for idx, storage_link in enumerate(storage_links): + print(f"{idx + 1}. {storage_link.name} (ID: {storage_link.id})") + + # Prompt user to select a storage link + while True: + try: + choice = int(input("Enter the number of " + "the storage link to use: ")) + if 1 <= choice <= len(storage_links): + selected_storage_link = storage_links[choice - 1] + break + else: + print(f"Please enter a number " + f"between 1 and {len(storage_links)}.") + except ValueError: + print("Invalid input. Please enter a valid number.") + + print( + f"Selected Storage Link: {selected_storage_link.name} " + f"(ID: {selected_storage_link.id})\n" + ) + + except Exception as e: + print(f"Error retrieving storage links: {e}") + sys.exit(1) + + # Upload files to the selected storage link using its ID + try: + for file_name in os.listdir(folder_path): + file_path = os.path.join(folder_path, file_name) + if os.path.isfile(file_path): + print(f"Uploading file: {file_name}...") + with open(file_path, "rb") as file: + client.upload_to_storage_with_id( + storage_id=selected_storage_link.id, + file=file, + storageFolderName=None, + dataset=None, + ) + print(f"Upload {file_name} completed successfully!") + except Exception as e: + print(f"Error during upload {file_name}: {e}") + sys.exit(1) + + +if __name__ == "__main__": + if len(sys.argv) != 3: + print("Usage: python3 bulk_upload.py ") + sys.exit(1) + + folder_path = sys.argv[1] + project_id = sys.argv[2] + main(folder_path, project_id) From 9ef2554f0589c4f28ca3b748a6967b6833da3a9e Mon Sep 17 00:00:00 2001 From: han-nwin Date: Mon, 20 Jan 2025 23:45:08 -0600 Subject: [PATCH 3/9] add bulk_upload cli tag. Need to test and connect projects --- datatorch/cli/groups.py | 3 + datatorch/cli/upload/bulk_upload.py | 103 ++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 datatorch/cli/upload/bulk_upload.py diff --git a/datatorch/cli/groups.py b/datatorch/cli/groups.py index 71ecd96..4a877ed 100644 --- a/datatorch/cli/groups.py +++ b/datatorch/cli/groups.py @@ -12,6 +12,7 @@ from .pipeline import pipeline from .action import action from .import_cmds import import_cmd +from .upload import bulk_upload @click.group() @@ -29,3 +30,5 @@ def main(): main.add_command(agent) main.add_command(action) main.add_command(import_cmd) + +main.add_command(bulk_upload) diff --git a/datatorch/cli/upload/bulk_upload.py b/datatorch/cli/upload/bulk_upload.py new file mode 100644 index 0000000..1de2500 --- /dev/null +++ b/datatorch/cli/upload/bulk_upload.py @@ -0,0 +1,103 @@ +import os +import click +from datatorch.core.settings import UserSettings +from datatorch.api.api import ApiClient +from spinner import Spinner + + +@click.command("bulk-upload") +@click.argument("folder_path", type=click.Path(exists=True, file_okay=False)) +@click.argument("project_id", type=str) + +def bulk_upload(folder_path, project_id): + """Bulk upload files to a specified project.""" + + # Get the list of files to upload + files = [f for f in os.listdir(folder_path) + if os.path.isfile(os.path.join(folder_path, f))] + total_files = len(files) + + if total_files == 0: + click.echo("No files found in the specified folder.") + return + + # Load user settings + user_settings = UserSettings() + api_key = user_settings.api_key + api_url = user_settings.api_url + + if not api_key or not api_url: + click.echo("You are not logged in. " + "Please log in using the `login` command.") + return + + # Initialize the API client + client = ApiClient(api_url=api_url, api_key=api_key) + + # Validate the endpoint + if not client.validate_endpoint(): + click.echo("Error: Invalid API endpoint.") + return + click.echo("Valid API endpoint verified.") + + # Retrieve the project by ID + try: + project = client.project(project_id) + click.echo(f"Retrieved project: {project.name}") + except Exception as e: + click.echo(f"Error: Unable to retrieve " + f"project with ID '{project_id}'. {e}") + return + + # Display available storage links and prompt user selection + try: + storage_links = project.storage_links() + if not storage_links: + click.echo("No storage available for this project.") + return + + click.echo("\nAvailable Storages:") + for idx, storage_link in enumerate(storage_links): + click.echo(f"{idx + 1}. {storage_link.name} " + f"(ID: {storage_link.id})") + + # Prompt user to select a storage link + while True: + try: + choice = int(input("Enter the number of " + "the storage link to use: ")) + if 1 <= choice <= len(storage_links): + selected_storage_link = storage_links[choice - 1] + break + else: + click.echo(f"Please enter a number " + f"between 1 and {len(storage_links)}.") + except ValueError: + click.echo("Invalid input. Please enter a valid number.") + + click.echo(f"Selected Storage Link: {selected_storage_link.name} " + f"(ID: {selected_storage_link.id})") + + except Exception as e: + click.echo(f"Error retrieving storage links: {e}") + return + + # Initialize the spinner + spinner = Spinner(f"Uploading files (0/{total_files})") + + # Upload files to the selected storage link using its ID + try: + for idx, file_name in enumerate(files, start=1): + file_path = os.path.join(folder_path, file_name) + spinner.set_text(f"Uploading files ({idx}/{total_files})") + with open(file_path, "rb") as file: + client.upload_to_storage_with_id( + storage_id=selected_storage_link.id, + file=file, + storageFolderName=None, + dataset=None, + ) + spinner.done(f"Uploaded all {total_files} files successfully!") + except Exception as e: + spinner.done(f"Error during upload: {e}") + return From f62697c1e726046537b7b33ffd0109289a5e9b6d Mon Sep 17 00:00:00 2001 From: han-nwin Date: Mon, 20 Jan 2025 23:59:44 -0600 Subject: [PATCH 4/9] fix upload/bulk.py --- datatorch/cli/groups.py | 4 ++-- datatorch/cli/upload/__init__.py | 10 ++++++++++ datatorch/cli/upload/{bulk_upload.py => bulk.py} | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 datatorch/cli/upload/__init__.py rename datatorch/cli/upload/{bulk_upload.py => bulk.py} (98%) diff --git a/datatorch/cli/groups.py b/datatorch/cli/groups.py index 4a877ed..3d816dd 100644 --- a/datatorch/cli/groups.py +++ b/datatorch/cli/groups.py @@ -12,7 +12,7 @@ from .pipeline import pipeline from .action import action from .import_cmds import import_cmd -from .upload import bulk_upload +from .upload import upload @click.group() @@ -31,4 +31,4 @@ def main(): main.add_command(action) main.add_command(import_cmd) -main.add_command(bulk_upload) +main.add_command(upload) diff --git a/datatorch/cli/upload/__init__.py b/datatorch/cli/upload/__init__.py new file mode 100644 index 0000000..a3f6632 --- /dev/null +++ b/datatorch/cli/upload/__init__.py @@ -0,0 +1,10 @@ +import click +from .bulk import bulk + + +@click.group(help="Commands for managing uploads.") +def upload(): + pass + + +upload.add_command(bulk) diff --git a/datatorch/cli/upload/bulk_upload.py b/datatorch/cli/upload/bulk.py similarity index 98% rename from datatorch/cli/upload/bulk_upload.py rename to datatorch/cli/upload/bulk.py index 1de2500..0a0d54f 100644 --- a/datatorch/cli/upload/bulk_upload.py +++ b/datatorch/cli/upload/bulk.py @@ -2,14 +2,14 @@ import click from datatorch.core.settings import UserSettings from datatorch.api.api import ApiClient -from spinner import Spinner +from ..spinner import Spinner @click.command("bulk-upload") @click.argument("folder_path", type=click.Path(exists=True, file_okay=False)) @click.argument("project_id", type=str) -def bulk_upload(folder_path, project_id): +def bulk(folder_path, project_id): """Bulk upload files to a specified project.""" # Get the list of files to upload From fae6dd00addd98ae657a912344f359db3644e807 Mon Sep 17 00:00:00 2001 From: han-nwin Date: Tue, 21 Jan 2025 16:31:44 -0600 Subject: [PATCH 5/9] upload folder functionality --- datatorch/api/api.py | 32 ++++----- datatorch/cli/upload/__init__.py | 4 +- datatorch/cli/upload/{bulk.py => folder.py} | 74 ++++++++++++++------- 3 files changed, 69 insertions(+), 41 deletions(-) rename datatorch/cli/upload/{bulk.py => folder.py} (55%) diff --git a/datatorch/api/api.py b/datatorch/api/api.py index f6f4d61..f46256f 100644 --- a/datatorch/api/api.py +++ b/datatorch/api/api.py @@ -163,27 +163,29 @@ def upload_to_default_filesource( ) print(r.text + " " + endpoint) - def upload_to_storage_with_id( + def upload_to_filesource( self, - storage_id: str, + project: Project, file: IO, + storageId: str = None, storageFolderName=None, dataset: Dataset = None, **kwargs, ): - """Uploads a file to a specific storage ID.""" + """ + Uploads a file to the provided `storage_id` if available; + otherwise, retrieves the default storage ID (DataTorch Storage) from the project. + """ + # Retrieve default storage_id if not explicitly provided + if storageId is None: + storageId = project.storage_link_default().id + storageFolderName = "" if storageFolderName is None else storageFolderName datasetId = "" if dataset is None else dataset.id importFiles = "false" if dataset is None else "true" # Construct the endpoint - endpoint = f"{self.api_url}/file/v1/upload/{storage_id}?path={storageFolderName}&import={importFiles}&datasetId={datasetId}" - - # Debugging request details - # print(f"Uploading to endpoint: {endpoint}") - # print(f"Headers: {self.token_header}: {self._api_token}") - # print(f"File Name: {file.name}") - # print(f"Storage ID: {storage_id}, Folder Name: {storageFolderName}") + endpoint = f"{self.api_url}/file/v1/upload/{storageId}?path={storageFolderName}&import={importFiles}&datasetId={datasetId}" # Determine MIME type if magic: @@ -192,7 +194,6 @@ def upload_to_storage_with_id( file.seek(tell) else: mimetype = mimetypes.guess_type(file.name)[0] - print(f"MIME Type: {mimetype}") # Make the POST request r = requests.post( @@ -202,10 +203,7 @@ def upload_to_storage_with_id( stream=True, ) - # Print response for debugging - print(f"Response Status Code: {r.status_code}") - print(f"Response Text: {r.text}") - + # Raise an error for failed requests r.raise_for_status() def glob_upload_folder( @@ -213,6 +211,7 @@ def glob_upload_folder( project: Project, uploadingFromGlob: str, storageFolderName: str, + storageId: str = None, folderSplit=1000, dataset: Dataset = None, recursive=False, @@ -237,9 +236,10 @@ def glob_upload_folder( folderIndex += 1 uploadFolderName = storageFolderName + "_" + str(folderIndex) file = open(file, "rb") - self.upload_to_default_filesource( + self.upload_to_filesource( project=project, file=file, + storageId=storageId, storageFolderName=uploadFolderName, dataset=dataset, ) diff --git a/datatorch/cli/upload/__init__.py b/datatorch/cli/upload/__init__.py index a3f6632..4c4accb 100644 --- a/datatorch/cli/upload/__init__.py +++ b/datatorch/cli/upload/__init__.py @@ -1,5 +1,5 @@ import click -from .bulk import bulk +from .folder import folder @click.group(help="Commands for managing uploads.") @@ -7,4 +7,4 @@ def upload(): pass -upload.add_command(bulk) +upload.add_command(folder) diff --git a/datatorch/cli/upload/bulk.py b/datatorch/cli/upload/folder.py similarity index 55% rename from datatorch/cli/upload/bulk.py rename to datatorch/cli/upload/folder.py index 0a0d54f..61d6e37 100644 --- a/datatorch/cli/upload/bulk.py +++ b/datatorch/cli/upload/folder.py @@ -2,14 +2,14 @@ import click from datatorch.core.settings import UserSettings from datatorch.api.api import ApiClient +from datatorch.api.entity.project import Project from ..spinner import Spinner -@click.command("bulk-upload") +@click.command("folder") @click.argument("folder_path", type=click.Path(exists=True, file_okay=False)) @click.argument("project_id", type=str) - -def bulk(folder_path, project_id): +def folder(folder_path, project_id): """Bulk upload files to a specified project.""" # Get the list of files to upload @@ -49,6 +49,36 @@ def bulk(folder_path, project_id): f"project with ID '{project_id}'. {e}") return + # Display available dataset + try: + datasets = project.datasets() + if datasets: + click.echo("\nAvailable Dataset:") + for idx, dataset in enumerate(datasets, start=1): + click.echo(f"{idx}. {dataset.name} (ID: {dataset.id})") + + # Prompt user to select a dataset + choice = click.prompt( + "Enter the number of the dataset", + type=int, + default=1, + ) + if 1 <= choice <= len(datasets): + selected_dataset = datasets[choice - 1] + click.echo(f"Selected Dataset: {selected_dataset.name} (ID: {selected_dataset.id}") + else: + click.echo(f"Invalid choice. Please select a number between 1 and {len(datasets)}") + else: + # No datasets found, as if user want to continue with global upload + continue_upload = click.confirm("No datasets found for this project" + "Do you want to continue with global upload?", default=False) + if not continue_upload: + click.echo("Ending...") + return + except Exception as e: + click.echo(f"Error retrieving data set: {e}") + return + # Display available storage links and prompt user selection try: storage_links = project.storage_links() @@ -62,24 +92,21 @@ def bulk(folder_path, project_id): f"(ID: {storage_link.id})") # Prompt user to select a storage link - while True: - try: - choice = int(input("Enter the number of " - "the storage link to use: ")) - if 1 <= choice <= len(storage_links): - selected_storage_link = storage_links[choice - 1] - break - else: - click.echo(f"Please enter a number " - f"between 1 and {len(storage_links)}.") - except ValueError: - click.echo("Invalid input. Please enter a valid number.") - - click.echo(f"Selected Storage Link: {selected_storage_link.name} " - f"(ID: {selected_storage_link.id})") + choice = click.prompt( + "Enter the number of the storage to use", + type=int, + default=1, + ) + if 1 <= choice <= len(storage_links): + selected_storage_link = storage_links[choice - 1] + else: + click.echo(f"Invalid choice. Please select a number between 1 and {len(storage_links)}.") + return + click.echo(f"Selected Storage: {selected_storage_link.name} " + f"(ID: {selected_storage_link.id})") except Exception as e: - click.echo(f"Error retrieving storage links: {e}") + click.echo(f"Error retrieving storage: {e}") return # Initialize the spinner @@ -89,13 +116,14 @@ def bulk(folder_path, project_id): try: for idx, file_name in enumerate(files, start=1): file_path = os.path.join(folder_path, file_name) - spinner.set_text(f"Uploading files ({idx}/{total_files})") + spinner.set_text(f"Uploading file ({idx}/{total_files})") with open(file_path, "rb") as file: - client.upload_to_storage_with_id( - storage_id=selected_storage_link.id, + client.upload_to_filesource( + project=project, file=file, + storageId=selected_storage_link.id, storageFolderName=None, - dataset=None, + dataset=selected_dataset, ) spinner.done(f"Uploaded all {total_files} files successfully!") except Exception as e: From a08a611c506f0033c3a8a9e26ef3fddf16ec51e7 Mon Sep 17 00:00:00 2001 From: Michael Nguyen Date: Wed, 22 Jan 2025 14:04:37 -0500 Subject: [PATCH 6/9] chore: upload_files.py script in examples --- examples/upload_files.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 examples/upload_files.py diff --git a/examples/upload_files.py b/examples/upload_files.py new file mode 100644 index 0000000..409f7c6 --- /dev/null +++ b/examples/upload_files.py @@ -0,0 +1,20 @@ +from datatorch.api import ApiClient, Annotation, BoundingBox, Where + +client = ApiClient( + api_key="fa2c325a-fd78-4bc6-827f-90242530bebd", api_url="http://localhost:4000" +) + +project = client.project("68ca53cc-5820-4c01-9bf3-abc9e384fff4") +labels = project.labels() + +files = project.files(where=Where(path__starts_with="dataset")) +print(len(files)) + +# f = client.file("7b1e2d05-89ed-40fe-b2aa-9368633b8748") + +# anno = Annotation(label=labels[0]) +# anno.add(BoundingBox.create(0, 0, 100, 100)) + +# f.add(anno) +# print(anno.__dict__) +# print(f.__dict__) From 536323641d6cc7391e890cb39954a9c3fed7a4c8 Mon Sep 17 00:00:00 2001 From: Michael Nguyen Date: Wed, 22 Jan 2025 14:04:46 -0500 Subject: [PATCH 7/9] chore: upload_files.py script in examples --- examples/upload_files.py | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/examples/upload_files.py b/examples/upload_files.py index 409f7c6..ea955a7 100644 --- a/examples/upload_files.py +++ b/examples/upload_files.py @@ -1,20 +1,10 @@ -from datatorch.api import ApiClient, Annotation, BoundingBox, Where +import datatorch as dt -client = ApiClient( - api_key="fa2c325a-fd78-4bc6-827f-90242530bebd", api_url="http://localhost:4000" -) +api = dt.api.ApiClient('your-api-key') +proj = api.project('user/projectname') -project = client.project("68ca53cc-5820-4c01-9bf3-abc9e384fff4") -labels = project.labels() +folder_to_upload = "./uploadme" +upload_to_storage_id = +upload_to_dataset_id = -files = project.files(where=Where(path__starts_with="dataset")) -print(len(files)) - -# f = client.file("7b1e2d05-89ed-40fe-b2aa-9368633b8748") - -# anno = Annotation(label=labels[0]) -# anno.add(BoundingBox.create(0, 0, 100, 100)) - -# f.add(anno) -# print(anno.__dict__) -# print(f.__dict__) +api.upload_to_filesource( ) From 50db95647184c1440fdbabf1546c8c931385d7ef Mon Sep 17 00:00:00 2001 From: han-nwin Date: Wed, 22 Jan 2025 14:31:45 -0600 Subject: [PATCH 8/9] script for upload folder --- datatorch/cli/upload/folder.py | 2 +- examples/upload_files.py | 28 +++++++++++++++++++++++----- examples/uploadme/1copy.jpg | Bin 0 -> 40173 bytes examples/uploadme/2copy.jpg | Bin 0 -> 39914 bytes examples/uploadme/3copy.jpg | Bin 0 -> 39926 bytes 5 files changed, 24 insertions(+), 6 deletions(-) create mode 100755 examples/uploadme/1copy.jpg create mode 100755 examples/uploadme/2copy.jpg create mode 100755 examples/uploadme/3copy.jpg diff --git a/datatorch/cli/upload/folder.py b/datatorch/cli/upload/folder.py index 61d6e37..579e115 100644 --- a/datatorch/cli/upload/folder.py +++ b/datatorch/cli/upload/folder.py @@ -112,7 +112,7 @@ def folder(folder_path, project_id): # Initialize the spinner spinner = Spinner(f"Uploading files (0/{total_files})") - # Upload files to the selected storage link using its ID + # Upload files to the selected storage and dataset using their IDs try: for idx, file_name in enumerate(files, start=1): file_path = os.path.join(folder_path, file_name) diff --git a/examples/upload_files.py b/examples/upload_files.py index ea955a7..f8858d1 100644 --- a/examples/upload_files.py +++ b/examples/upload_files.py @@ -1,10 +1,28 @@ +import os import datatorch as dt api = dt.api.ApiClient('your-api-key') -proj = api.project('user/projectname') +proj = api.project('user-name/project-name') +dset = proj.dataset('data-set-name') -folder_to_upload = "./uploadme" -upload_to_storage_id = -upload_to_dataset_id = +folder_to_upload = 'uploadme' +upload_to_storage_id = 'your-storage-id' -api.upload_to_filesource( ) +# Get all the file names in the folder +files = [f for f in os.listdir(folder_to_upload) + if os.path.isfile(os.path.join(folder_to_upload, f))] + +# Upload files to the selected storage and dataset using their IDs +try: + for file_name in files: + file_path = os.path.join(folder_to_upload, file_name) + with open(file_path, "rb") as file: + api.upload_to_filesource( + project=proj, + file=file, + storageId=upload_to_storage_id, + storageFolderName=None, + dataset=dset, + ) +except Exception as e: + print(f"Error Uploading: {e}") diff --git a/examples/uploadme/1copy.jpg b/examples/uploadme/1copy.jpg new file mode 100755 index 0000000000000000000000000000000000000000..362b0a81629b1d7305de7cfe2f5be06a7d4b0abd GIT binary patch literal 40173 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 z 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νoRB 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 literal 0 HcmV?d00001 diff --git a/examples/uploadme/3copy.jpg b/examples/uploadme/3copy.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e79011f9f03476a037486d9397a997b1bf397f9c GIT binary patch literal 39926 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�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 kaB@ Date: Thu, 23 Jan 2025 16:05:37 -0500 Subject: [PATCH 9/9] Delete datatorch/api/scripts/bulk_upload.py --- datatorch/api/scripts/bulk_upload.py | 99 ---------------------------- 1 file changed, 99 deletions(-) delete mode 100644 datatorch/api/scripts/bulk_upload.py diff --git a/datatorch/api/scripts/bulk_upload.py b/datatorch/api/scripts/bulk_upload.py deleted file mode 100644 index ad7953e..0000000 --- a/datatorch/api/scripts/bulk_upload.py +++ /dev/null @@ -1,99 +0,0 @@ -import sys -import os -from datatorch.core.settings import UserSettings -from datatorch.api.api import ApiClient - -def main(folder_path: str, project_id: str): - if not os.path.exists(folder_path): - print(f"Error: The folder '{folder_path}' does not exist.") - sys.exit(1) - - # Load user settings - user_settings = UserSettings() - api_key = user_settings.api_key - api_url = user_settings.api_url - - if not api_key or not api_url: - print("You are not logged in. " - "Please log in using the `login` command.") - sys.exit(1) - - # Initialize the API client - client = ApiClient(api_url=api_url, api_key=api_key) - - # Validate the endpoint - if not client.validate_endpoint(): - print("Error: Invalid API endpoint.") - sys.exit(1) - else: - print("Valid endpoint") - - # Retrieve the project by ID - try: - project = client.project(project_id) - print(f"\nRetrieved project: {project.name}") - except Exception as e: - print(f"Error: Unable to retrieve project with ID '{project_id}'. {e}") - sys.exit(1) - - # Display available storage links and prompt user selection - try: - storage_links = project.storage_links() - if not storage_links: - print("No storage available for this project.") - sys.exit(1) - - print("\nAvailable Storages:") - for idx, storage_link in enumerate(storage_links): - print(f"{idx + 1}. {storage_link.name} (ID: {storage_link.id})") - - # Prompt user to select a storage link - while True: - try: - choice = int(input("Enter the number of " - "the storage link to use: ")) - if 1 <= choice <= len(storage_links): - selected_storage_link = storage_links[choice - 1] - break - else: - print(f"Please enter a number " - f"between 1 and {len(storage_links)}.") - except ValueError: - print("Invalid input. Please enter a valid number.") - - print( - f"Selected Storage Link: {selected_storage_link.name} " - f"(ID: {selected_storage_link.id})\n" - ) - - except Exception as e: - print(f"Error retrieving storage links: {e}") - sys.exit(1) - - # Upload files to the selected storage link using its ID - try: - for file_name in os.listdir(folder_path): - file_path = os.path.join(folder_path, file_name) - if os.path.isfile(file_path): - print(f"Uploading file: {file_name}...") - with open(file_path, "rb") as file: - client.upload_to_storage_with_id( - storage_id=selected_storage_link.id, - file=file, - storageFolderName=None, - dataset=None, - ) - print(f"Upload {file_name} completed successfully!") - except Exception as e: - print(f"Error during upload {file_name}: {e}") - sys.exit(1) - - -if __name__ == "__main__": - if len(sys.argv) != 3: - print("Usage: python3 bulk_upload.py ") - sys.exit(1) - - folder_path = sys.argv[1] - project_id = sys.argv[2] - main(folder_path, project_id)