Skip to content

Commit 40d767c

Browse files
authored
create single Credentials class (#1032)
Included redacted print methods for each credential type
1 parent 3d81e00 commit 40d767c

File tree

3 files changed

+53
-43
lines changed

3 files changed

+53
-43
lines changed

tableauserverclient/models/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,14 @@
2222
from .metric_item import MetricItem
2323
from .pagination_item import PaginationItem
2424
from .permissions_item import PermissionsRule, Permission
25-
from .personal_access_token_auth import PersonalAccessTokenAuth
26-
from .personal_access_token_auth import PersonalAccessTokenAuth
2725
from .project_item import ProjectItem
2826
from .revision_item import RevisionItem
2927
from .schedule_item import ScheduleItem
3028
from .server_info_item import ServerInfoItem
3129
from .site_item import SiteItem
3230
from .subscription_item import SubscriptionItem
3331
from .table_item import TableItem
34-
from .tableau_auth import TableauAuth
32+
from .tableau_auth import Credentials, TableauAuth, PersonalAccessTokenAuth
3533
from .target import Target
3634
from .task_item import TaskItem
3735
from .user_item import UserItem

tableauserverclient/models/personal_access_token_auth.py

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 52 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,70 @@
1-
class TableauAuth(object):
1+
class Credentials:
2+
def __init__(self, site_id=None, user_id_to_impersonate=None):
3+
self.site_id = site_id or ""
4+
self.user_id_to_impersonate = user_id_to_impersonate or None
5+
6+
@property
7+
def credentials(self):
8+
credentials = "Credentials can be username/password, Personal Access Token, or JWT"
9+
+"This method returns values to set as an attribute on the credentials element of the request"
10+
11+
def __repr__(self):
12+
display = "All Credentials types must have a debug display that does not print secrets"
13+
14+
15+
def deprecate_site_attribute():
16+
import warnings
17+
18+
warnings.warn(
19+
"TableauAuth(..., site=...) is deprecated, " "please use TableauAuth(..., site_id=...) instead.",
20+
DeprecationWarning,
21+
)
22+
23+
24+
# The traditional auth type: username/password
25+
class TableauAuth(Credentials):
226
def __init__(self, username, password, site=None, site_id=None, user_id_to_impersonate=None):
327
if site is not None:
4-
import warnings
5-
6-
warnings.warn(
7-
"TableauAuth(..., site=...) is deprecated, " "please use TableauAuth(..., site_id=...) instead.",
8-
DeprecationWarning,
9-
)
28+
deprecate_site_attribute()
1029
site_id = site
30+
super().__init__(site_id, user_id_to_impersonate)
1131
if password is None:
1232
raise TabError("Must provide a password when using traditional authentication")
13-
14-
self.user_id_to_impersonate = user_id_to_impersonate
1533
self.password = password
16-
self.site_id = site_id if site_id is not None else ""
1734
self.username = username
1835

1936
@property
20-
def site(self):
21-
import warnings
37+
def credentials(self):
38+
return {"name": self.username, "password": self.password}
2239

23-
warnings.warn(
24-
"TableauAuth.site is deprecated, use TableauAuth.site_id instead.",
25-
DeprecationWarning,
26-
)
40+
def __repr__(self):
41+
return "<Credentials username={} password={}>".format(self.username, "<redacted>")
42+
43+
@property
44+
def site(self):
45+
deprecate_site_attribute()
2746
return self.site_id
2847

2948
@site.setter
3049
def site(self, value):
31-
import warnings
32-
33-
warnings.warn(
34-
"TableauAuth.site is deprecated, use TableauAuth.site_id instead.",
35-
DeprecationWarning,
36-
)
50+
deprecate_site_attribute()
3751
self.site_id = value
3852

53+
54+
class PersonalAccessTokenAuth(Credentials):
55+
def __init__(self, token_name, personal_access_token, site_id=None):
56+
super().__init__(site_id=site_id)
57+
self.token_name = token_name
58+
self.personal_access_token = personal_access_token
59+
3960
@property
4061
def credentials(self):
41-
return {"name": self.username, "password": self.password}
62+
return {
63+
"personalAccessTokenName": self.token_name,
64+
"personalAccessTokenSecret": self.personal_access_token,
65+
}
66+
67+
def __repr__(self):
68+
return "<PersonalAccessToken name={} token={} site={}>".format(
69+
self.token_name, self.personal_access_token[:2] + "...", self.site_id
70+
)

0 commit comments

Comments
 (0)