diff --git a/cytomine/cytomine.py b/cytomine/cytomine.py index 3dd2094..fe674e7 100644 --- a/cytomine/cytomine.py +++ b/cytomine/cytomine.py @@ -977,3 +977,36 @@ def _process_upload_response(self, response_data: Dict[str, Any]) -> "UploadedFi uf.images.append(data) # type: ignore return uf + + def import_datasets( + self, + storage_id: int, + dataset_names: Optional[str] = None, + create_project: bool = False, + ) -> Dict[str, str]: + """Import datasets from a given path.""" + + upload_host = self._base_url(with_base_path=False) + + response = self._session.post( + f"{upload_host}/import", + auth=CytomineAuth( + self._public_key, + self._private_key, + upload_host, + "", + ), + headers=self._headers(content_type="text/plain"), + params={ + "storage_id": storage_id, + "dataset_names": dataset_names, + "create_project": create_project, + }, + ) + + if response.status_code != requests.codes.ok: + self._logger.error("Error during datasets upload: %s", response.text) + return {} + + self._logger.info("Datasets uploaded successfully") + return response.json() diff --git a/examples/import_datasets.py b/examples/import_datasets.py new file mode 100644 index 0000000..cb591fb --- /dev/null +++ b/examples/import_datasets.py @@ -0,0 +1,51 @@ +"""Example to import datasets into Cytomine.""" + +import logging +import sys +from argparse import ArgumentParser + +from cytomine import Cytomine +from cytomine.models import StorageCollection + +logging.basicConfig() +logger = logging.getLogger("cytomine.client") +logger.setLevel(logging.INFO) + + +if __name__ == "__main__": + parser = ArgumentParser(description="Example to import datasets into Cytomine") + + parser.add_argument( + "--host", + default="demo.cytomine.be", + help="The Cytomine host", + ) + parser.add_argument( + "--public_key", + help="The Cytomine public key", + ) + parser.add_argument( + "--private_key", + help="The Cytomine private key", + ) + params, _ = parser.parse_known_args(sys.argv[1:]) + + with Cytomine( + host=params.host, + public_key=params.public_key, + private_key=params.private_key, + ) as cytomine: + # To import the datasets, we need to know the ID of your Cytomine storage. + storages = StorageCollection().fetch() + storage = next( + filter(lambda storage: storage.user == cytomine.current_user.id, storages) + ) + if not storage: + raise ValueError("Storage not found") + + response = cytomine.import_datasets( + storage.id, + create_project=True, # Create a project based on folder name + ) + + print(response)