То, как вы можете связаться с ними, немного раздражает с моей точки зрения. Вам необходимо использовать функцию populate_connections()
для загрузки встроенных источников данных. Было бы проще, если бы вы знали имя рабочей книги.
import tableauserverclient as TSC
#sign in using personal access token
server = TSC.Server(server_address='server_name', use_server_version=True)
server.auth.sign_in_with_personal_access_token(auth_req=TSC.PersonalAccessTokenAuth(token_name='tokenName', personal_access_token='tokenValue', site_id='site_name'))
#use RequestOptions() with a filter to pull an specific workbook
def get_workbook(name):
req_opt = TSC.RequestOptions()
req_opt.filter.add(TSC.Filter(req_opt.Field.Name, req_opt.Operator.Equals, name))
return server.workbooks.get(req_opt)[0][0] #workbooks.get () function is intended to return a list items that you can iterate, but here we are assuming it will be find only one result
workbook = get_workbook(name='workbook_name') #gets the workbook
server.workbooks.populate_connections(workbook) #this function will load all the embedded datasources in the workbook
for datasource in workbook.connections: #iterate in datasource list
#Note: each element of this list is not an TSC.DatabaseItem, so, you will need to load a valid one using the "datasource_id" attribute from the element.
#If you try server.datasources.refresh(datasource) it will fail
ds = server.datasources.get_by_id(datasource.datasource_id) #loads a valid TSC.DatabaseItem
server.datasources.refresh(ds) #finally, you will be able to refresh it
...
Лучше всего не встраивать источники данных, а публиковать sh их независимо.
Обновление: есть простое способ достичь этого. Существует два типа задач извлечения: рабочая книга и источник данных. Таким образом, для встроенных источников данных необходимо выполнить книгу refre sh.
workbook = get_workbook(name='workbook_name')
server.workbooks.refresh(workbook.id)