From 8c7cbc3df12f24a46c53aa4b23da82aa240c72a2 Mon Sep 17 00:00:00 2001 From: T8y8 Date: Tue, 9 May 2017 17:46:53 -0700 Subject: [PATCH 1/4] Add revision settings to Update Site --- tableauserverclient/models/site_item.py | 3 ++- tableauserverclient/server/request_factory.py | 4 ++++ test/assets/site_update.xml | 2 +- test/test_site.py | 4 +++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tableauserverclient/models/site_item.py b/tableauserverclient/models/site_item.py index 40a49e453..a8848d1fe 100644 --- a/tableauserverclient/models/site_item.py +++ b/tableauserverclient/models/site_item.py @@ -17,7 +17,8 @@ class State: Suspended = 'Suspended' def __init__(self, name, content_url, admin_mode=None, user_quota=None, storage_quota=None, - disable_subscriptions=False, subscribe_others_enabled=True, revision_history_enabled=False): + disable_subscriptions=False, subscribe_others_enabled=True, revision_history_enabled=False, + revision_limit=None): self._admin_mode = None self._id = None self._num_users = None diff --git a/tableauserverclient/server/request_factory.py b/tableauserverclient/server/request_factory.py index 439f517cb..1762cd3bd 100644 --- a/tableauserverclient/server/request_factory.py +++ b/tableauserverclient/server/request_factory.py @@ -222,6 +222,10 @@ def update_req(self, site_item): site_element.attrib['disableSubscriptions'] = str(site_item.disable_subscriptions).lower() if site_item.subscribe_others_enabled: site_element.attrib['subscribeOthersEnabled'] = str(site_item.subscribe_others_enabled).lower() + if site_item.revision_limit: + site_element.attrib['revisionLimit'] = str(site_item.revision_limit) + if site_item.subscribe_others_enabled: + site_element.attrib['revisionHistoryEnabled'] = str(site_item.revision_history_enabled).lower() return ET.tostring(xml_request) def create_req(self, site_item): diff --git a/test/assets/site_update.xml b/test/assets/site_update.xml index 8dabb4613..ade302fef 100644 --- a/test/assets/site_update.xml +++ b/test/assets/site_update.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/test/test_site.py b/test/test_site.py index 1d23351a9..8113613ca 100644 --- a/test/test_site.py +++ b/test/test_site.py @@ -91,7 +91,7 @@ def test_update(self): single_site = TSC.SiteItem(name='Tableau', content_url='tableau', admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers, user_quota=15, storage_quota=1000, - disable_subscriptions=True) + disable_subscriptions=True, revision_history_enabled=False) single_site._id = '6b7179ba-b82b-4f0f-91ed-812074ac5da6' single_site = self.server.sites.update(single_site) @@ -100,6 +100,8 @@ def test_update(self): self.assertEqual('Suspended', single_site.state) self.assertEqual('Tableau', single_site.name) self.assertEqual('ContentAndUsers', single_site.admin_mode) + self.assertEqual(True, single_site.revision_history_enabled) + self.assertEqual(13, single_site.revision_limit) self.assertEqual(True, single_site.disable_subscriptions) self.assertEqual(15, single_site.user_quota) From 94c477027cb3ba24aaaf44682e6b54307667b0be Mon Sep 17 00:00:00 2001 From: T8y8 Date: Wed, 10 May 2017 10:53:44 -0700 Subject: [PATCH 2/4] Update site model and property decorator for new case --- .../models/property_decorators.py | 17 ++++++++++++----- tableauserverclient/models/site_item.py | 13 +++++++++++-- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/tableauserverclient/models/property_decorators.py b/tableauserverclient/models/property_decorators.py index 77612b172..0da1988bb 100644 --- a/tableauserverclient/models/property_decorators.py +++ b/tableauserverclient/models/property_decorators.py @@ -69,7 +69,17 @@ def wrapper(self, value): return wrapper -def property_is_int(range): +def property_is_int(range, allowed=None): + '''Takes a range of ints and a list of possible exceptions to check against + when setting a property on a model. The range is a tuple of (min,max) and the + allowed list (empty by default) allows you to add exemptions outside the range. + This is useful for when we allow sentinel values outside the regular range.abs + Example: Revisions allow a range of 2-10000, but use -1 as 'unlimited'. + ''' + + if allowed is None: + allowed = () # Empty tuple for fast no-op testing. + def property_type_decorator(func): @wraps(func) def wrapper(self, value): @@ -83,14 +93,11 @@ def wrapper(self, value): min, max = range - if value < min or value > max: - + if (value < min or value > max) and (value not in allowed): raise ValueError(error) return func(self, value) - return wrapper - return property_type_decorator diff --git a/tableauserverclient/models/site_item.py b/tableauserverclient/models/site_item.py index a8848d1fe..a11295760 100644 --- a/tableauserverclient/models/site_item.py +++ b/tableauserverclient/models/site_item.py @@ -1,6 +1,6 @@ import xml.etree.ElementTree as ET from .property_decorators import (property_is_enum, property_is_boolean, property_matches, - property_not_empty, property_not_nullable) + property_not_empty, property_not_nullable, property_is_int) from .. import NAMESPACE @@ -25,7 +25,7 @@ def __init__(self, name, content_url, admin_mode=None, user_quota=None, storage_ self._state = None self._status_reason = None self._storage = None - self.revision_limit = None + self._revision_limit = None self.user_quota = user_quota self.storage_quota = storage_quota self.content_url = content_url @@ -89,6 +89,15 @@ def revision_history_enabled(self): def revision_history_enabled(self, value): self._revision_history_enabled = value + @property + def revision_limit(self): + return self._revision_limit + + @revision_limit.setter + @property_is_int((2,10000), allowed=[-1]) + def revision_limit(self, value): + self._revision_limit = value + @property def state(self): return self._state From 0a7cd9848e0d63e6e24b17961c74d002a6296401 Mon Sep 17 00:00:00 2001 From: T8y8 Date: Wed, 10 May 2017 10:54:39 -0700 Subject: [PATCH 3/4] fix pep8 --- tableauserverclient/models/site_item.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tableauserverclient/models/site_item.py b/tableauserverclient/models/site_item.py index a11295760..e10c71ec2 100644 --- a/tableauserverclient/models/site_item.py +++ b/tableauserverclient/models/site_item.py @@ -94,7 +94,7 @@ def revision_limit(self): return self._revision_limit @revision_limit.setter - @property_is_int((2,10000), allowed=[-1]) + @property_is_int((2, 10000), allowed=[-1]) def revision_limit(self, value): self._revision_limit = value From f1f047f0c2e58adf72db36e5d0512ec5e43d2b7f Mon Sep 17 00:00:00 2001 From: T8y8 Date: Wed, 10 May 2017 10:56:38 -0700 Subject: [PATCH 4/4] Cleanup docstring --- tableauserverclient/models/property_decorators.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tableauserverclient/models/property_decorators.py b/tableauserverclient/models/property_decorators.py index 0da1988bb..f8a8662a8 100644 --- a/tableauserverclient/models/property_decorators.py +++ b/tableauserverclient/models/property_decorators.py @@ -70,11 +70,12 @@ def wrapper(self, value): def property_is_int(range, allowed=None): - '''Takes a range of ints and a list of possible exceptions to check against - when setting a property on a model. The range is a tuple of (min,max) and the - allowed list (empty by default) allows you to add exemptions outside the range. - This is useful for when we allow sentinel values outside the regular range.abs - Example: Revisions allow a range of 2-10000, but use -1 as 'unlimited'. + '''Takes a range of ints and a list of exemptions to check against + when setting a property on a model. The range is a tuple of (min, max) and the + allowed list (empty by default) allows values outside that range. + This is useful for when we use sentinel values. + + Example: Revisions allow a range of 2-10000, but use -1 as a sentinel for 'unlimited'. ''' if allowed is None: