8000 Adding created_at, updated_at and sheet_type properties to view items by opus-42 · Pull Request #331 · tableau/server-client-python · GitHub
[go: up one dir, main page]

Skip to content

Adding created_at, updated_at and sheet_type properties to view items #331

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
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
3 changes: 3 additions & 0 deletions docs/docs/api-ref.md
Original file line number Diff line number Diff line change
Expand Up @@ -2405,11 +2405,14 @@ Source file: models/view_item.py

Name | Description
:--- | :---
`created_at` | The date and time when the v 8000 iew was created.
`id` | The identifier of the view item.
`name` | The name of the view.
`owner_id` | The id for the owner of the view.
`preview_image` | The thumbnail image for the view.
`sheet_type` | The type of the view which is either a worksheet, a dashboard or a story.
`total_views` | The usage statistics for the view. Indicates the total number of times the view has been looked at.
`updated_at` | The date and time when the view was last updated.
`workbook_id` | The id of the workbook associated with the view.


Expand Down
20 changes: 20 additions & 0 deletions tableauserverclient/models/view_item.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import xml.etree.ElementTree as ET
from ..datetime_helpers import parse_datetime
from .exceptions import UnpopulatedPropertyError


class ViewItem(object):
def __init__(self):
self._content_url = None
self._created_at = None
self._id = None
self._image = None
self._initial_tags = set()
Expand All @@ -15,6 +17,8 @@ def __init__(self):
self._pdf = None
self._csv = None
self._total_views = None
self._sheet_type = None
self._updated_at = None
self._workbook_id = None
self.tags = set()

Expand All @@ -34,6 +38,10 @@ def _set_csv(self, csv):
def content_url(self):
return self._content_url

@property
def created_at(self):
return self._created_at

@property
def id(self):
return self._id
Expand Down Expand Up @@ -78,13 +86,21 @@ def csv(self):
raise UnpopulatedPropertyError(error)
return self._csv()

@property
def sheet_type(self):
return self._sheet_type

@property
def total_views(self):
if self._total_views is None:
error = "Usage statistics must be requested when querying for view."
raise UnpopulatedPropertyError(error)
return self._total_views

@property
def updated_at(self):
return self._updated_at

@property
def workbook_id(self):
return self._workbook_id
Expand All @@ -103,9 +119,13 @@ def from_xml_element(cls, parsed_response, ns, workbook_id=''):
workbook_elem = view_xml.find('.//t:workbook', namespaces=ns)
owner_elem = view_xml.find('.//t:owner', namespaces=ns)
project_elem = view_xml.find('.//t:project', namespaces=ns)
view_item._created_at = parse_datetime(view_xml.get('createdAt', None))
view_item._updated_at = parse_datetime(view_xml.get('updatedAt', None))
view_item._id = view_xml.get('id', None)
view_item._name = view_xml.get('name', None)
view_item._content_url = view_xml.get('contentUrl', None)
view_item._sheet_type = view_xml.get('sheetType', None)

if usage_elem is not None:
total_view = usage_elem.get('totalViewCount', None)
if total_view:
Expand Down
4 changes: 2 additions & 2 deletions test/assets/view_get.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
<owner id="5de011f8-5aa9-4d5b-b991-f462c8dd6bb7" />
<project id="5241e88d-d384-4fd7-9c2f-648b5247efc5" />
</view>
<view id="fd252f73-593c-4c4e-8584-c032b8022adc" name="Overview" contentUrl="Superstore/sheets/Overview">
<view id="fd252f73-593c-4c4e-8584-c032b8022adc" name="Overview" contentUrl="Superstore/sheets/Overview" createdAt="2002-05-30T09:00:00Z" updatedAt="2002-06-05T08:00:59Z" sheetType="story">
<workbook id="6d13b0ca-043d-4d42-8c9d-3f3313ea3a00" />
<owner id="5de011f8-5aa9-4d5b-b991-f462c8dd6bb7" />
<project id="5b534f74-3226-11e8-b47a-cb2e00f738a3" />
</view>
</views>
</tsResponse>
</tsResponse>
4 changes: 2 additions & 2 deletions test/assets/view_get_usage.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
<tags />
<usage totalViewCount="7" />
</view>
<view id="fd252f73-593c-4c4e-8584-c032b8022adc" name="Overview" contentUrl="Superstore/sheets/Overview">
<view id="fd252f73-593c-4c4e-8584-c032b8022adc" name="Overview" contentUrl="Superstore/sheets/Overview" createdAt="2002-05-30T09:00:00Z" updatedAt="2002-06-05T08:00:59Z" sheetType="story">
<workbook id="6d13b0ca-043d-4d42-8c9d-3f3313ea3a00" />
<owner id="5de011f8-5aa9-4d5b-b991-f462c8dd6bb7" />
<tags />
<usage totalViewCount="13" />
</view>
</views>
</tsResponse>
</tsResponse>
15 changes: 15 additions & 0 deletions test/test_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import requests_mock
import tableauserverclient as TSC

from tableauserverclient.datetime_helpers import format_datetime

TEST_ASSET_DIR = os.path.join(os.path.dirname(__file__), 'assets')

ADD_TAGS_XML = os.path.join(TEST_ASSET_DIR, 'view_add_tags.xml')
Expand Down Expand Up @@ -40,13 +42,19 @@ def test_get(self):
self.assertEqual('3cc6cd06-89ce-4fdc-b935-5294135d6d42', all_views[0].workbook_id)
self.assertEqual('5de011f8-5aa9-4d5b-b991-f462c8dd6bb7', all_views[0].owner_id)
self.assertEqual('5241e88d-d384-4fd7-9c2f-648b5247efc5', all_views[0].project_id)
self.assertIsNone(all_views[0].created_at)
self.assertIsNone(all_views[0].updated_at)
self.assertIsNone(all_views[0].sheet_type)

self.assertEqual('fd252f73-593c-4c4e-8584-c032b8022adc', all_views[1].id)
self.assertEqual('Overview', all_views[1].name)
self.assertEqual('Superstore/sheets/Overview', all_views[1].content_url)
self.assertEqual('6d13b0ca-043d-4d42-8c9d-3f3313ea3a00', all_views[1].workbook_id)
self.assertEqual('5de011f8-5aa9-4d5b-b991-f462c8dd6bb7', all_views[1].owner_id)
self.assertEqual('5b534f74-3226-11e8-b47a-cb2e00f738a3', all_views[1].project_id)
self.assertEqual('2002-05-30T09:00:00Z', format_datetime(all_views[1].created_at))
self.assertEqual('2002-06-05T08:00:59Z', format_datetime(all_views[1].updated_at))
self.assertEqual('story', all_views[1].sheet_type)

def test_get_with_usage(self):
with open(GET_XML_USAGE, 'rb') as f:
Expand All @@ -57,8 +65,15 @@ def test_get_with_usage(self):

self.assertEqual('d79634e1-6063-4ec9-95ff-50acbf609ff5', all_views[0].id)
self.assertEqual(7, all_views[0].total_views)
self.assertIsNone(all_views[0].created_at)
self.assertIsNone(all_views[0].updated_at)
self.assertIsNone(all_views[0].sheet_type)

self.assertEqual('fd252f73-593c-4c4e-8584-c032b8022adc', all_views[1].id)
self.assertEqual(13, all_views[1].total_views)
self.assertEqual('2002-05-30T09:00:00Z', format_datetime(all_views[1].created_at))
self.assertEqual('2002-06-05T08:00:59Z', format_datetime(all_views[1].updated_at))
self.assertEqual('story', all_views[1].sheet_type)

def test_get_with_usage_and_filter(self):
with open(GET_XML_USAGE, 'rb') as f:
Expand Down
0