Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add unit tests and raise errors on missing params
Browse files Browse the repository at this point in the history
ltiffanydev committed Jan 17, 2024
1 parent 334d098 commit 0f5349b
Showing 12 changed files with 464 additions and 21 deletions.
54 changes: 33 additions & 21 deletions tableauserverclient/server/request_factory.py
Original file line number Diff line number Diff line change
@@ -964,28 +964,40 @@ def update_req(self, workbook_item):
data_freshness_policy_element.attrib["option"] = str(
data_freshness_policy_config.option)
# Fresh Every Schedule
if data_freshness_policy_config.fresh_every_schedule is not None:
fresh_every_element = ET.SubElement(data_freshness_policy_element, "freshEverySchedule")
fresh_every_element.attrib["frequency"] = data_freshness_policy_config.fresh_every_schedule.frequency
fresh_every_element.attrib["value"] = str(
data_freshness_policy_config.fresh_every_schedule.value)
if data_freshness_policy_config.option == "FreshEvery":
if data_freshness_policy_config.fresh_every_schedule is not None:
fresh_every_element = ET.SubElement(data_freshness_policy_element, "freshEverySchedule")
fresh_every_element.attrib["frequency"] = (
data_freshness_policy_config.fresh_every_schedule.frequency)
fresh_every_element.attrib["value"] = str(
data_freshness_policy_config.fresh_every_schedule.value)
else:
raise ValueError(f"data_freshness_policy_config.fresh_every_schedule must be populated.")
# Fresh At Schedule
if data_freshness_policy_config.fresh_at_schedule is not None:
fresh_at_element = ET.SubElement(data_freshness_policy_element, "freshAtSchedule")
frequency = data_freshness_policy_config.fresh_at_schedule.frequency
fresh_at_element.attrib["frequency"] = frequency
fresh_at_element.attrib["time"] = str(data_freshness_policy_config.fresh_at_schedule.time)
fresh_at_element.attrib["timezone"] = str(data_freshness_policy_config.fresh_at_schedule.timezone)
intervals = data_freshness_policy_config.fresh_at_schedule.interval_item
# Fresh At Schedule intervals if Frequency is Week or Day
if intervals is not None or frequency != DataFreshnessPolicyItem.FreshAt.Frequency.Day:
intervals_element = ET.SubElement(fresh_at_element, "intervals")
for interval in intervals:
expression = IntervalItem.Occurrence.WeekDay
if frequency == DataFreshnessPolicyItem.FreshAt.Frequency.Month:
expression = IntervalItem.Occurrence.MonthDay
single_interval_element = ET.SubElement(intervals_element, "interval")
single_interval_element.attrib[expression] = interval
if data_freshness_policy_config.option == "FreshAt":
if data_freshness_policy_config.fresh_at_schedule is not None:
fresh_at_element = ET.SubElement(data_freshness_policy_element, "freshAtSchedule")
frequency = data_freshness_policy_config.fresh_at_schedule.frequency
fresh_at_element.attrib["frequency"] = frequency
fresh_at_element.attrib["time"] = str(data_freshness_policy_config.fresh_at_schedule.time)
fresh_at_element.attrib["timezone"] = str(data_freshness_policy_config.fresh_at_schedule.timezone)
intervals = data_freshness_policy_config.fresh_at_schedule.interval_item
# Fresh At Schedule intervals if Frequency is Week or Month
if frequency != DataFreshnessPolicyItem.FreshAt.Frequency.Day:
if intervals is not None:
#if intervals is not None or frequency != DataFreshnessPolicyItem.FreshAt.Frequency.Day:
intervals_element = ET.SubElement(fresh_at_element, "intervals")
for interval in intervals:
expression = IntervalItem.Occurrence.WeekDay
if frequency == DataFreshnessPolicyItem.FreshAt.Frequency.Month:
expression = IntervalItem.Occurrence.MonthDay
single_interval_element = ET.SubElement(intervals_element, "interval")
single_interval_element.attrib[expression] = interval
else:
raise ValueError(f"fresh_at_schedule.interval_item must be populated for "
f"Week & Month frequency.")
else:
raise ValueError(f"data_freshness_policy_config.fresh_at_schedule must be populated.")

return ET.tostring(xml_request)

19 changes: 19 additions & 0 deletions test/assets/workbook_get_by_id_acceleration_status.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="3cc6cd06-89ce-4fdc-b935-5294135d6d42" name="SafariSample" description="description for SafariSample" contentUrl="SafariSample" webpageUrl="http://tableauserver/#/workbooks/2/views" showTabs="false" size="26" createdAt="2016-07-26T20:34:56Z" updatedAt="2016-07-26T20:35:05Z">
<project id="ee8c6e70-43b6-11e6-af4f-f7b0d8e20760" name="default" />
<owner id="5de011f8-5aa9-4d5b-b991-f462c8dd6bb7" />
<tags>
<tag label="Safari" />
<tag label="Sample" />
</tags>
<views>
<view id="d79634e1-6063-4ec9-95ff-50acbf609ff5" name="ENDANGERED SAFARI" contentUrl="SafariSample/sheets/ENDANGEREDSAFARI" >
<dataAccelerationConfig accelerationEnabled="true" accelerationStatus="Enabled" />
</view>
<view id="d79634e1-6063-4ec9-95ff-50acbf609ff9" name="ENDANGERED SAFARI 2" contentUrl="SafariSample/sheets/ENDANGEREDSAFARI2" >
<dataAccelerationConfig accelerationEnabled="false" accelerationStatus="Suspended" />
</view>
</views>
</workbook>
</tsResponse>
16 changes: 16 additions & 0 deletions test/assets/workbook_update_acceleration_status.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook2" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<views>
<view id="d79634e1-6063-4ec9-95ff-50acbf609ff5" name="ENDANGERED SAFARI" contentUrl="SafariSample/sheets/ENDANGEREDSAFARI" >
<dataAccelerationConfig accelerationEnabled="true" accelerationStatus="Pending" />
</view>
<view id="d79634e1-6063-4ec9-95ff-50acbf609ff9" name="ENDANGERED SAFARI 2" contentUrl="SafariSample/sheets/ENDANGEREDSAFARI2" >
<dataAccelerationConfig accelerationEnabled="true" accelerationStatus="Pending" />
</view>
</views>
</workbook>
</tsResponse>
9 changes: 9 additions & 0 deletions test/assets/workbook_update_data_freshness_policy.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<dataFreshnessPolicy option="AlwaysLive" />
</workbook>
</tsResponse>
9 changes: 9 additions & 0 deletions test/assets/workbook_update_data_freshness_policy2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<dataFreshnessPolicy option="SiteDefault" />
</workbook>
</tsResponse>
11 changes: 11 additions & 0 deletions test/assets/workbook_update_data_freshness_policy3.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<dataFreshnessPolicy option="FreshEvery">
<freshEverySchedule frequency="Hours" value="10" />
</dataFreshnessPolicy>
</workbook>
</tsResponse>
12 changes: 12 additions & 0 deletions test/assets/workbook_update_data_freshness_policy4.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<dataFreshnessPolicy option="FreshAt">
<freshAtSchedule time="22:00:00" frequency="Day" timezone="Asia/Singapore">
</freshAtSchedule>
</dataFreshnessPolicy>
</workbook>
</tsResponse>
16 changes: 16 additions & 0 deletions test/assets/workbook_update_data_freshness_policy5.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<dataFreshnessPolicy option="FreshAt">
<freshAtSchedule time="10:00:00" frequency="Week" timezone="America/Los_Angeles">
<intervals>
<interval weekDay="WEDNESDAY"/>
<interval weekDay="MONDAY"/>
</intervals>
</freshAtSchedule>
</dataFreshnessPolicy>
</workbook>
</tsResponse>
15 changes: 15 additions & 0 deletions test/assets/workbook_update_data_freshness_policy6.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<dataFreshnessPolicy option="FreshAt">
<freshAtSchedule time="00:00:00" frequency="Month" timezone="America/Los_Angeles">
<intervals>
<interval monthDay="LastDay"/>
</intervals>
</freshAtSchedule>
</dataFreshnessPolicy>
</workbook>
</tsResponse>
19 changes: 19 additions & 0 deletions test/assets/workbook_update_views_acceleration_status.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.3.xsd">
<workbook id="1f951daf-4061-451a-9df1-69a8062664f2" name="renamedWorkbook2" contentUrl="RESTAPISample" showTabs="true" size="1" createdAt="2016-08-18T18:25:36Z" updatedAt="2016-08-18T18:29:36Z">
<project id="1d0304cd-3796-429f-b815-7258370b9b74" name="Tableau" />
<owner id="dd2239f6-ddf1-4107-981a-4cf94e415794" />
<tags />
<views>
<view id="097dbe13-de89-445f-b2c3-02f28bd010c1" name="GDP per capita" contentUrl="RESTAPISample/sheets/GDPpercapita">
<dataAccelerationConfig accelerationEnabled="false" accelerationStatus="Disabled" />
</view>
<view id="2c1ab9d7-8d64-4cc6-b495-52e40c60c330" name="Country ranks" contentUrl="RESTAPISample/sheets/Countryranks">
<dataAccelerationConfig accelerationEnabled="true" accelerationStatus="Pending" />
</view>
<view id="0599c28c-6d82-457e-a453-e52c1bdb00f5" name="Interest rates" contentUrl="RESTAPISample/sheets/Interestrates">
<dataAccelerationConfig accelerationEnabled="true" accelerationStatus="Pending" />
</view>
</views>
</workbook>
</tsResponse>
187 changes: 187 additions & 0 deletions test/test_data_freshness_policy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
import os
import requests_mock
import unittest

import tableauserverclient as TSC

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

UPDATE_DFP_ALWAYS_LIVE_XML = os.path.join(TEST_ASSET_DIR, "workbook_update_data_freshness_policy.xml")
UPDATE_DFP_SITE_DEFAULT_XML = os.path.join(TEST_ASSET_DIR, "workbook_update_data_freshness_policy2.xml")
UPDATE_DFP_FRESH_EVERY_XML = os.path.join(TEST_ASSET_DIR, "workbook_update_data_freshness_policy3.xml")
UPDATE_DFP_FRESH_AT_DAILY_XML = os.path.join(TEST_ASSET_DIR, "workbook_update_data_freshness_policy4.xml")
UPDATE_DFP_FRESH_AT_WEEKLY_XML = os.path.join(TEST_ASSET_DIR, "workbook_update_data_freshness_policy5.xml")
UPDATE_DFP_FRESH_AT_MONTHLY_XML = os.path.join(TEST_ASSET_DIR, "workbook_update_data_freshness_policy6.xml")

class WorkbookTests(unittest.TestCase):
def setUp(self) -> None:
self.server = TSC.Server("http://test", False)

# Fake sign in
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"

self.baseurl = self.server.workbooks.baseurl

def test_update_DFP_always_live(self) -> None:
with open(UPDATE_DFP_ALWAYS_LIVE_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.AlwaysLive)
single_workbook = self.server.workbooks.update(single_workbook)

self.assertEqual("1f951daf-4061-451a-9df1-69a8062664f2", single_workbook.id)
self.assertEqual("AlwaysLive", single_workbook.data_freshness_policy.option)

def test_update_DFP_site_default(self) -> None:
with open(UPDATE_DFP_SITE_DEFAULT_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.SiteDefault)
single_workbook = self.server.workbooks.update(single_workbook)

self.assertEqual("1f951daf-4061-451a-9df1-69a8062664f2", single_workbook.id)
self.assertEqual("SiteDefault", single_workbook.data_freshness_policy.option)

def test_update_DFP_fresh_every(self) -> None:
with open(UPDATE_DFP_FRESH_EVERY_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.FreshEvery)
fresh_every_ten_hours = TSC.DataFreshnessPolicyItem.FreshEvery(
TSC.DataFreshnessPolicyItem.FreshEvery.Frequency.Hours,
10
)
single_workbook.data_freshness_policy.fresh_every_schedule = fresh_every_ten_hours
single_workbook = self.server.workbooks.update(single_workbook)

self.assertEqual("1f951daf-4061-451a-9df1-69a8062664f2", single_workbook.id)
self.assertEqual("FreshEvery", single_workbook.data_freshness_policy.option)
self.assertEqual("Hours", single_workbook.data_freshness_policy.fresh_every_schedule.frequency)
self.assertEqual(10, single_workbook.data_freshness_policy.fresh_every_schedule.value)

def test_update_DFP_fresh_every_missing_attributes(self) -> None:
with open(UPDATE_DFP_FRESH_EVERY_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.FreshEvery)

self.assertRaises(ValueError, self.server.workbooks.update, single_workbook)

def test_update_DFP_fresh_at_day(self) -> None:
with open(UPDATE_DFP_FRESH_AT_DAILY_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.FreshAt)
fresh_at_10pm_daily = TSC.DataFreshnessPolicyItem.FreshAt(
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Day,
"22:00:00",
" Asia/Singapore"
)
single_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_10pm_daily
single_workbook = self.server.workbooks.update(single_workbook)

self.assertEqual("1f951daf-4061-451a-9df1-69a8062664f2", single_workbook.id)
self.assertEqual("FreshAt", single_workbook.data_freshness_policy.option)
self.assertEqual("Day", single_workbook.data_freshness_policy.fresh_at_schedule.frequency)
self.assertEqual("22:00:00", single_workbook.data_freshness_policy.fresh_at_schedule.time)
self.assertEqual("Asia/Singapore", single_workbook.data_freshness_policy.fresh_at_schedule.timezone)

def test_update_DFP_fresh_at_week(self) -> None:
with open(UPDATE_DFP_FRESH_AT_WEEKLY_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.FreshAt)
fresh_at_10am_mon_wed = TSC.DataFreshnessPolicyItem.FreshAt(
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Week,
"10:00:00",
"America/Los_Angeles",
["Monday", "Wednesday"]
)
single_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_10am_mon_wed
single_workbook = self.server.workbooks.update(single_workbook)

self.assertEqual("1f951daf-4061-451a-9df1-69a8062664f2", single_workbook.id)
self.assertEqual("FreshAt", single_workbook.data_freshness_policy.option)
self.assertEqual("Week", single_workbook.data_freshness_policy.fresh_at_schedule.frequency)
self.assertEqual("10:00:00", single_workbook.data_freshness_policy.fresh_at_schedule.time)
self.assertEqual("Wednesday", single_workbook.data_freshness_policy.fresh_at_schedule.interval_item[0])
self.assertEqual("Monday", single_workbook.data_freshness_policy.fresh_at_schedule.interval_item[1])

def test_update_DFP_fresh_at_month(self) -> None:
with open(UPDATE_DFP_FRESH_AT_MONTHLY_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.FreshAt)
fresh_at_00am_lastDayOfMonth = TSC.DataFreshnessPolicyItem.FreshAt(
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Month,
"00:00:00",
"America/Los_Angeles",
["LastDay"]
)
single_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_00am_lastDayOfMonth
single_workbook = self.server.workbooks.update(single_workbook)

self.assertEqual("1f951daf-4061-451a-9df1-69a8062664f2", single_workbook.id)
self.assertEqual("FreshAt", single_workbook.data_freshness_policy.option)
self.assertEqual("Month", single_workbook.data_freshness_policy.fresh_at_schedule.frequency)
self.assertEqual("00:00:00", single_workbook.data_freshness_policy.fresh_at_schedule.time)
self.assertEqual("LastDay", single_workbook.data_freshness_policy.fresh_at_schedule.interval_item[0])

def test_update_DFP_fresh_at_missing_params(self) -> None:
with open(UPDATE_DFP_FRESH_AT_DAILY_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.FreshAt)

self.assertRaises(ValueError, self.server.workbooks.update, single_workbook)

def test_update_DFP_fresh_at_missing_interval(self) -> None:
with open(UPDATE_DFP_FRESH_AT_DAILY_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
TSC.DataFreshnessPolicyItem.Option.FreshAt)
fresh_at_month_no_interval = TSC.DataFreshnessPolicyItem.FreshAt(
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Month,
"00:00:00",
"America/Los_Angeles"
)
single_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_month_no_interval

self.assertRaises(ValueError, self.server.workbooks.update, single_workbook)
118 changes: 118 additions & 0 deletions test/test_view_acceleration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import os
import requests_mock
import unittest

import tableauserverclient as TSC
from tableauserverclient.datetime_helpers import format_datetime

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

GET_BY_ID_ACCELERATION_STATUS_XML = os.path.join(TEST_ASSET_DIR, "workbook_get_by_id_acceleration_status.xml")
POPULATE_VIEWS_XML = os.path.join(TEST_ASSET_DIR, "workbook_populate_views.xml")
UPDATE_VIEWS_ACCELERATION_STATUS_XML = os.path.join(TEST_ASSET_DIR, "workbook_update_views_acceleration_status.xml")
UPDATE_WORKBOOK_ACCELERATION_STATUS_XML = os.path.join(TEST_ASSET_DIR,"workbook_update_acceleration_status.xml")

class WorkbookTests(unittest.TestCase):
def setUp(self) -> None:
self.server = TSC.Server("http://test", False)

# Fake sign in
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"

self.baseurl = self.server.workbooks.baseurl

def test_get_by_id(self) -> None:
with open(GET_BY_ID_ACCELERATION_STATUS_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.get(self.baseurl + "/3cc6cd06-89ce-4fdc-b935-5294135d6d42", text=response_xml)
single_workbook = self.server.workbooks.get_by_id("3cc6cd06-89ce-4fdc-b935-5294135d6d42")

self.assertEqual("3cc6cd06-89ce-4fdc-b935-5294135d6d42", 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.assertEqual("ee8c6e70-43b6-11e6-af4f-f7b0d8e20760", single_workbook.project_id)
self.assertEqual("default", 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)
self.assertEqual(True, single_workbook.views[0].data_acceleration_config['acceleration_enabled'])
self.assertEqual("Enabled", single_workbook.views[0].data_acceleration_config['acceleration_status'])
self.assertEqual("d79634e1-6063-4ec9-95ff-50acbf609ff9", single_workbook.views[1].id)
self.assertEqual("ENDANGERED SAFARI 2", single_workbook.views[1].name)
self.assertEqual("SafariSample/sheets/ENDANGEREDSAFARI2", single_workbook.views[1].content_url)
self.assertEqual(False, single_workbook.views[1].data_acceleration_config['acceleration_enabled'])
self.assertEqual("Suspended", single_workbook.views[1].data_acceleration_config['acceleration_status'])

def test_update_workbook_acceleration(self) -> None:
with open(UPDATE_WORKBOOK_ACCELERATION_STATUS_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_acceleration_config = {
"acceleration_enabled": True,
"accelerate_now": False,
"last_updated_at": None,
"acceleration_status": None,
}
# update with parameter includeViewAccelerationStatus=True
single_workbook = self.server.workbooks.update(single_workbook, True)

self.assertEqual("1f951daf-4061-451a-9df1-69a8062664f2", single_workbook.id)
self.assertEqual("1d0304cd-3796-429f-b815-7258370b9b74", single_workbook.project_id)
self.assertEqual("SafariSample/sheets/ENDANGEREDSAFARI", single_workbook.views[0].content_url)
self.assertEqual(True, single_workbook.views[0].data_acceleration_config['acceleration_enabled'])
self.assertEqual("Pending", single_workbook.views[0].data_acceleration_config['acceleration_status'])
self.assertEqual("d79634e1-6063-4ec9-95ff-50acbf609ff9", single_workbook.views[1].id)
self.assertEqual("ENDANGERED SAFARI 2", single_workbook.views[1].name)
self.assertEqual("SafariSample/sheets/ENDANGEREDSAFARI2", single_workbook.views[1].content_url)
self.assertEqual(True, single_workbook.views[1].data_acceleration_config['acceleration_enabled'])
self.assertEqual("Pending", single_workbook.views[1].data_acceleration_config['acceleration_status'])

def test_update_views_acceleration(self) -> None:
with open(POPULATE_VIEWS_XML, "rb") as f:
views_xml = f.read().decode("utf-8")
with open(UPDATE_VIEWS_ACCELERATION_STATUS_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.get(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2/views", text=views_xml)
m.put(self.baseurl + "/1f951daf-4061-451a-9df1-69a8062664f2", text=response_xml)
single_workbook = TSC.WorkbookItem("1d0304cd-3796-429f-b815-7258370b9b74", show_tabs=True)
single_workbook._id = "1f951daf-4061-451a-9df1-69a8062664f2"
single_workbook.data_acceleration_config = {
"acceleration_enabled": False,
"accelerate_now": False,
"last_updated_at": None,
"acceleration_status": None,
}
self.server.workbooks.populate_views(single_workbook)
single_workbook.views = [single_workbook.views[1],single_workbook.views[2]]
# update with parameter includeViewAccelerationStatus=True
single_workbook = self.server.workbooks.update(single_workbook, True)

views_list = single_workbook.views
self.assertEqual("097dbe13-de89-445f-b2c3-02f28bd010c1", views_list[0].id)
self.assertEqual("GDP per capita", views_list[0].name)
self.assertEqual(False, views_list[0].data_acceleration_config['acceleration_enabled'])
self.assertEqual("Disabled", views_list[0].data_acceleration_config['acceleration_status'])

self.assertEqual("2c1ab9d7-8d64-4cc6-b495-52e40c60c330", views_list[1].id)
self.assertEqual("Country ranks", views_list[1].name)
self.assertEqual(True, views_list[1].data_acceleration_config['acceleration_enabled'])
self.assertEqual("Pending", views_list[1].data_acceleration_config['acceleration_status'])

self.assertEqual("0599c28c-6d82-457e-a453-e52c1bdb00f5", views_list[2].id)
self.assertEqual("Interest rates", views_list[2].name)
self.assertEqual(True, views_list[2].data_acceleration_config['acceleration_enabled'])
self.assertEqual("Pending", views_list[2].data_acceleration_config['acceleration_status'])

0 comments on commit 0f5349b

Please sign in to comment.