Skip to content

Commit 57fedb9

Browse files
author
Chris Shin
authored
Encode tag-name before deleting (#687)
* Encode tag-name when deleting and improve error handling * Fix view tags to add/delete properly
1 parent 168489c commit 57fedb9

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

tableauserverclient/models/view_item.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from ..datetime_helpers import parse_datetime
33
from .exceptions import UnpopulatedPropertyError
44
from .tag_item import TagItem
5+
import copy
56

67

78
class ViewItem(object):
@@ -158,7 +159,7 @@ def from_xml_element(cls, parsed_response, ns, workbook_id=''):
158159
if tags_elem is not None:
159160
tags = TagItem.from_xml_element(tags_elem, ns)
160161
view_item.tags = tags
161-
view_item._initial_tags = tags
162+
view_item._initial_tags = copy.copy(tags)
162163

163164
all_view_items.append(view_item)
164165
return all_view_items

tableauserverclient/server/endpoint/resource_tagger.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from ...models.tag_item import TagItem
55
import logging
66
import copy
7+
import urllib.parse
78

89
logger = logging.getLogger('tableau.endpoint.resource_tagger')
910

@@ -18,21 +19,23 @@ def _add_tags(self, baseurl, resource_id, tag_set):
1819
server_response = self.put_request(url, add_req)
1920
return TagItem.from_response(server_response.content, self.parent_srv.namespace)
2021
except ServerResponseError as e:
21-
if e.code == "404003":
22+
if e.code == "404008":
2223
error = "Adding tags to this resource type is only available with REST API version 2.6 and later."
2324
raise EndpointUnavailableError(error)
2425
raise # Some other error
2526

2627
# Delete a resource's tag by name
2728
def _delete_tag(self, baseurl, resource_id, tag_name):
28-
url = "{0}/{1}/tags/{2}".format(baseurl, resource_id, tag_name)
29+
encoded_tag_name = urllib.parse.quote(tag_name)
30+
url = "{0}/{1}/tags/{2}".format(baseurl, resource_id, encoded_tag_name)
2931

3032
try:
3133
self.delete_request(url)
3234
except ServerResponseError as e:
33-
if e.code == "404003":
35+
if e.code == "404008":
3436
error = "Deleting tags from this resource type is only available with REST API version 2.6 and later."
3537
raise EndpointUnavailableError(error)
38+
raise # Some other error
3639

3740
# Remove and add tags to match the resource item's tag set
3841
def update_tags(self, baseurl, resource_item):

0 commit comments

Comments
 (0)