#python #tableau-api
Вопрос:
Я пытаюсь подключить сервер таблиц с помощью Python и модуля tableauserverclient, но я получаю это сообщение, когда пытаюсь использовать функцию users.get_by_id() .:
File "/usr/local/Caskroom/miniconda/base/envs/bi_reporting_platform/lib/python3.9/site-packages/tableauserverclient/server/endpoint/users_endpoint.py", line 22, in baseurl return "{0}/sites/{1}/users".format(self.parent_srv.baseurl, self.parent_srv.site_id) File "/usr/local/Caskroom/miniconda/base/envs/bi_reporting_platform/lib/python3.9/site-packages/tableauserverclient/server/server.py", line 164, in site_id raise NotSignedInError(error) tableauserverclient.server.exceptions.NotSignedInError: Missing site ID. You must sign in first.
Я не уверен, почему это происходит, но подозреваю, что классу auth_endpoint каким-то образом не удается проанализировать идентификатор сайта по ответу сервера входа. Но почему это так?
Минимальный релевантный фрагмент (я подвергал цензуре имя пользователя и пароль):
tableau_auth = TSC.TableauAuth(<username>, <password>, site_id="") def users_cleanup(threshold_in_days=90, bck_file='removed_users', id_to_update): . . . with dev_server.auth.sign_in(tableau_auth): ... user = dev_server.users.get_by_id(id_to_update) ...
Я хочу подчеркнуть, что этот код отлично работал несколько дней назад. Помочь кому-нибудь?
Ответ №1:
Явное указание пустой строки для site_id
препятствует успешному входу в систему. Если вам нужно значение по умолчанию, пропустите аргумент.
#!/usr/bin/env python3 import tableauserverclient as TSC import pprint pp = pprint.PrettyPrinter(indent=2) # create an auth object tableau_auth = TSC.TableauAuth(<username>, <password>) # create an instance for your server server = TSC.Server('https://tableau.company.com') # call the sign-in method with the auth object with server.auth.sign_in(tableau_auth): all_users, pagination_item = server.users.get() print("nThere are {} user on site: ".format(pagination_item.total_available)) print([user.name for user in all_users]) sample_user = server.users.get_by_id(all_users[0].id) pp.pprint(sample_user)