Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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**
Expand Down
13 changes: 8 additions & 5 deletions oscar_python/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
26 changes: 21 additions & 5 deletions oscar_python/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
4 changes: 2 additions & 2 deletions tests/test_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
2 changes: 1 addition & 1 deletion version.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@
"""Stores the package version."""


__version__ = '1.3.0'
__version__ = '1.3.1'