diff --git a/README.md b/README.md index ae12b1f..1f475c7 100644 --- a/README.md +++ b/README.md @@ -217,11 +217,19 @@ response = client.remove_all_jobs("service_name") # returns an http response #### Storage usage -You can create a storage object to operate over the different storage providers defined on a service with the method `create_storage_client` as follows: +You can create a storage object to operate over the different storage providers defined on a service with the method `create_storage_client`. This constructor returns a storage object with methos to interact with the storage providers. + +The default constructor, seen as follows, will create a provider to interact with the default MinIO instance through the user's credentials. + +``` python +storage_service = client.create_storage_client() # returns a storage object +``` +Additionally, if you need to interact with specific storage providers defined on a service, the constructor accepts a `svc` parameter where you can state the service name from which to search for additional credentials. ``` python storage_service = client.create_storage_client("service_name") # returns a storage object ``` + > _Note_ : The `storage_provider` parameter on the storage methods follows the format: `["storage_provider_type"].["storage_provider_name"]` where `storage_provider_type` is one of the suported storage providers (minIO, S3, Onedata or webdav) and `storage_provider_name` is the identifier _(ex: minio.default)_ **list_files_from_path** diff --git a/oscar_python/client.py b/oscar_python/client.py index d6f49ea..62a87b2 100644 --- a/oscar_python/client.py +++ b/oscar_python/client.py @@ -96,11 +96,14 @@ def get_access_token(self): """ Creates a generic storage client to interact with the storage providers defined on a specific service of the refered OSCAR cluster """ - def create_storage_client(self, svc): - return Storage( - client_obj=self, - svc_name=svc) - + def create_storage_client(self, svc=None): + if svc != None: + return Storage( + client_obj=self, svc_name=svc) + else: + return Storage( + client_obj=self) + """ Function to get cluster info """ def get_cluster_info(self): return utils.make_request(self, _INFO_PATH, _GET) diff --git a/oscar_python/storage.py b/oscar_python/storage.py index 6f2de7c..4584ec0 100644 --- a/oscar_python/storage.py +++ b/oscar_python/storage.py @@ -23,21 +23,37 @@ _S3 = "s3" _ONE_DATA = "onedata" _WEBDAV = "webdav" + +_GET = "get" +_CONFIG_PATH = "/system/config" _SVC_PATH = "/system/services" # TODO check returns from functions class Storage: - def __init__(self, client_obj, svc_name) -> None: + def __init__(self, client_obj, svc_name = None) -> None: self.client_obj = client_obj - self.svc_name = svc_name - self._store_providers() + self.storage_providers = {} + if svc_name != None: + self.svc_name = svc_name + self._store_provider_from_service() + self._store_default_minio_provider() """ Function to store all the providers of the service """ - def _store_providers(self): - svc = utils.make_request(self.client_obj, _SVC_PATH + "/" + self.svc_name, "get") + def _store_provider_from_service(self): + svc = utils.make_request(self.client_obj, _SVC_PATH + "/" + self.svc_name, _GET) self.storage_providers = json.loads(svc.text)["storage_providers"] + """ Function to store the user credentials for the default MinIO provider """ + def _store_default_minio_provider(self): + config = utils.make_request(self.client_obj, _CONFIG_PATH + "/" , _GET) + if _MINIO in self.storage_providers: + self.storage_providers[_MINIO]["default"] = json.loads(config.text)["minio_provider"] + else: + default = {"default": json.loads(config.text)["minio_provider"]} + self.storage_providers[_MINIO] = default + + """ Function to retreive credentials of a specific storage provider """ def _get_provider_creds(self, provider, provider_name): return self.storage_providers[provider][provider_name] diff --git a/tests/test_storage.py b/tests/test_storage.py index faceb3d..0f3318d 100644 --- a/tests/test_storage.py +++ b/tests/test_storage.py @@ -11,9 +11,9 @@ def mock_client_obj(): @pytest.fixture def storage(mock_client_obj): mock_response = MagicMock() - mock_response.text = '{"storage_providers": {"minio": {"default": {"access_key": "key","secret_key": "secret", "endpoint": "http://test.endpoint", "region": "us-east-1", "verify": false}}}}' + mock_response.text = '{"minio_provider": {"access_key": "key","secret_key": "secret", "endpoint": "http://test.endpoint", "region": "us-east-1", "verify": false}}' with patch('oscar_python._utils.make_request', return_value=mock_response): - return Storage(mock_client_obj, "test_service") + return Storage(mock_client_obj) def test_get_provider_creds(storage): diff --git a/version.py b/version.py index 08d29ad..da77f6b 100644 --- a/version.py +++ b/version.py @@ -14,4 +14,4 @@ """Stores the package version.""" -__version__ = '1.3.0' \ No newline at end of file +__version__ = '1.3.1' \ No newline at end of file