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 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):