From 0212439fbadc169c146673076979d455885cc595 Mon Sep 17 00:00:00 2001 From: Chris Shin Date: Fri, 4 Sep 2020 15:45:48 -0700 Subject: [PATCH 1/2] Encode tag-name when deleting and improve error handling --- tableauserverclient/server/endpoint/resource_tagger.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tableauserverclient/server/endpoint/resource_tagger.py b/tableauserverclient/server/endpoint/resource_tagger.py index d9f925380..ccee9fa10 100644 --- a/tableauserverclient/server/endpoint/resource_tagger.py +++ b/tableauserverclient/server/endpoint/resource_tagger.py @@ -4,6 +4,7 @@ from ...models.tag_item import TagItem import logging import copy +import urllib.parse logger = logging.getLogger('tableau.endpoint.resource_tagger') @@ -18,21 +19,23 @@ def _add_tags(self, baseurl, resource_id, tag_set): server_response = self.put_request(url, add_req) return TagItem.from_response(server_response.content, self.parent_srv.namespace) except ServerResponseError as e: - if e.code == "404003": + if e.code == "404008": error = "Adding tags to this resource type is only available with REST API version 2.6 and later." raise EndpointUnavailableError(error) raise # Some other error # Delete a resource's tag by name def _delete_tag(self, baseurl, resource_id, tag_name): - url = "{0}/{1}/tags/{2}".format(baseurl, resource_id, tag_name) + encoded_tag_name = urllib.parse.quote(tag_name) + url = "{0}/{1}/tags/{2}".format(baseurl, resource_id, encoded_tag_name) try: self.delete_request(url) except ServerResponseError as e: - if e.code == "404003": + if e.code == "404008": error = "Deleting tags from this resource type is only available with REST API version 2.6 and later." raise EndpointUnavailableError(error) + raise # Some other error # Remove and add tags to match the resource item's tag set def update_tags(self, baseurl, resource_item): From ef4a5a0fb18a8331e79e429dd35dbcfc1c229fe9 Mon Sep 17 00:00:00 2001 From: Chris Shin Date: Fri, 4 Sep 2020 15:46:03 -0700 Subject: [PATCH 2/2] Fix view tags to add/delete properly --- tableauserverclient/models/view_item.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tableauserverclient/models/view_item.py b/tableauserverclient/models/view_item.py index 958cef7a2..f9b7a2940 100644 --- a/tableauserverclient/models/view_item.py +++ b/tableauserverclient/models/view_item.py @@ -2,6 +2,7 @@ from ..datetime_helpers import parse_datetime from .exceptions import UnpopulatedPropertyError from .tag_item import TagItem +import copy class ViewItem(object): @@ -158,7 +159,7 @@ def from_xml_element(cls, parsed_response, ns, workbook_id=''): if tags_elem is not None: tags = TagItem.from_xml_element(tags_elem, ns) view_item.tags = tags - view_item._initial_tags = tags + view_item._initial_tags = copy.copy(tags) all_view_items.append(view_item) return all_view_items