diff --git a/scrunch/folders.py b/scrunch/folders.py index a4a2bec3..c542f1a9 100644 --- a/scrunch/folders.py +++ b/scrunch/folders.py @@ -208,8 +208,11 @@ def __init__(self, dataset): self.dataset = dataset folders_root = dataset.resource.folders self.root = Folder(folders_root, self, None) - self.hidden = Folder(folders_root.hidden, self, None) - self.trash = Folder(folders_root.trash, self, None) + # Dataset viewers may not get all folders exposed + if "hidden" in folders_root.catalogs: + self.hidden = Folder(folders_root.hidden, self, None) + if "trash" in folders_root.catalogs: + self.trash = Folder(folders_root.trash, self, None) if "secure" in folders_root.catalogs: self.secure = Folder(folders_root.secure, self, None) diff --git a/scrunch/tests/test_folders.py b/scrunch/tests/test_folders.py index ffcdab54..09a14e33 100644 --- a/scrunch/tests/test_folders.py +++ b/scrunch/tests/test_folders.py @@ -152,3 +152,47 @@ def test_unique_folders_no_secure(): assert dataset.folders.hidden.name == "Hidden" assert dataset.folders.trash.name == "Trash" assert not hasattr(dataset.folders, "secure") + + +def test_unique_folders_no_hidden(): + session = MockSession() + dataset_url = 'http://host/api/datasets/abc/' + folders_url = 'http://host/api/datasets/abc/folders/' + dataset_resource = Entity(session, **{ + "element": "shoji:entity", + "self": dataset_url, + "body": { + "name": "test_dataset_project" + }, + "catalogs": { + "folders": folders_url, + } + }) + dataset_resource.variables = MagicMock() + dataset_resource.settings = MagicMock() + folders_resource = Catalog(session, **{ + "element": "shoji:catalog", + "self": folders_url, + "index": {}, + "body": { + "name": "Root" + }, + "catalogs": { + # Standard exposed catalogs + "personal": "./personal/", + "parents": "./parents/", + # Viewer users don't have the secure folder available + # "secure": secure_url, + # Viewers also don't get the hidden folder exposed + # "hidden": hidden_url, + # Nor the trash + # "trash": trash_url, + } + }) + session.add_fixture(folders_url, folders_resource) + dataset = MutableDataset(dataset_resource) + + assert dataset.folders.root.name == "Root" + assert not hasattr(dataset.folders, "secure") + assert not hasattr(dataset.folders, "hidden") + assert not hasattr(dataset.folders, "trash")