diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e6be649b..85dc8a702 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.14.1 (9 Dec 2020) +* Fixed filter query issue for server version below 2020.1 (#745) +* Fixed large workbook/datasource publish issue (#757) + ## 0.14.0 (6 Nov 2020) * Added django-style filtering and sorting (#615) * Added encoding tag-name before deleting (#687) diff --git a/tableauserverclient/models/site_item.py b/tableauserverclient/models/site_item.py index 1ba854e72..f562289ce 100644 --- a/tableauserverclient/models/site_item.py +++ b/tableauserverclient/models/site_item.py @@ -17,7 +17,19 @@ class State: 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, - revision_limit=None, data_acceleration_mode=None, flows_enabled=None, cataloging_enabled=None): + revision_limit=None, data_acceleration_mode=None, flows_enabled=True, cataloging_enabled=True, + editing_flows_enabled=True, scheduling_flows_enabled=True, allow_subscription_attachments=True, + guest_access_enabled=False, cache_warmup_enabled=True, commenting_enabled=True, + extract_encryption_mode=None, request_access_enabled=False, run_now_enabled=True, + tier_explorer_capacity=None, tier_creator_capacity=None, tier_viewer_capacity=None, + data_alerts_enabled=True, commenting_mentions_enabled=True, catalog_obfuscation_enabled=False, + flow_auto_save_enabled=True, web_extraction_enabled=True, metrics_content_type_enabled=True, + notify_site_admins_on_throttle=False, authoring_enabled=True, custom_subscription_email_enabled=False, + custom_subscription_email=False, custom_subscription_footer_enabled=False, + custom_subscription_footer=False, ask_data_mode='EnabledByDefault', named_sharing_enabled=True, + mobile_biometrics_enabled=False, sheet_image_enabled=True, derived_permissions_enabled=False, + user_visibility_mode='FULL', use_default_time_zone=True, time_zone=None, + auto_suspend_refresh_enabled=True, auto_suspend_refresh_inactivity_window=30): self._admin_mode = None self._id = None self._num_users = None @@ -36,6 +48,40 @@ def __init__(self, name, content_url, admin_mode=None, user_quota=None, storage_ self.data_acceleration_mode = data_acceleration_mode self.cataloging_enabled = cataloging_enabled self.flows_enabled = flows_enabled + self.editing_flows_enabled = editing_flows_enabled + self.scheduling_flows_enabled = scheduling_flows_enabled + self.allow_subscription_attachments = allow_subscription_attachments + self.guest_access_enabled = guest_access_enabled + self.cache_warmup_enabled = cache_warmup_enabled + self.commenting_enabled = commenting_enabled + self.extract_encryption_mode = extract_encryption_mode + self.request_access_enabled = request_access_enabled + self.run_now_enabled = run_now_enabled + self.tier_explorer_capacity = tier_explorer_capacity + self.tier_creator_capacity = tier_creator_capacity + self.tier_viewer_capacity = tier_viewer_capacity + self.data_alerts_enabled = data_alerts_enabled + self.commenting_mentions_enabled = commenting_mentions_enabled + self.catalog_obfuscation_enabled = catalog_obfuscation_enabled + self.flow_auto_save_enabled = flow_auto_save_enabled + self.web_extraction_enabled = web_extraction_enabled + self.metrics_content_type_enabled = metrics_content_type_enabled + self.notify_site_admins_on_throttle = notify_site_admins_on_throttle + self.authoring_enabled = authoring_enabled + self.custom_subscription_footer_enabled = custom_subscription_footer_enabled + self.custom_subscription_email_enabled = custom_subscription_email_enabled + self.custom_subscription_email = custom_subscription_email + self.custom_subscription_footer = custom_subscription_footer + self.ask_data_mode = ask_data_mode + self.named_sharing_enabled = named_sharing_enabled + self.mobile_biometrics_enabled = mobile_biometrics_enabled + self.sheet_image_enabled = sheet_image_enabled + self.derived_permissions_enabled = derived_permissions_enabled + self.user_visibility_mode = user_visibility_mode + self.use_default_time_zone = use_default_time_zone + self.time_zone = time_zone + self.auto_suspend_refresh_enabled = auto_suspend_refresh_enabled + self.auto_suspend_refresh_inactivity_window = auto_suspend_refresh_inactivity_window @property def admin_mode(self): @@ -147,12 +193,307 @@ def flows_enabled(self): return self._flows_enabled @flows_enabled.setter + @property_is_boolean def flows_enabled(self, value): self._flows_enabled = value def is_default(self): return self.name.lower() == 'default' + @property + def editing_flows_enabled(self): + return self._editing_flows_enabled + + @editing_flows_enabled.setter + @property_is_boolean + def editing_flows_enabled(self, value): + self._editing_flows_enabled = value + + @property + def scheduling_flows_enabled(self): + return self._scheduling_flows_enabled + + @scheduling_flows_enabled.setter + @property_is_boolean + def scheduling_flows_enabled(self, value): + self._scheduling_flows_enabled = value + + @property + def allow_subscription_attachments(self): + return self._allow_subscription_attachments + + @allow_subscription_attachments.setter + @property_is_boolean + def allow_subscription_attachments(self, value): + self._allow_subscription_attachments = value + + @property + def guest_access_enabled(self): + return self._guest_access_enabled + + @guest_access_enabled.setter + @property_is_boolean + def guest_access_enabled(self, value): + self._guest_access_enabled = value + + @property + def cache_warmup_enabled(self): + return self._cache_warmup_enabled + + @cache_warmup_enabled.setter + @property_is_boolean + def cache_warmup_enabled(self, value): + self._cache_warmup_enabled = value + + @property + def commenting_enabled(self): + return self._commenting_enabled + + @commenting_enabled.setter + @property_is_boolean + def commenting_enabled(self, value): + self._commenting_enabled = value + + @property + def extract_encryption_mode(self): + return self._extract_encryption_mode + + @extract_encryption_mode.setter + def extract_encryption_mode(self, value): + self._extract_encryption_mode = value + + @property + def request_access_enabled(self): + return self._request_access_enabled + + @request_access_enabled.setter + @property_is_boolean + def request_access_enabled(self, value): + self._request_access_enabled = value + + @property + def run_now_enabled(self): + return self._run_now_enabled + + @run_now_enabled.setter + @property_is_boolean + def run_now_enabled(self, value): + self._run_now_enabled = value + + @property + def tier_explorer_capacity(self): + return self._tier_explorer_capacity + + @tier_explorer_capacity.setter + def tier_explorer_capacity(self, value): + self._tier_explorer_capacity = value + + @property + def tier_creator_capacity(self): + return self._tier_creator_capacity + + @tier_creator_capacity.setter + def tier_creator_capacity(self, value): + self._tier_creator_capacity = value + + @property + def tier_viewer_capacity(self): + return self._tier_viewer_capacity + + @tier_viewer_capacity.setter + def tier_viewer_capacity(self, value): + self._tier_viewer_capacity = value + + @property + def data_alerts_enabled(self): + return self._data_alerts_enabled + + @data_alerts_enabled.setter + @property_is_boolean + def data_alerts_enabled(self, value): + self._data_alerts_enabled = value + + @property + def commenting_mentions_enabled(self): + return self._commenting_mentions_enabled + + @commenting_mentions_enabled.setter + @property_is_boolean + def commenting_mentions_enabled(self, value): + self._commenting_mentions_enabled = value + + @property + def catalog_obfuscation_enabled(self): + return self._catalog_obfuscation_enabled + + @catalog_obfuscation_enabled.setter + @property_is_boolean + def catalog_obfuscation_enabled(self, value): + self._catalog_obfuscation_enabled = value + + @property + def flow_auto_save_enabled(self): + return self._flow_auto_save_enabled + + @flow_auto_save_enabled.setter + @property_is_boolean + def flow_auto_save_enabled(self, value): + self._flow_auto_save_enabled = value + + @property + def web_extraction_enabled(self): + return self._web_extraction_enabled + + @web_extraction_enabled.setter + @property_is_boolean + def web_extraction_enabled(self, value): + self._web_extraction_enabled = value + + @property + def metrics_content_type_enabled(self): + return self._metrics_content_type_enabled + + @metrics_content_type_enabled.setter + @property_is_boolean + def metrics_content_type_enabled(self, value): + self._metrics_content_type_enabled = value + + @property + def notify_site_admins_on_throttle(self): + return self._notify_site_admins_on_throttle + + @notify_site_admins_on_throttle.setter + @property_is_boolean + def notify_site_admins_on_throttle(self, value): + self._notify_site_admins_on_throttle = value + + @property + def authoring_enabled(self): + return self._authoring_enabled + + @authoring_enabled.setter + @property_is_boolean + def authoring_enabled(self, value): + self._authoring_enabled = value + + @property + def custom_subscription_email_enabled(self): + return self._custom_subscription_email_enabled + + @custom_subscription_email_enabled.setter + @property_is_boolean + def custom_subscription_email_enabled(self, value): + self._custom_subscription_email_enabled = value + + @property + def custom_subscription_email(self): + return self._custom_subscription_email + + @custom_subscription_email.setter + def custom_subscription_email(self, value): + self._custom_subscription_email = value + + @property + def custom_subscription_footer_enabled(self): + return self._custom_subscription_footer_enabled + + @custom_subscription_footer_enabled.setter + @property_is_boolean + def custom_subscription_footer_enabled(self, value): + self._custom_subscription_footer_enabled = value + + @property + def custom_subscription_footer(self): + return self._custom_subscription_footer + + @custom_subscription_footer.setter + def custom_subscription_footer(self, value): + self._custom_subscription_footer = value + + @property + def ask_data_mode(self): + return self._ask_data_mode + + @ask_data_mode.setter + def ask_data_mode(self, value): + self._ask_data_mode = value + + @property + def named_sharing_enabled(self): + return self._named_sharing_enabled + + @named_sharing_enabled.setter + @property_is_boolean + def named_sharing_enabled(self, value): + self._named_sharing_enabled = value + + @property + def mobile_biometrics_enabled(self): + return self._mobile_biometrics_enabled + + @mobile_biometrics_enabled.setter + @property_is_boolean + def mobile_biometrics_enabled(self, value): + self._mobile_biometrics_enabled = value + + @property + def sheet_image_enabled(self): + return self._sheet_image_enabled + + @sheet_image_enabled.setter + @property_is_boolean + def sheet_image_enabled(self, value): + self._sheet_image_enabled = value + + @property + def derived_permissions_enabled(self): + return self._derived_permissions_enabled + + @derived_permissions_enabled.setter + @property_is_boolean + def derived_permissions_enabled(self, value): + self._derived_permissions_enabled = value + + @property + def user_visibility_mode(self): + return self._user_visibility_mode + + @user_visibility_mode.setter + def user_visibility_mode(self, value): + self._user_visibility_mode = value + + @property + def use_default_time_zone(self): + return self._use_default_time_zone + + @use_default_time_zone.setter + def use_default_time_zone(self, value): + self._use_default_time_zone = value + + @property + def time_zone(self): + return self._time_zone + + @time_zone.setter + def time_zone(self, value): + self._time_zone = value + + @property + def auto_suspend_refresh_inactivity_window(self): + return self._auto_suspend_refresh_inactivity_window + + @auto_suspend_refresh_inactivity_window.setter + def auto_suspend_refresh_inactivity_window(self, value): + self._auto_suspend_refresh_inactivity_window = value + + @property + def auto_suspend_refresh_enabled(self): + return self._auto_suspend_refresh_enabled + + @auto_suspend_refresh_enabled.setter + def auto_suspend_refresh_enabled(self, value): + self._auto_suspend_refresh_enabled = value + def _parse_common_tags(self, site_xml, ns): if not isinstance(site_xml, ET.Element): site_xml = ET.fromstring(site_xml).find('.//t:site', namespaces=ns) @@ -160,18 +501,46 @@ def _parse_common_tags(self, site_xml, ns): (_, name, content_url, _, admin_mode, state, subscribe_others_enabled, disable_subscriptions, revision_history_enabled, user_quota, storage_quota, revision_limit, num_users, storage, - data_acceleration_mode, cataloging_enabled, flows_enabled) = self._parse_element(site_xml, ns) + data_acceleration_mode, flows_enabled, cataloging_enabled, editing_flows_enabled, + scheduling_flows_enabled, allow_subscription_attachments, guest_access_enabled, + cache_warmup_enabled, commenting_enabled, extract_encryption_mode, request_access_enabled, + run_now_enabled, tier_explorer_capacity, tier_creator_capacity, tier_viewer_capacity, data_alerts_enabled, + commenting_mentions_enabled, catalog_obfuscation_enabled, flow_auto_save_enabled, web_extraction_enabled, + metrics_content_type_enabled, notify_site_admins_on_throttle, authoring_enabled, + custom_subscription_email_enabled, custom_subscription_email, custom_subscription_footer_enabled, + custom_subscription_footer, ask_data_mode, named_sharing_enabled, mobile_biometrics_enabled, + sheet_image_enabled, derived_permissions_enabled, user_visibility_mode, use_default_time_zone, time_zone, + auto_suspend_refresh_enabled, auto_suspend_refresh_inactivity_window) = self._parse_element(site_xml, ns) self._set_values(None, name, content_url, None, admin_mode, state, subscribe_others_enabled, disable_subscriptions, revision_history_enabled, user_quota, storage_quota, - revision_limit, num_users, storage, data_acceleration_mode, cataloging_enabled, - flows_enabled) + revision_limit, num_users, storage, data_acceleration_mode, flows_enabled, + cataloging_enabled, editing_flows_enabled, scheduling_flows_enabled, + allow_subscription_attachments, guest_access_enabled, cache_warmup_enabled, + commenting_enabled, extract_encryption_mode, request_access_enabled, run_now_enabled, + tier_explorer_capacity, tier_creator_capacity, tier_viewer_capacity, data_alerts_enabled, + commenting_mentions_enabled, catalog_obfuscation_enabled, flow_auto_save_enabled, + web_extraction_enabled, metrics_content_type_enabled, notify_site_admins_on_throttle, + authoring_enabled, custom_subscription_email_enabled, custom_subscription_email, + custom_subscription_footer_enabled, custom_subscription_footer, ask_data_mode, + named_sharing_enabled, mobile_biometrics_enabled, sheet_image_enabled, + derived_permissions_enabled, user_visibility_mode, use_default_time_zone, time_zone, + auto_suspend_refresh_enabled, auto_suspend_refresh_inactivity_window) return self def _set_values(self, id, name, content_url, status_reason, admin_mode, state, subscribe_others_enabled, disable_subscriptions, revision_history_enabled, user_quota, storage_quota, revision_limit, num_users, storage, data_acceleration_mode, - flows_enabled, cataloging_enabled): + flows_enabled, cataloging_enabled, editing_flows_enabled, scheduling_flows_enabled, + allow_subscription_attachments, guest_access_enabled, cache_warmup_enabled, commenting_enabled, + extract_encryption_mode, request_access_enabled, run_now_enabled, tier_explorer_capacity, + tier_creator_capacity, tier_viewer_capacity, data_alerts_enabled, commenting_mentions_enabled, + catalog_obfuscation_enabled, flow_auto_save_enabled, web_extraction_enabled, + metrics_content_type_enabled, notify_site_admins_on_throttle, authoring_enabled, + custom_subscription_email_enabled, custom_subscription_email, custom_subscription_footer_enabled, + custom_subscription_footer, ask_data_mode, named_sharing_enabled, mobile_biometrics_enabled, + sheet_image_enabled, derived_permissions_enabled, user_visibility_mode, use_default_time_zone, + time_zone, auto_suspend_refresh_enabled, auto_suspend_refresh_inactivity_window): if id is not None: self._id = id if name: @@ -206,6 +575,74 @@ def _set_values(self, id, name, content_url, status_reason, admin_mode, state, self.flows_enabled = flows_enabled if cataloging_enabled is not None: self.cataloging_enabled = cataloging_enabled + if editing_flows_enabled is not None: + self.editing_flows_enabled = editing_flows_enabled + if scheduling_flows_enabled is not None: + self.scheduling_flows_enabled = scheduling_flows_enabled + if allow_subscription_attachments is not None: + self.allow_subscription_attachments = allow_subscription_attachments + if guest_access_enabled is not None: + self.guest_access_enabled = guest_access_enabled + if cache_warmup_enabled is not None: + self.cache_warmup_enabled = cache_warmup_enabled + if commenting_enabled is not None: + self.commenting_enabled = commenting_enabled + if extract_encryption_mode is not None: + self.extract_encryption_mode = extract_encryption_mode + if request_access_enabled is not None: + self.request_access_enabled = request_access_enabled + if run_now_enabled is not None: + self.run_now_enabled = run_now_enabled + if tier_explorer_capacity: + self.tier_explorer_capacity = tier_explorer_capacity + if tier_creator_capacity: + self.tier_creator_capacity = tier_creator_capacity + if tier_viewer_capacity: + self.tier_viewer_capacity = tier_viewer_capacity + if data_alerts_enabled is not None: + self.data_alerts_enabled = data_alerts_enabled + if commenting_mentions_enabled is not None: + self.commenting_mentions_enabled = commenting_mentions_enabled + if catalog_obfuscation_enabled is not None: + self.catalog_obfuscation_enabled = catalog_obfuscation_enabled + if flow_auto_save_enabled is not None: + self.flow_auto_save_enabled = flow_auto_save_enabled + if web_extraction_enabled is not None: + self.web_extraction_enabled = web_extraction_enabled + if metrics_content_type_enabled is not None: + self.metrics_content_type_enabled = metrics_content_type_enabled + if notify_site_admins_on_throttle is not None: + self.notify_site_admins_on_throttle = notify_site_admins_on_throttle + if authoring_enabled is not None: + self.authoring_enabled = authoring_enabled + if custom_subscription_email_enabled is not None: + self.custom_subscription_email_enabled = custom_subscription_email_enabled + if custom_subscription_email is not None: + self.custom_subscription_email = custom_subscription_email + if custom_subscription_footer_enabled is not None: + self.custom_subscription_footer_enabled = custom_subscription_footer_enabled + if custom_subscription_footer is not None: + self.custom_subscription_footer = custom_subscription_footer + if ask_data_mode is not None: + self.ask_data_mode = ask_data_mode + if named_sharing_enabled is not None: + self.named_sharing_enabled = named_sharing_enabled + if mobile_biometrics_enabled is not None: + self.mobile_biometrics_enabled = mobile_biometrics_enabled + if sheet_image_enabled is not None: + self.sheet_image_enabled = sheet_image_enabled + if derived_permissions_enabled is not None: + self.derived_permissions_enabled = derived_permissions_enabled + if user_visibility_mode is not None: + self.user_visibility_mode = user_visibility_mode + if use_default_time_zone is not None: + self.use_default_time_zone = use_default_time_zone + if time_zone is not None: + self.time_zone = time_zone + if auto_suspend_refresh_enabled is not None: + self.auto_suspend_refresh_enabled = auto_suspend_refresh_enabled + if auto_suspend_refresh_inactivity_window is not None: + self.auto_suspend_refresh_inactivity_window = auto_suspend_refresh_inactivity_window @classmethod def from_response(cls, resp, ns): @@ -215,14 +652,34 @@ def from_response(cls, resp, ns): for site_xml in all_site_xml: (id, name, content_url, status_reason, admin_mode, state, subscribe_others_enabled, disable_subscriptions, revision_history_enabled, user_quota, storage_quota, - revision_limit, num_users, storage, data_acceleration_mode, flows_enabled, - cataloging_enabled) = cls._parse_element(site_xml, ns) + revision_limit, num_users, storage, data_acceleration_mode, flows_enabled, cataloging_enabled, + editing_flows_enabled, scheduling_flows_enabled, allow_subscription_attachments, guest_access_enabled, + cache_warmup_enabled, commenting_enabled, extract_encryption_mode, request_access_enabled, + run_now_enabled, tier_explorer_capacity, tier_creator_capacity, tier_viewer_capacity, + data_alerts_enabled, commenting_mentions_enabled, catalog_obfuscation_enabled, flow_auto_save_enabled, + web_extraction_enabled, metrics_content_type_enabled, notify_site_admins_on_throttle, + authoring_enabled, custom_subscription_email_enabled, custom_subscription_email, + custom_subscription_footer_enabled, custom_subscription_footer, ask_data_mode, named_sharing_enabled, + mobile_biometrics_enabled, sheet_image_enabled, derived_permissions_enabled, user_visibility_mode, + use_default_time_zone, time_zone, auto_suspend_refresh_enabled, + auto_suspend_refresh_inactivity_window) = cls._parse_element(site_xml, ns) site_item = cls(name, content_url) - site_item._set_values(id, name, content_url, status_reason, admin_mode, state, - subscribe_others_enabled, disable_subscriptions, revision_history_enabled, - user_quota, storage_quota, revision_limit, num_users, storage, - data_acceleration_mode, flows_enabled, cataloging_enabled) + site_item._set_values(id, name, content_url, status_reason, admin_mode, state, subscribe_others_enabled, + disable_subscriptions, revision_history_enabled, user_quota, storage_quota, + revision_limit, num_users, storage, data_acceleration_mode, flows_enabled, + cataloging_enabled, editing_flows_enabled, scheduling_flows_enabled, + allow_subscription_attachments, guest_access_enabled, cache_warmup_enabled, + commenting_enabled, extract_encryption_mode, request_access_enabled, run_now_enabled, + tier_explorer_capacity, tier_creator_capacity, tier_viewer_capacity, + data_alerts_enabled, commenting_mentions_enabled, catalog_obfuscation_enabled, + flow_auto_save_enabled, web_extraction_enabled, metrics_content_type_enabled, + notify_site_admins_on_throttle, authoring_enabled, custom_subscription_email_enabled, + custom_subscription_email, custom_subscription_footer_enabled, + custom_subscription_footer, ask_data_mode, named_sharing_enabled, + mobile_biometrics_enabled, sheet_image_enabled, derived_permissions_enabled, + user_visibility_mode, use_default_time_zone, time_zone, auto_suspend_refresh_enabled, + auto_suspend_refresh_inactivity_window) all_site_items.append(site_item) return all_site_items @@ -237,6 +694,48 @@ def _parse_element(site_xml, ns): subscribe_others_enabled = string_to_bool(site_xml.get('subscribeOthersEnabled', '')) disable_subscriptions = string_to_bool(site_xml.get('disableSubscriptions', '')) revision_history_enabled = string_to_bool(site_xml.get('revisionHistoryEnabled', '')) + editing_flows_enabled = string_to_bool(site_xml.get('editingFlowsEnabled', '')) + scheduling_flows_enabled = string_to_bool(site_xml.get('schedulingFlowsEnabled', '')) + allow_subscription_attachments = string_to_bool(site_xml.get('allowSubscriptionAttachments', '')) + guest_access_enabled = string_to_bool(site_xml.get('guestAccessEnabled', '')) + cache_warmup_enabled = string_to_bool(site_xml.get('cacheWarmupEnabled', '')) + commenting_enabled = string_to_bool(site_xml.get('commentingEnabled', '')) + extract_encryption_mode = site_xml.get('extractEncryptionMode', None) + request_access_enabled = string_to_bool(site_xml.get('requestAccessEnabled', '')) + run_now_enabled = string_to_bool(site_xml.get('runNowEnabled', '')) + tier_explorer_capacity = site_xml.get('tierExplorerCapacity', None) + if tier_explorer_capacity: + tier_explorer_capacity = int(tier_explorer_capacity) + tier_creator_capacity = site_xml.get('tierCreatorCapacity', None) + if tier_creator_capacity: + tier_creator_capacity = int(tier_creator_capacity) + tier_viewer_capacity = site_xml.get('tierViewerCapacity', None) + if tier_viewer_capacity: + tier_viewer_capacity = int(tier_viewer_capacity) + data_alerts_enabled = string_to_bool(site_xml.get('dataAlertsEnabled', '')) + commenting_mentions_enabled = string_to_bool(site_xml.get('commentingMentionsEnabled', '')) + catalog_obfuscation_enabled = string_to_bool(site_xml.get('catalogObfuscationEnabled', '')) + flow_auto_save_enabled = string_to_bool(site_xml.get('flowAutoSaveEnabled', '')) + web_extraction_enabled = string_to_bool(site_xml.get('webExtractionEnabled', '')) + metrics_content_type_enabled = string_to_bool(site_xml.get('metricsContentTypeEnabled', '')) + notify_site_admins_on_throttle = string_to_bool(site_xml.get('notifySiteAdminsOnThrottle', '')) + authoring_enabled = string_to_bool(site_xml.get('authoringEnabled', '')) + custom_subscription_email_enabled = string_to_bool(site_xml.get('customSubscriptionEmailEnabled', '')) + custom_subscription_email = site_xml.get('customSubscriptionEmail', None) + custom_subscription_footer_enabled = string_to_bool(site_xml.get('customSubscriptionFooterEnabled', '')) + custom_subscription_footer = site_xml.get('customSubscriptionFooter', None) + ask_data_mode = site_xml.get('askDataMode', None) + named_sharing_enabled = string_to_bool(site_xml.get('namedSharingEnabled', '')) + mobile_biometrics_enabled = string_to_bool(site_xml.get('mobileBiometricsEnabled', '')) + sheet_image_enabled = string_to_bool(site_xml.get('sheetImageEnabled', '')) + derived_permissions_enabled = string_to_bool(site_xml.get('derivedPermissionsEnabled', '')) + user_visibility_mode = site_xml.get('userVisibilityMode', '') + use_default_time_zone = string_to_bool(site_xml.get('useDefaultTimeZone', '')) + time_zone = site_xml.get('timeZone', None) + auto_suspend_refresh_enabled = string_to_bool(site_xml.get('autoSuspendRefreshEnabled', '')) + auto_suspend_refresh_inactivity_window = site_xml.get('autoSuspendRefreshInactivityWindow', None) + if auto_suspend_refresh_inactivity_window: + auto_suspend_refresh_inactivity_window = int(auto_suspend_refresh_inactivity_window) user_quota = site_xml.get('userQuota', None) if user_quota: @@ -264,7 +763,16 @@ def _parse_element(site_xml, ns): return id, name, content_url, status_reason, admin_mode, state, subscribe_others_enabled,\ disable_subscriptions, revision_history_enabled, user_quota, storage_quota,\ - revision_limit, num_users, storage, data_acceleration_mode, flows_enabled, cataloging_enabled + revision_limit, num_users, storage, data_acceleration_mode, flows_enabled, cataloging_enabled,\ + editing_flows_enabled, scheduling_flows_enabled, allow_subscription_attachments, guest_access_enabled,\ + cache_warmup_enabled, commenting_enabled, extract_encryption_mode, request_access_enabled, run_now_enabled,\ + tier_explorer_capacity, tier_creator_capacity, tier_viewer_capacity, data_alerts_enabled,\ + commenting_mentions_enabled, catalog_obfuscation_enabled, flow_auto_save_enabled, web_extraction_enabled,\ + metrics_content_type_enabled, notify_site_admins_on_throttle, authoring_enabled,\ + custom_subscription_email_enabled, custom_subscription_email, custom_subscription_footer_enabled,\ + custom_subscription_footer, ask_data_mode, named_sharing_enabled, mobile_biometrics_enabled,\ + sheet_image_enabled, derived_permissions_enabled, user_visibility_mode, use_default_time_zone, time_zone,\ + auto_suspend_refresh_enabled, auto_suspend_refresh_inactivity_window # Used to convert string represented boolean to a boolean type diff --git a/tableauserverclient/server/request_factory.py b/tableauserverclient/server/request_factory.py index 2325a52de..03ede71d3 100644 --- a/tableauserverclient/server/request_factory.py +++ b/tableauserverclient/server/request_factory.py @@ -461,7 +461,7 @@ def update_req(self, site_item): 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 is not None: + if site_item.revision_history_enabled is not None: site_element.attrib['revisionHistoryEnabled'] = str(site_item.revision_history_enabled).lower() if site_item.data_acceleration_mode is not None: site_element.attrib['dataAccelerationMode'] = str(site_item.data_acceleration_mode).lower() @@ -469,6 +469,78 @@ def update_req(self, site_item): site_element.attrib['flowsEnabled'] = str(site_item.flows_enabled).lower() if site_item.cataloging_enabled is not None: site_element.attrib['catalogingEnabled'] = str(site_item.cataloging_enabled).lower() + if site_item.editing_flows_enabled is not None: + site_element.attrib['editingFlowsEnabled'] = str(site_item.editing_flows_enabled).lower() + if site_item.scheduling_flows_enabled is not None: + site_element.attrib['schedulingFlowsEnabled'] = str(site_item.scheduling_flows_enabled).lower() + if site_item.allow_subscription_attachments is not None: + site_element.attrib['allowSubscriptionAttachments'] = str(site_item.allow_subscription_attachments).lower() + if site_item.guest_access_enabled is not None: + site_element.attrib['guestAccessEnabled'] = str(site_item.guest_access_enabled).lower() + if site_item.cache_warmup_enabled is not None: + site_element.attrib['cacheWarmupEnabled'] = str(site_item.cache_warmup_enabled).lower() + if site_item.commenting_enabled is not None: + site_element.attrib['commentingEnabled'] = str(site_item.commenting_enabled).lower() + if site_item.extract_encryption_mode is not None: + site_element.attrib['extractEncryptionMode'] = str(site_item.extract_encryption_mode).lower() + if site_item.request_access_enabled is not None: + site_element.attrib['requestAccessEnabled'] = str(site_item.request_access_enabled).lower() + if site_item.run_now_enabled is not None: + site_element.attrib['runNowEnabled'] = str(site_item.run_now_enabled).lower() + if site_item.tier_creator_capacity is not None: + site_element.attrib['tierCreatorCapacity'] = str(site_item.tier_creator_capacity).lower() + if site_item.tier_explorer_capacity is not None: + site_element.attrib['tierExplorerCapacity'] = str(site_item.tier_explorer_capacity).lower() + if site_item.tier_viewer_capacity is not None: + site_element.attrib['tierViewerCapacity'] = str(site_item.tier_viewer_capacity).lower() + if site_item.data_alerts_enabled is not None: + site_element.attrib['dataAlertsEnabled'] = str(site_item.data_alerts_enabled) + if site_item.commenting_mentions_enabled is not None: + site_element.attrib['commentingMentionsEnabled'] = str(site_item.commenting_mentions_enabled).lower() + if site_item.catalog_obfuscation_enabled is not None: + site_element.attrib['catalogObfuscationEnabled'] = str(site_item.catalog_obfuscation_enabled).lower() + if site_item.flow_auto_save_enabled is not None: + site_element.attrib['flowAutoSaveEnabled'] = str(site_item.flow_auto_save_enabled).lower() + if site_item.web_extraction_enabled is not None: + site_element.attrib['webExtractionEnabled'] = str(site_item.web_extraction_enabled).lower() + if site_item.metrics_content_type_enabled is not None: + site_element.attrib['metricsContentTypeEnabled'] = str(site_item.metrics_content_type_enabled).lower() + if site_item.notify_site_admins_on_throttle is not None: + site_element.attrib['notifySiteAdminsOnThrottle'] = str(site_item.notify_site_admins_on_throttle).lower() + if site_item.authoring_enabled is not None: + site_element.attrib['authoringEnabled'] = str(site_item.authoring_enabled).lower() + if site_item.custom_subscription_email_enabled is not None: + site_element.attrib['customSubscriptionEmailEnabled'] = \ + str(site_item.custom_subscription_email_enabled).lower() + if site_item.custom_subscription_email is not None: + site_element.attrib['customSubscriptionEmail'] = str(site_item.custom_subscription_email).lower() + if site_item.custom_subscription_footer_enabled is not None: + site_element.attrib['customSubscriptionFooterEnabled'] =\ + str(site_item.custom_subscription_footer_enabled).lower() + if site_item.custom_subscription_footer is not None: + site_element.attrib['customSubscriptionFooter'] = str(site_item.custom_subscription_footer).lower() + if site_item.ask_data_mode is not None: + site_element.attrib['askDataMode'] = str(site_item.ask_data_mode) + if site_item.named_sharing_enabled is not None: + site_element.attrib['namedSharingEnabled'] = str(site_item.named_sharing_enabled).lower() + if site_item.mobile_biometrics_enabled is not None: + site_element.attrib['mobileBiometricsEnabled'] = str(site_item.mobile_biometrics_enabled).lower() + if site_item.sheet_image_enabled is not None: + site_element.attrib['sheetImageEnabled'] = str(site_item.sheet_image_enabled).lower() + if site_item.derived_permissions_enabled is not None: + site_element.attrib['derivedPermissionsEnabled'] = str(site_item.derived_permissions_enabled).lower() + if site_item.user_visibility_mode is not None: + site_element.attrib['userVisibilityMode'] = str(site_item.user_visibility_mode) + if site_item.use_default_time_zone is not None: + site_element.attrib['useDefaultTimeZone'] = str(site_item.use_default_time_zone).lower() + if site_item.time_zone is not None: + site_element.attrib['timeZone'] = str(site_item.time_zone) + if site_item.auto_suspend_refresh_enabled is not None: + site_element.attrib['autoSuspendRefreshEnabled'] = str(site_item.auto_suspend_refresh_enabled).lower() + if site_item.auto_suspend_refresh_inactivity_window is not None: + site_element.attrib['autoSuspendRefreshInactivityWindow'] =\ + str(site_item.auto_suspend_refresh_inactivity_window) + return ET.tostring(xml_request) def create_req(self, site_item): @@ -484,10 +556,90 @@ def create_req(self, site_item): site_element.attrib['storageQuota'] = str(site_item.storage_quota) if site_item.disable_subscriptions is not None: site_element.attrib['disableSubscriptions'] = str(site_item.disable_subscriptions).lower() + if site_item.subscribe_others_enabled is not None: + 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.data_acceleration_mode is not None: + site_element.attrib['dataAccelerationMode'] = str(site_item.data_acceleration_mode).lower() if site_item.flows_enabled is not None: site_element.attrib['flowsEnabled'] = str(site_item.flows_enabled).lower() + if site_item.editing_flows_enabled is not None: + site_element.attrib['editingFlowsEnabled'] = str(site_item.editing_flows_enabled).lower() + if site_item.scheduling_flows_enabled is not None: + site_element.attrib['schedulingFlowsEnabled'] = str(site_item.scheduling_flows_enabled).lower() + if site_item.allow_subscription_attachments is not None: + site_element.attrib['allowSubscriptionAttachments'] = str(site_item.allow_subscription_attachments).lower() + if site_item.guest_access_enabled is not None: + site_element.attrib['guestAccessEnabled'] = str(site_item.guest_access_enabled).lower() + if site_item.cache_warmup_enabled is not None: + site_element.attrib['cacheWarmupEnabled'] = str(site_item.cache_warmup_enabled).lower() + if site_item.commenting_enabled is not None: + site_element.attrib['commentingEnabled'] = str(site_item.commenting_enabled).lower() + if site_item.revision_history_enabled is not None: + site_element.attrib['revisionHistoryEnabled'] = str(site_item.revision_history_enabled).lower() + if site_item.extract_encryption_mode is not None: + site_element.attrib['extractEncryptionMode'] = str(site_item.extract_encryption_mode).lower() + if site_item.request_access_enabled is not None: + site_element.attrib['requestAccessEnabled'] = str(site_item.request_access_enabled).lower() + if site_item.run_now_enabled is not None: + site_element.attrib['runNowEnabled'] = str(site_item.run_now_enabled).lower() + if site_item.tier_creator_capacity is not None: + site_element.attrib['tierCreatorCapacity'] = str(site_item.tier_creator_capacity).lower() + if site_item.tier_explorer_capacity is not None: + site_element.attrib['tierExplorerCapacity'] = str(site_item.tier_explorer_capacity).lower() + if site_item.tier_viewer_capacity is not None: + site_element.attrib['tierViewerCapacity'] = str(site_item.tier_viewer_capacity).lower() + if site_item.data_alerts_enabled is not None: + site_element.attrib['dataAlertsEnabled'] = str(site_item.data_alerts_enabled).lower() + if site_item.commenting_mentions_enabled is not None: + site_element.attrib['commentingMentionsEnabled'] = str(site_item.commenting_mentions_enabled).lower() + if site_item.catalog_obfuscation_enabled is not None: + site_element.attrib['catalogObfuscationEnabled'] = str(site_item.catalog_obfuscation_enabled).lower() + if site_item.flow_auto_save_enabled is not None: + site_element.attrib['flowAutoSaveEnabled'] = str(site_item.flow_auto_save_enabled).lower() + if site_item.web_extraction_enabled is not None: + site_element.attrib['webExtractionEnabled'] = str(site_item.web_extraction_enabled).lower() + if site_item.metrics_content_type_enabled is not None: + site_element.attrib['metricsContentTypeEnabled'] = str(site_item.metrics_content_type_enabled).lower() + if site_item.notify_site_admins_on_throttle is not None: + site_element.attrib['notifySiteAdminsOnThrottle'] = str(site_item.notify_site_admins_on_throttle).lower() + if site_item.authoring_enabled is not None: + site_element.attrib['authoringEnabled'] = str(site_item.authoring_enabled).lower() + if site_item.custom_subscription_email_enabled is not None: + site_element.attrib['customSubscriptionEmailEnabled'] =\ + str(site_item.custom_subscription_email_enabled).lower() + if site_item.custom_subscription_email is not None: + site_element.attrib['customSubscriptionEmail'] = str(site_item.custom_subscription_email).lower() + if site_item.custom_subscription_footer_enabled is not None: + site_element.attrib['customSubscriptionFooterEnabled'] =\ + str(site_item.custom_subscription_footer_enabled).lower() + if site_item.custom_subscription_footer is not None: + site_element.attrib['customSubscriptionFooter'] = str(site_item.custom_subscription_footer).lower() + if site_item.ask_data_mode is not None: + site_element.attrib['askDataMode'] = str(site_item.ask_data_mode) + if site_item.named_sharing_enabled is not None: + site_element.attrib['namedSharingEnabled'] = str(site_item.named_sharing_enabled).lower() + if site_item.mobile_biometrics_enabled is not None: + site_element.attrib['mobileBiometricsEnabled'] = str(site_item.mobile_biometrics_enabled).lower() + if site_item.sheet_image_enabled is not None: + site_element.attrib['sheetImageEnabled'] = str(site_item.sheet_image_enabled).lower() if site_item.cataloging_enabled is not None: site_element.attrib['catalogingEnabled'] = str(site_item.cataloging_enabled).lower() + if site_item.derived_permissions_enabled is not None: + site_element.attrib['derivedPermissionsEnabled'] = str(site_item.derived_permissions_enabled).lower() + if site_item.user_visibility_mode is not None: + site_element.attrib['userVisibilityMode'] = str(site_item.user_visibility_mode) + if site_item.use_default_time_zone is not None: + site_element.attrib['useDefaultTimeZone'] = str(site_item.use_default_time_zone).lower() + if site_item.time_zone is not None: + site_element.attrib['timeZone'] = str(site_item.time_zone) + if site_item.auto_suspend_refresh_enabled is not None: + site_element.attrib['autoSuspendRefreshEnabled'] = str(site_item.auto_suspend_refresh_enabled).lower() + if site_item.auto_suspend_refresh_inactivity_window is not None: + site_element.attrib['autoSuspendRefreshInactivityWindow'] =\ + str(site_item.auto_suspend_refresh_inactivity_window) + return ET.tostring(xml_request) diff --git a/test/assets/site_create.xml b/test/assets/site_create.xml index 9fafb5f02..9d9c4a009 100644 --- a/test/assets/site_create.xml +++ b/test/assets/site_create.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/test/assets/site_get.xml b/test/assets/site_get.xml index e3c7a781c..7ffa91eb7 100644 --- a/test/assets/site_get.xml +++ b/test/assets/site_get.xml @@ -2,7 +2,7 @@ - - + + \ No newline at end of file diff --git a/test/assets/site_get_by_id.xml b/test/assets/site_get_by_id.xml index 98bc3e4e6..a47703fb6 100644 --- a/test/assets/site_get_by_id.xml +++ b/test/assets/site_get_by_id.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/test/assets/site_get_by_name.xml b/test/assets/site_get_by_name.xml index 5b3042e61..852f9594f 100644 --- a/test/assets/site_get_by_name.xml +++ b/test/assets/site_get_by_name.xml @@ -1,5 +1,4 @@ - + \ No newline at end of file diff --git a/test/assets/site_update.xml b/test/assets/site_update.xml index 30e434373..dbb166de1 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 a06876e2a..8fbb4eda3 100644 --- a/test/test_site.py +++ b/test/test_site.py @@ -36,13 +36,30 @@ def test_get(self): self.assertEqual('ContentOnly', all_sites[0].admin_mode) self.assertEqual(False, all_sites[0].revision_history_enabled) self.assertEqual(True, all_sites[0].subscribe_others_enabled) - + self.assertEqual(25, all_sites[0].revision_limit) + self.assertEqual(None, all_sites[0].num_users) + self.assertEqual(None, all_sites[0].storage) + self.assertEqual(True, all_sites[0].cataloging_enabled) + self.assertEqual(False, all_sites[0].editing_flows_enabled) + self.assertEqual(False, all_sites[0].scheduling_flows_enabled) + self.assertEqual(True, all_sites[0].allow_subscription_attachments) self.assertEqual('6b7179ba-b82b-4f0f-91ed-812074ac5da6', all_sites[1].id) self.assertEqual('Active', all_sites[1].state) self.assertEqual('Samples', all_sites[1].name) self.assertEqual('ContentOnly', all_sites[1].admin_mode) self.assertEqual(False, all_sites[1].revision_history_enabled) self.assertEqual(True, all_sites[1].subscribe_others_enabled) + self.assertEqual(False, all_sites[1].guest_access_enabled) + self.assertEqual(True, all_sites[1].cache_warmup_enabled) + self.assertEqual(True, all_sites[1].commenting_enabled) + self.assertEqual(True, all_sites[1].cache_warmup_enabled) + self.assertEqual(False, all_sites[1].request_access_enabled) + self.assertEqual(True, all_sites[1].run_now_enabled) + self.assertEqual(1, all_sites[1].tier_explorer_capacity) + self.assertEqual(2, all_sites[1].tier_creator_capacity) + self.assertEqual(1, all_sites[1].tier_viewer_capacity) + self.assertEqual(False, all_sites[1].flows_enabled) + self.assertEqual(None, all_sites[1].data_acceleration_mode) def test_get_before_signin(self): self.server._auth_token = None @@ -62,6 +79,9 @@ def test_get_by_id(self): self.assertEqual(False, single_site.revision_history_enabled) self.assertEqual(True, single_site.subscribe_others_enabled) self.assertEqual(False, single_site.disable_subscriptions) + self.assertEqual(False, single_site.data_alerts_enabled) + self.assertEqual(False, single_site.commenting_mentions_enabled) + self.assertEqual(True, single_site.catalog_obfuscation_enabled) def test_get_by_id_missing_id(self): self.assertRaises(ValueError, self.server.sites.get_by_id, '') @@ -93,7 +113,18 @@ def test_update(self): admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers, user_quota=15, storage_quota=1000, disable_subscriptions=True, revision_history_enabled=False, - data_acceleration_mode='disable') + data_acceleration_mode='disable', flow_auto_save_enabled=True, + web_extraction_enabled=False, metrics_content_type_enabled=True, + notify_site_admins_on_throttle=False, authoring_enabled=True, + custom_subscription_email_enabled=True, + custom_subscription_email='test@test.com', + custom_subscription_footer_enabled=True, + custom_subscription_footer='example_footer', ask_data_mode='EnabledByDefault', + named_sharing_enabled=False, mobile_biometrics_enabled=True, + sheet_image_enabled=False, derived_permissions_enabled=True, + user_visibility_mode='FULL', use_default_time_zone=False, + time_zone='America/Los_Angeles', auto_suspend_refresh_enabled=True, + auto_suspend_refresh_inactivity_window=55) single_site._id = '6b7179ba-b82b-4f0f-91ed-812074ac5da6' single_site = self.server.sites.update(single_site) @@ -109,6 +140,25 @@ def test_update(self): self.assertEqual('disable', single_site.data_acceleration_mode) self.assertEqual(True, single_site.flows_enabled) self.assertEqual(True, single_site.cataloging_enabled) + self.assertEqual(True, single_site.flow_auto_save_enabled) + self.assertEqual(False, single_site.web_extraction_enabled) + self.assertEqual(True, single_site.metrics_content_type_enabled) + self.assertEqual(False, single_site.notify_site_admins_on_throttle) + self.assertEqual(True, single_site.authoring_enabled) + self.assertEqual(True, single_site.custom_subscription_email_enabled) + self.assertEqual('test@test.com', single_site.custom_subscription_email) + self.assertEqual(True, single_site.custom_subscription_footer_enabled) + self.assertEqual('example_footer', single_site.custom_subscription_footer) + self.assertEqual('EnabledByDefault', single_site.ask_data_mode) + self.assertEqual(False, single_site.named_sharing_enabled) + self.assertEqual(True, single_site.mobile_biometrics_enabled) + self.assertEqual(False, single_site.sheet_image_enabled) + self.assertEqual(True, single_site.derived_permissions_enabled) + self.assertEqual('FULL', single_site.user_visibility_mode) + self.assertEqual(False, single_site.use_default_time_zone) + self.assertEqual('America/Los_Angeles', single_site.time_zone) + self.assertEqual(True, single_site.auto_suspend_refresh_enabled) + self.assertEqual(55, single_site.auto_suspend_refresh_inactivity_window) def test_update_missing_id(self): single_site = TSC.SiteItem('test', 'test')