diff --git a/tableauserverclient/models/workbook_item.py b/tableauserverclient/models/workbook_item.py index 14ca8f33b..9c7e2022e 100644 --- a/tableauserverclient/models/workbook_item.py +++ b/tableauserverclient/models/workbook_item.py @@ -10,6 +10,7 @@ from .permissions_item import PermissionsRule from ..datetime_helpers import parse_datetime import copy +import uuid class WorkbookItem(object): @@ -275,6 +276,10 @@ def from_response(cls, resp, ns): data_acceleration_config, ) = cls._parse_element(workbook_xml, ns) + # workaround for Personal Space workbooks which won't have a project + if not project_id: + project_id = uuid.uuid4() + workbook_item = cls(project_id) workbook_item._set_values( id, diff --git a/test/assets/workbook_get_by_id_personal.xml b/test/assets/workbook_get_by_id_personal.xml new file mode 100644 index 000000000..90cc65e73 --- /dev/null +++ b/test/assets/workbook_get_by_id_personal.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/test/test_workbook.py b/test/test_workbook.py index fc1344b9e..d3a3b59b4 100644 --- a/test/test_workbook.py +++ b/test/test_workbook.py @@ -20,6 +20,7 @@ ADD_TAGS_XML = os.path.join(TEST_ASSET_DIR, 'workbook_add_tags.xml') GET_BY_ID_XML = os.path.join(TEST_ASSET_DIR, 'workbook_get_by_id.xml') +GET_BY_ID_XML_PERSONAL = os.path.join(TEST_ASSET_DIR, 'workbook_get_by_id_personal.xml') GET_EMPTY_XML = os.path.join(TEST_ASSET_DIR, 'workbook_get_empty.xml') GET_INVALID_DATE_XML = os.path.join(TEST_ASSET_DIR, 'workbook_get_invalid_date.xml') GET_XML = os.path.join(TEST_ASSET_DIR, 'workbook_get.xml') @@ -128,6 +129,31 @@ def test_get_by_id(self): self.assertEqual('ENDANGERED SAFARI', single_workbook.views[0].name) self.assertEqual('SafariSample/sheets/ENDANGEREDSAFARI', single_workbook.views[0].content_url) + def test_get_by_id_personal(self): + # workbooks in personal space don't have project_id or project_name + with open(GET_BY_ID_XML_PERSONAL, 'rb') as f: + response_xml = f.read().decode('utf-8') + with requests_mock.mock() as m: + m.get(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d43', text=response_xml) + single_workbook = self.server.workbooks.get_by_id('3cc6cd06-89ce-4fdc-b935-5294135d6d43') + + self.assertEqual('3cc6cd06-89ce-4fdc-b935-5294135d6d43', single_workbook.id) + self.assertEqual('SafariSample', single_workbook.name) + self.assertEqual('SafariSample', single_workbook.content_url) + self.assertEqual('http://tableauserver/#/workbooks/2/views', single_workbook.webpage_url) + self.assertEqual(False, single_workbook.show_tabs) + self.assertEqual(26, single_workbook.size) + self.assertEqual('2016-07-26T20:34:56Z', format_datetime(single_workbook.created_at)) + self.assertEqual('description for SafariSample', single_workbook.description) + self.assertEqual('2016-07-26T20:35:05Z', format_datetime(single_workbook.updated_at)) + self.assertTrue(single_workbook.project_id) + self.assertIsNone(single_workbook.project_name) + self.assertEqual('5de011f8-5aa9-4d5b-b991-f462c8dd6bb7', single_workbook.owner_id) + self.assertEqual(set(['Safari', 'Sample']), single_workbook.tags) + self.assertEqual('d79634e1-6063-4ec9-95ff-50acbf609ff5', single_workbook.views[0].id) + self.assertEqual('ENDANGERED SAFARI', single_workbook.views[0].name) + self.assertEqual('SafariSample/sheets/ENDANGEREDSAFARI', single_workbook.views[0].content_url) + def test_get_by_id_missing_id(self): self.assertRaises(ValueError, self.server.workbooks.get_by_id, '')