Skip to content

Commit dac5ee7

Browse files
authored
Merge pull request #48 from jupyter-naas/47-naasstorage-not-working-serviceauthenticationerror
fix: Credentials management
2 parents b1f6f51 + 513ba13 commit dac5ee7

File tree

5 files changed

+38
-18
lines changed

5 files changed

+38
-18
lines changed

naas_python/domains/storage/StorageDomain.py

+15-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from .models.Storage import Storage
22

3-
from typing import List
3+
from typing import Mapping
44

55
from naas_python.domains.storage.StorageSchema import (
66
IStorageDomain,
@@ -11,11 +11,11 @@
1111
StorageProviderNotFound
1212
)
1313
class StorageDomain(IStorageDomain):
14-
def __init__(self, adaptor: IStorageAdaptor, storage_provider_adaptors : List[IStorageProviderAdaptor]):
14+
def __init__(self, adaptor: IStorageAdaptor, storage_provider_adaptors : Mapping[str, IStorageProviderAdaptor]):
1515
# List[IStorageProviderAdaptor])
1616
#Map[str : IStorageProviderAdaptor])
17-
self.adaptor = adaptor
18-
self.storage_provider_adaptors = storage_provider_adaptors
17+
self.adaptor : IStorageAdaptor = adaptor
18+
self.storage_provider_adaptors : Mapping[str, IStorageProviderAdaptor] = storage_provider_adaptors
1919

2020
############### API ###############
2121
def create_workspace_storage(self,
@@ -75,8 +75,8 @@ def create_workspace_storage_credentials(self,
7575
storage_name: Storage.__fields__['name'],
7676
) -> dict:
7777
credentials = self.adaptor.generate_credentials(workspace_id, storage_name)
78-
self.storage_provider.save_naas_credentials(workspace_id, storage_name, credentials)
79-
return dict
78+
self.__get_storage_provider_adaptor(workspace_id=workspace_id, storage_name=storage_name).save_naas_credentials(workspace_id, storage_name, credentials)
79+
return credentials
8080

8181
############### BOTO ###############
8282
def __get_storage_provider(self,
@@ -86,6 +86,15 @@ def __get_storage_provider(self,
8686
#TODO This function should check in ~.naas/credentials to grab the provider id (s3;azure;gcp;...)
8787
return 's3'
8888

89+
def __get_storage_provider_adaptor(self,
90+
workspace_id: str,
91+
storage_name: Storage.__fields__['name']
92+
) -> IStorageProviderAdaptor:
93+
storage_provider_id = self.__get_storage_provider(workspace_id, storage_name)
94+
if storage_provider_id not in self.storage_provider_adaptors:
95+
raise StorageProviderNotFound(f'Provider "{storage_provider_id}" is not implemented or not loaded.')
96+
return self.storage_provider_adaptors[storage_provider_id]
97+
8998

9099
def post_workspace_storage_object(self,
91100
workspace_id: str,

naas_python/domains/storage/StorageSchema.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from abc import ABCMeta, abstractmethod
22
from logging import getLogger
3-
from typing import List
3+
from typing import Mapping
44

55
from naas_models.pydantic.storage_p2p import *
66
from .models.Storage import Storage, Object
@@ -48,6 +48,10 @@ def delete_workspace_storage_object(self,
4848
) -> dict:
4949
raise NotImplementedError
5050

51+
@abstractmethod
52+
def generate_credentials(self, workspace_id :str, storage_name: str) -> dict:
53+
raise NotImplementedError
54+
5155
class IStorageProviderAdaptor(metaclass=ABCMeta):
5256

5357
provider_id : str
@@ -70,10 +74,14 @@ def get_workspace_storage_object(self,
7074
) -> bytes:
7175
raise NotImplementedError
7276

77+
@abstractmethod
78+
def save_naas_credentials(self, workspace_id:str, storage_name:str, credentials:dict)-> str:
79+
raise NotImplementedError
80+
7381
# Domain
7482
class IStorageDomain(metaclass=ABCMeta):
7583
adaptor: IStorageAdaptor
76-
storage_provider_adaptors : List[IStorageProviderAdaptor]
84+
storage_provider_adaptors : Mapping[str, IStorageProviderAdaptor]
7785
# storage_provider_adaptors : Map[str, IStorageProviderAdaptor]
7886
#TODO to be validated
7987

naas_python/domains/storage/adaptors/primary/TyperStorageAdaptor.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,8 @@ def create_workspace_storage_credentials(self,
179179
workspace_id=workspace_id,
180180
storage_name=storage_name
181181
)
182-
print("Credentials created.")
182+
print("Credentials created.")
183+
print(response)
183184

184185
############### BOTO3 ###############
185186
def post_workspace_storage_object(self,

naas_python/domains/storage/adaptors/secondary/NaasStorageAPIAdaptor.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ def create_workspace_storage(self,
3838
workspace_id: str,
3939
storage_name: Storage.__fields__['name']
4040
) -> dict:
41-
_url = f"{self.host}/workspace/{workspace_id}/storage"
41+
_url = f"{self.host}/workspace/{workspace_id}/storage/"
4242

4343
api_response = self.make_api_request(
4444
requests.post,
4545
_url,
46-
payload=json.dumps(
47-
{"storage": {"name": storage_name} }
48-
),
46+
payload={
47+
"storage":
48+
{"name": storage_name}
49+
},
4950
)
5051
return self.__handle_response(api_response)
5152

@@ -66,7 +67,7 @@ def delete_workspace_storage(self,
6667
def list_workspace_storage(self,
6768
workspace_id: str,
6869
) -> dict:
69-
_url = f"{self.host}/workspace/{workspace_id}/storage"
70+
_url = f"{self.host}/workspace/{workspace_id}/storage/"
7071

7172
api_response = self.make_api_request(
7273
requests.get,
@@ -111,8 +112,9 @@ def generate_credentials(self, workspace_id :str, storage_name: str) -> dict:
111112
api_response = self.make_api_request(
112113
requests.post,
113114
_url,
114-
payload=json.dumps(
115-
{"name": storage_name}
116-
),
115+
payload={
116+
"name": storage_name
117+
}
118+
,
117119
)
118120
return self.__handle_response(api_response)

naas_python/utils/domains_base/secondary/BaseAPIAdaptor.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def make_api_request(
8484
headers.update({"Authorization": f"Bearer {self.jwt_token()}"})
8585

8686
try:
87-
api_response = method(url, data=payload, headers=headers)
87+
api_response = method(url, data=payload if type(payload) is str else json.dumps(payload), headers=headers)
8888
api_response.raise_for_status()
8989
return api_response
9090

0 commit comments

Comments
 (0)