Skip to content

Commit c470a88

Browse files
Move -> API instead of list because: large lists / cascade assumptions
e.g. if project has many datasets and then each dataset inits for streaming Still uses cache
1 parent fb1226f commit c470a88

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

sdk/diffgram/core/directory.py

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ def __init__(self,
2727

2828
def init_files(self):
2929
self.file_id_list = self.all_file_ids()
30+
31+
3032
def get_directory_list(self):
3133
"""
3234
Get a list of available directories for a project
@@ -54,11 +56,14 @@ def get_directory_list(self):
5456
if default_directory_json:
5557
self.client.directory_id = default_directory_json.get('id')
5658

57-
directory_list = self.convert_json_to_sdk_object(directory_list_json)
59+
directory_list = self.convert_json_list_to_sdk_object(directory_list_json)
5860

5961
return directory_list
6062

61-
def convert_json_to_sdk_object(self, directory_list_json):
63+
def convert_json_list_to_sdk_object(self, directory_list_json: list):
64+
65+
if type(directory_list_json) != list:
66+
raise Exception("directory_list_json must be type: list")
6267

6368
directory_list = []
6469

@@ -218,7 +223,7 @@ def new(self, name: str):
218223
if project:
219224
directory_list_json = project.get('directory_list')
220225
if directory_list_json:
221-
self.client.directory_list = self.convert_json_to_sdk_object(directory_list_json)
226+
self.client.directory_list = self.convert_json_list_to_sdk_object(directory_list_json)
222227

223228
new_directory = None
224229
# TODO the route about should return the newly created dataset directly
@@ -304,24 +309,34 @@ def get(self,
304309
if name is None:
305310
raise Exception("No name provided.")
306311

307-
names_attempted = []
308-
did_set = False
309-
312+
# Cache
310313
if not self.client.directory_list:
311-
self.client.directory_list = self.get_directory_list()
314+
self.client.directory_list = []
312315

313316
for directory in self.client.directory_list:
314-
315317
if directory.nickname == name:
316318
directory.init_files()
317319
return directory
318320

319-
else:
320-
names_attempted.append(directory.nickname)
321+
params = {'name': name}
322+
323+
endpoint = "/api/project/" + \
324+
self.client.project_string_id + "/user/legacy/working_dir/view"
325+
326+
response = self.client.session.get(
327+
self.client.host + endpoint,
328+
params = params)
329+
330+
self.client.handle_errors(response)
331+
332+
data = response.json()
333+
directory_json = data.get('working_dir')
334+
directory_list = self.convert_json_list_to_sdk_object([directory_json])
335+
directory = directory_list[0]
336+
self.client.directory_list.append(directory)
337+
338+
return directory
321339

322-
if did_set is False:
323-
raise Exception(name, " does not exist. Valid names are: " +
324-
str(names_attempted))
325340

326341
def add(self,
327342
file_list: list = None,

0 commit comments

Comments
 (0)