Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
de61f87
fixed publish mode enums and typos in samples
shinchris Sep 16, 2016
b61f421
Merge pull request #35 from tableau/bugfix-sample-enum
shinchris Sep 16, 2016
4c7a467
Updated all _construct_url() to just @property baseurl
LGraber Sep 27, 2016
36d63c0
Fixed pep8 issue (extra empty line)
LGraber Sep 27, 2016
e9aa592
Add property decorators
LGraber Sep 28, 2016
6897738
Add decorator files
LGraber Sep 28, 2016
1a0b945
Add test cases and combine decorators into one file
Sep 29, 2016
5ead147
Remove * and be explicit on imports
LGraber Sep 29, 2016
48a5f49
Ignore PyCharm related files
LGraber Sep 29, 2016
8c17ecc
Fix Travis errors. Fix error text for property_not_empty
LGraber Sep 29, 2016
05ff9fd
Trying again to fix travis complaints
LGraber Sep 29, 2016
a13d708
Rename property decorators
LGraber Sep 30, 2016
56af4af
Merge pull request #46 from tableau/issue-38
LGraber Sep 30, 2016
ab6b664
Cleaning up samples (#47)
t8y8 Oct 2, 2016
5dbdbee
Adding Schedules Support (#48)
t8y8 Oct 7, 2016
6da2cbe
Minor cleanups in __init__ and ScheduleItem serializer, and a flake8 …
t8y8 Oct 11, 2016
03d26cd
Fix for issue #60 (#61)
t8y8 Oct 15, 2016
4f4112b
Fix for issue #50 Add regex validator to content_url (#64)
t8y8 Oct 18, 2016
02559ab
Making the user list operations a no-op if we haven't populated the l…
Oct 20, 2016
eb91b41
Bugfix 66 add create group basic (#69)
Oct 20, 2016
4b9a86a
merging master into development
Oct 25, 2016
fd59034
Adding contributing doc that was missing from the repo (#74)
Oct 25, 2016
5ac17ec
Pipe password through to Update User (#75)
t8y8 Oct 25, 2016
e1f38a8
Update TableauAuth to speak in site_id rather than just site (#70)
Oct 27, 2016
2f041d1
Add Guest to site role enum (#83)
Kovner Oct 27, 2016
7c41a0a
Add connection credentials (#80)
geordielad Oct 27, 2016
1cbc230
Adding pagination sample (#72)
Oct 28, 2016
a6975db
Implement get server info (#84)
Oct 28, 2016
a4b90ca
Prep version 0.2 (#86)
Oct 28, 2016
6a48ddc
Cleanup duplications (#87)
Oct 28, 2016
101eedb
Fix missing token on requests (#89)
t8y8 Oct 31, 2016
a6d0ede
Implement Pager for auto-paging requests (#90)
t8y8 Oct 31, 2016
b6b0834
Adding changelog for release
Nov 1, 2016
1417564
Incorporating Tyler's feedback
Nov 1, 2016
ee4b36a
oops, scratch that, reverse it: site_id is the right one
Nov 1, 2016
79e9a2a
Merge pull request #92 from tableau/prep-for-0-2
Nov 1, 2016
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
Prev Previous commit
Next Next commit
Updated all _construct_url() to just @Property baseurl
  • Loading branch information
LGraber authored and Russell Hay committed Sep 27, 2016
commit 4c7a46737805970fba76bd4f24b51a7c401a0919
6 changes: 5 additions & 1 deletion tableauserverclient/server/endpoint/auth_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@ def __exit__(self, exc_type, exc_val, exc_tb):

def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.baseurl = "{0}/auth".format(parent_srv.baseurl)
self.parent_srv = parent_srv

@property
def baseurl(self):
return "{0}/auth".format(self.parent_srv.baseurl)


def sign_in(self, auth_req):
url = "{0}/{1}".format(self.baseurl, 'signin')
signin_req = RequestFactory.Auth.signin_req(auth_req)
Expand Down
20 changes: 10 additions & 10 deletions tableauserverclient/server/endpoint/datasources_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@
class Datasources(Endpoint):
def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.baseurl = "{0}/sites/{1}/datasources"
self.parent_srv = parent_srv

def _construct_url(self):
return self.baseurl.format(self.parent_srv.baseurl, self.parent_srv.site_id)
@property
def baseurl(self):
return "{0}/sites/{1}/datasources".format(self.parent_srv.baseurl, self.parent_srv.site_id)

# Get all datasources
def get(self, req_options=None):
logger.info('Querying all datasources on site')
url = self._construct_url()
url = self.baseurl
server_response = self.get_request(url, req_options)
pagination_item = PaginationItem.from_response(server_response.content)
all_datasource_items = DatasourceItem.from_response(server_response.content)
Expand All @@ -39,7 +39,7 @@ def get_by_id(self, datasource_id):
error = "Datasource ID undefined."
raise ValueError(error)
logger.info('Querying single datasource (ID: {0})'.format(datasource_id))
url = "{0}/{1}".format(self._construct_url(), datasource_id)
url = "{0}/{1}".format(self.baseurl, datasource_id)
server_response = self.get_request(url)
return DatasourceItem.from_response(server_response.content)[0]

Expand All @@ -48,7 +48,7 @@ def populate_connections(self, datasource_item):
if not datasource_item.id:
error = 'Datasource item missing ID. Datasource must be retrieved from server first.'
raise MissingRequiredFieldError(error)
url = '{0}/{1}/connections'.format(self._construct_url(), datasource_item.id)
url = '{0}/{1}/connections'.format(self.baseurl, datasource_item.id)
server_response = self.get_request(url)
datasource_item._set_connections(ConnectionItem.from_response(server_response.content))
logger.info('Populated connections for datasource (ID: {0})'.format(datasource_item.id))
Expand All @@ -58,7 +58,7 @@ def delete(self, datasource_id):
if not datasource_id:
error = "Datasource ID undefined."
raise ValueError(error)
url = "{0}/{1}".format(self._construct_url(), datasource_id)
url = "{0}/{1}".format(self.baseurl, datasource_id)
self.delete_request(url)
logger.info('Deleted single datasource (ID: {0})'.format(datasource_id))

Expand All @@ -67,7 +67,7 @@ def download(self, datasource_id, filepath=None):
if not datasource_id:
error = "Datasource ID undefined."
raise ValueError(error)
url = "{0}/{1}/content".format(self._construct_url(), datasource_id)
url = "{0}/{1}/content".format(self.baseurl, datasource_id)
server_response = self.get_request(url)
_, params = cgi.parse_header(server_response.headers['Content-Disposition'])
filename = os.path.basename(params['filename'])
Expand All @@ -86,7 +86,7 @@ def update(self, datasource_item):
if not datasource_item.id:
error = 'Datasource item missing ID. Datasource must be retrieved from server first.'
raise MissingRequiredFieldError(error)
url = "{0}/{1}".format(self._construct_url(), datasource_item.id)
url = "{0}/{1}".format(self.baseurl, datasource_item.id)
update_req = RequestFactory.Datasource.update_req(datasource_item)
server_response = self.put_request(url, update_req)
logger.info('Updated datasource item (ID: {0})'.format(datasource_item.id))
Expand All @@ -113,7 +113,7 @@ def publish(self, datasource_item, file_path, mode):
raise ValueError(error)

# Construct the url with the defined mode
url = "{0}?datasourceType={1}".format(self._construct_url(), file_extension)
url = "{0}?datasourceType={1}".format(self.baseurl, file_extension)
if mode == self.parent_srv.PublishMode.Overwrite or mode == self.parent_srv.PublishMode.Append:
url += '&{0}=true'.format(mode.lower())

Expand Down
10 changes: 5 additions & 5 deletions tableauserverclient/server/endpoint/fileuploads_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
class Fileuploads(Endpoint):
def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.base_url = "{0}/sites/{1}/fileUploads"
self.parent_srv = parent_srv
self.upload_id = ''

def _construct_url(self):
return self.base_url.format(self.parent_srv.baseurl, self.parent_srv.site_id)
@property
def baseurl(self):
return "{0}/sites/{1}/fileUploads".format(self.parent_srv.baseurl, self.parent_srv.site_id)

def initiate(self):
url = self._construct_url()
url = self.baseurl
server_response = self.post_request(url, '')
fileupload_item = FileuploadItem.from_response(server_response.content)
self.upload_id = fileupload_item.upload_session_id
Expand All @@ -33,7 +33,7 @@ def append(self, xml_request, content_type):
if not self.upload_id:
error = "File upload session must be initiated first."
raise MissingRequiredFieldError(error)
url = "{0}/{1}".format(self._construct_url(), self.upload_id)
url = "{0}/{1}".format(self.baseurl, self.upload_id)
server_response = self.put_request(url, xml_request, content_type)
logger.info('Uploading a chunk to session (ID: {0})'.format(self.upload_id))
return FileuploadItem.from_response(server_response.content)
Expand Down
16 changes: 8 additions & 8 deletions tableauserverclient/server/endpoint/groups_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@
class Groups(Endpoint):
def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.baseurl = "{0}/sites/{1}/groups"
self.parent_srv = parent_srv

def _construct_url(self):
return self.baseurl.format(self.parent_srv.baseurl, self.parent_srv.site_id)
@property
def baseurl(self):
return "{0}/sites/{1}/groups".format(self.parent_srv.baseurl, self.parent_srv.site_id)

# Gets all groups
def get(self, req_options=None):
logger.info('Querying all groups on site')
url = self._construct_url()
url = self.baseurl
server_response = self.get_request(url, req_options)
pagination_item = PaginationItem.from_response(server_response.content)
all_group_items = GroupItem.from_response(server_response.content)
Expand All @@ -29,7 +29,7 @@ def populate_users(self, group_item, req_options=None):
if not group_item.id:
error = "Group item missing ID. Group must be retrieved from server first."
raise MissingRequiredFieldError(error)
url = "{0}/{1}/users".format(self._construct_url(), group_item.id)
url = "{0}/{1}/users".format(self.baseurl, group_item.id)
server_response = self.get_request(url, req_options)
group_item._set_users(UserItem.from_response(server_response.content))
pagination_item = PaginationItem.from_response(server_response.content)
Expand All @@ -41,7 +41,7 @@ def delete(self, group_id):
if not group_id:
error = "Group ID undefined."
raise ValueError(error)
url = "{0}/{1}".format(self._construct_url(), group_id)
url = "{0}/{1}".format(self.baseurl, group_id)
self.delete_request(url)
logger.info('Deleted single group (ID: {0})'.format(group_id))

Expand All @@ -54,7 +54,7 @@ def remove_user(self, group_item, user_id):
if not user_id:
error = "User ID undefined."
raise ValueError(error)
url = "{0}/{1}/users/{2}".format(self._construct_url(), group_item.id, user_id)
url = "{0}/{1}/users/{2}".format(self.baseurl, group_item.id, user_id)
self.delete_request(url)
for user in user_set:
if user.id == user_id:
Expand All @@ -71,7 +71,7 @@ def add_user(self, group_item, user_id):
if not user_id:
error = "User ID undefined."
raise ValueError(error)
url = "{0}/{1}/users".format(self._construct_url(), group_item.id)
url = "{0}/{1}/users".format(self.baseurl, group_item.id)
add_req = RequestFactory.Group.add_user_req(user_id)
server_response = self.post_request(url, add_req)
new_user = UserItem.from_response(server_response.content).pop()
Expand Down
14 changes: 7 additions & 7 deletions tableauserverclient/server/endpoint/projects_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
class Projects(Endpoint):
def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.baseurl = "{0}/sites/{1}/projects"
self.parent_srv = parent_srv

def _construct_url(self):
return self.baseurl.format(self.parent_srv.baseurl, self.parent_srv.site_id)
@property
def baseurl(self):
return "{0}/sites/{1}/projects".format(self.parent_srv.baseurl, self.parent_srv.site_id)

def get(self, req_options=None):
logger.info('Querying all projects on site')
url = self._construct_url()
url = self.baseurl
server_response = self.get_request(url, req_options)
pagination_item = PaginationItem.from_response(server_response.content)
all_project_items = ProjectItem.from_response(server_response.content)
Expand All @@ -28,7 +28,7 @@ def delete(self, project_id):
if not project_id:
error = "Project ID undefined."
raise ValueError(error)
url = "{0}/{1}".format(self._construct_url(), project_id)
url = "{0}/{1}".format(self.baseurl, project_id)
self.delete_request(url)
logger.info('Deleted single project (ID: {0})'.format(project_id))

Expand All @@ -37,15 +37,15 @@ def update(self, project_item):
error = "Project item missing ID."
raise MissingRequiredFieldError(error)

url = "{0}/{1}".format(self._construct_url(), project_item.id)
url = "{0}/{1}".format(self.baseurl, project_item.id)
update_req = RequestFactory.Project.update_req(project_item)
server_response = self.put_request(url, update_req)
logger.info('Updated project item (ID: {0})'.format(project_item.id))
updated_project = copy.copy(project_item)
return updated_project._parse_common_tags(server_response.content)

def create(self, project_item):
url = self._construct_url()
url = self.baseurl
create_req = RequestFactory.Project.create_req(project_item)
server_response = self.post_request(url, create_req)
new_project = ProjectItem.from_response(server_response.content)[0]
Expand Down
16 changes: 8 additions & 8 deletions tableauserverclient/server/endpoint/sites_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
class Sites(Endpoint):
def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.baseurl = "{0}/sites"
self.parent_srv = parent_srv

def _construct_url(self):
return self.baseurl.format(self.parent_srv.baseurl)
@property
def baseurl(self):
return "{0}/sites".format(self.parent_srv.baseurl)

# Gets all sites
def get(self, req_options=None):
logger.info('Querying all sites on site')
url = self._construct_url()
url = self.baseurl
server_response = self.get_request(url, req_options)
pagination_item = PaginationItem.from_response(server_response.content)
all_site_items = SiteItem.from_response(server_response.content)
Expand All @@ -31,7 +31,7 @@ def get_by_id(self, site_id):
error = "Site ID undefined."
raise ValueError(error)
logger.info('Querying single site (ID: {0})'.format(site_id))
url = "{0}/{1}".format(self._construct_url(), site_id)
url = "{0}/{1}".format(self.baseurl, site_id)
server_response = self.get_request(url)
return SiteItem.from_response(server_response.content)[0]

Expand All @@ -45,7 +45,7 @@ def update(self, site_item):
error = 'You cannot set admin_mode to ContentOnly and also set a user quota'
raise ValueError(error)

url = "{0}/{1}".format(self._construct_url(), site_item.id)
url = "{0}/{1}".format(self.baseurl, site_item.id)
update_req = RequestFactory.Site.update_req(site_item)
server_response = self.put_request(url, update_req)
logger.info('Updated site item (ID: {0})'.format(site_item.id))
Expand All @@ -57,7 +57,7 @@ def delete(self, site_id):
if not site_id:
error = "Site ID undefined."
raise ValueError(error)
url = "{0}/{1}".format(self._construct_url(), site_id)
url = "{0}/{1}".format(self.baseurl, site_id)
self.delete_request(url)
logger.info('Deleted single site (ID: {0})'.format(site_id))

Expand All @@ -68,7 +68,7 @@ def create(self, site_item):
error = 'You cannot set admin_mode to ContentOnly and also set a user quota'
raise ValueError(error)

url = self._construct_url()
url = self.baseurl
create_req = RequestFactory.Site.create_req(site_item)
server_response = self.post_request(url, create_req)
new_site = SiteItem.from_response(server_response.content)[0]
Expand Down
18 changes: 9 additions & 9 deletions tableauserverclient/server/endpoint/users_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
class Users(Endpoint):
def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.baseurl = "{0}/sites/{1}/users"
self.parent_srv = parent_srv

def _construct_url(self):
return self.baseurl.format(self.parent_srv.baseurl, self.parent_srv.site_id)
@property
def baseurl(self):
return "{0}/sites/{1}/users".format(self.parent_srv.baseurl, self.parent_srv.site_id)

# Gets all users
def get(self, req_options=None):
logger.info('Querying all users on site')
url = self._construct_url()
url = self.baseurl
server_response = self.get_request(url, req_options)
pagination_item = PaginationItem.from_response(server_response.content)
all_user_items = UserItem.from_response(server_response.content)
Expand All @@ -31,7 +31,7 @@ def get_by_id(self, user_id):
error = "User ID undefined."
raise ValueError(error)
logger.info('Querying single user (ID: {0})'.format(user_id))
url = "{0}/{1}".format(self._construct_url(), user_id)
url = "{0}/{1}".format(self.baseurl, user_id)
server_response = self.get_request(url)
return UserItem.from_response(server_response.content).pop()

Expand All @@ -41,7 +41,7 @@ def update(self, user_item):
error = "User item missing ID."
raise MissingRequiredFieldError(error)

url = "{0}/{1}".format(self._construct_url(), user_item.id)
url = "{0}/{1}".format(self.baseurl, user_item.id)
update_req = RequestFactory.User.update_req(user_item)
server_response = self.put_request(url, update_req)
logger.info('Updated user item (ID: {0})'.format(user_item.id))
Expand All @@ -53,13 +53,13 @@ def remove(self, user_id):
if not user_id:
error = "User ID undefined."
raise ValueError(error)
url = "{0}/{1}".format(self._construct_url(), user_id)
url = "{0}/{1}".format(self.baseurl, user_id)
self.delete_request(url)
logger.info('Removed single user (ID: {0})'.format(user_id))

# Add new user to site
def add(self, user_item):
url = self._construct_url()
url = self.baseurl
add_req = RequestFactory.User.add_req(user_item)
server_response = self.post_request(url, add_req)
new_user = UserItem.from_response(server_response.content).pop()
Expand All @@ -71,7 +71,7 @@ def populate_workbooks(self, user_item, req_options=None):
if not user_item.id:
error = "User item missing ID."
raise MissingRequiredFieldError(error)
url = "{0}/{1}/workbooks".format(self._construct_url(), user_item.id)
url = "{0}/{1}/workbooks".format(self.baseurl, user_item.id)
server_response = self.get_request(url, req_options)
logger.info('Populated workbooks for user (ID: {0})'.format(user_item.id))
user_item._set_workbooks(WorkbookItem.from_response(server_response.content))
Expand Down
10 changes: 5 additions & 5 deletions tableauserverclient/server/endpoint/views_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
class Views(Endpoint):
def __init__(self, parent_srv):
super(Endpoint, self).__init__()
self.baseurl = "{0}/sites/{1}"
self.parent_srv = parent_srv

def _construct_url(self):
return self.baseurl.format(self.parent_srv.baseurl, self.parent_srv.site_id)
@property
def baseurl(self):
return "{0}/sites/{1}".format(self.parent_srv.baseurl, self.parent_srv.site_id)

def get(self, req_options=None):
logger.info('Querying all views on site')
url = "{0}/views".format(self._construct_url())
url = "{0}/views".format(self.baseurl)
server_response = self.get_request(url, req_options)
pagination_item = PaginationItem.from_response(server_response.content)
all_view_items = ViewItem.from_response(server_response.content)
Expand All @@ -27,7 +27,7 @@ def populate_preview_image(self, view_item):
if not view_item.id or not view_item.workbook_id:
error = "View item missing ID or workbook ID."
raise MissingRequiredFieldError(error)
url = "{0}/workbooks/{1}/views/{2}/previewImage".format(self._construct_url(),
url = "{0}/workbooks/{1}/views/{2}/previewImage".format(self.baseurl,
view_item.workbook_id,
view_item.id)
server_response = self.get_request(url)
Expand Down
Loading