def get_default_project_id(server, auth_token, site_id):
"""
Returns the project ID for the 'default' project on the Tableau server.
'server' specified server address
'auth_token' authentication token that grants user access to API calls
'site_id' ID of the site that the user is signed into
"""
page_num, page_size = 1, 100 # Default paginating values
# Builds the request
url = server + "/api/{0}/sites/{1}/projects".format(VERSION, site_id)
paged_url = url + "?pageSize={0}&pageNumber={1}".format(page_size, page_num)
server_response = requests.get(paged_url, headers={'x-tableau-auth': auth_token})
_check_status(server_response, 200)
xml_response = ET.fromstring(_encode_for_display(server_response.text))
# Used to determine if more requests are required to find all projects on server
total_projects = int(xml_response.find('t:pagination', namespaces=xmlns).get('totalAvailable'))
max_page = int(math.ceil(total_projects / page_size))
projects = xml_response.findall('.//t:project', namespaces=xmlns)
# Continue querying if more projects exist on the server
for page in range(2, max_page + 1):
paged_url = url + "?pageSize={0}&pageNumber={1}".format(page_size, page)
server_response = requests.get(paged_url, headers={'x-tableau-auth': auth_token})
_check_status(server_response, 200)
xml_response = ET.fromstring(_encode_for_display(server_response.text))
projects.extend(xml_response.findall('.//t:project', namespaces=xmlns))
# Look through all projects to find the 'default' one
for project in projects:
if project.get('name') == 'default' or project.get('name') == 'Default':
return project.get('id')
error = "Project named 'default' was not found in destination site"
raise LookupError(error)
评论列表
文章目录