Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 22 additions & 10 deletions tableauserverclient/models/tableau_auth.py
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
import abc
from typing import Dict, Optional


class Credentials(abc.ABC):
def __init__(self, site_id=None, user_id_to_impersonate=None):
def __init__(self, site_id: Optional[str] = None, user_id_to_impersonate: Optional[str] = None) -> None:
self.site_id = site_id or ""
self.user_id_to_impersonate = user_id_to_impersonate or None

@property
@abc.abstractmethod
def credentials(self):
credentials = "Credentials can be username/password, Personal Access Token, or JWT"
+"This method returns values to set as an attribute on the credentials element of the request"
def credentials(self) -> Dict[str, str]:
credentials = (
"Credentials can be username/password, Personal Access Token, or JWT"
"This method returns values to set as an attribute on the credentials element of the request"
)
return{"key": "value"}

@abc.abstractmethod
def __repr__(self):
Expand All@@ -28,15 +32,17 @@ def deprecate_site_attribute():

# The traditional auth type: username/password
class TableauAuth(Credentials):
def __init__(self, username, password, site_id=None, user_id_to_impersonate=None):
def __init__(
self, username: str, password: str, site_id: Optional[str] = None, user_id_to_impersonate: Optional[str] = None
) -> None:
super().__init__(site_id, user_id_to_impersonate)
if password is None:
raise TabError("Must provide a password when using traditional authentication")
self.password = password
self.username = username

@property
def credentials(self):
def credentials(self) -> Dict[str, str]:
return{"name": self.username, "password": self.password}

def __repr__(self):
Expand All@@ -49,15 +55,21 @@ def __repr__(self):

# A Tableau-generated Personal Access Token
class PersonalAccessTokenAuth(Credentials):
def __init__(self, token_name, personal_access_token, site_id=None, user_id_to_impersonate=None):
def __init__(
self,
token_name: str,
personal_access_token: str,
site_id: Optional[str] = None,
user_id_to_impersonate: Optional[str] = None,
) -> None:
if personal_access_token is None or token_name is None:
raise TabError("Must provide a token and token name when using PAT authentication")
super().__init__(site_id=site_id, user_id_to_impersonate=user_id_to_impersonate)
self.token_name = token_name
self.personal_access_token = personal_access_token

@property
def credentials(self):
def credentials(self) -> Dict[str, str]:
return{
"personalAccessTokenName": self.token_name,
"personalAccessTokenSecret": self.personal_access_token,
Expand All@@ -76,14 +88,14 @@ def __repr__(self):

# A standard JWT generated specifically for Tableau
class JWTAuth(Credentials):
def __init__(self, jwt: str, site_id=None, user_id_to_impersonate=None):
def __init__(self, jwt: str, site_id: Optional[str] = None, user_id_to_impersonate: Optional[str] = None) -> None:
if jwt is None:
raise TabError("Must provide a JWT token when using JWT authentication")
super().__init__(site_id, user_id_to_impersonate)
self.jwt = jwt

@property
def credentials(self):
def credentials(self) -> Dict[str, str]:
return{"jwt": self.jwt}

def __repr__(self):
Expand Down