-
Notifications
You must be signed in to change notification settings - Fork 447
Description
When migrating from Tableau Server to Tableau Cloud, calling
server.workbooks.update_permissions(target_workbook, PermissionRules)
results in a 400 Bad Request error. The error message indicates that the request body is missing, even though the request payload is properly formatted.
Versions
- Tableau Cloud API version: 3.24
- Python version: 3.12
- TSC library version: 0.36
Sample Code
import tableauserverclient as TSC
from credentials import Credentials
from tableauserverclient.models.reference_item import ResourceReference
SITE = "mySite"
API_TIMEOUT = 120
WORKBOOK_ID = "myWorkbookId"
GROUP_ID = "myGroupId"
tableau_auth = TSC.PersonalAccessTokenAuth(
Credentials.Tableau.token_name, Credentials.Tableau.token, SITE
)
server = TSC.Server(Credentials.Tableau.server, use_server_version=True)
server.add_http_options({"timeout": API_TIMEOUT, "verify": False})
server.auth.sign_in(tableau_auth)
target_workbook = server.workbooks.get_by_id(WORKBOOK_ID)
capabilities = {
TSC.Permission.Capability.Read: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.Filter: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.AddComment: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.ExportImage: TSC.Permission.Mode.Allow,
TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
}
permission = [
TSC.PermissionsRule(
grantee=ResourceReference(id_=GROUP_ID, tag_name="group"),
capabilities=capabilities,
)
]
server.workbooks.update_permissions(target_workbook, permission)Request Payload
PUT /api/3.24/sites/{siteId}/workbooks/{workbookId}/permissions
{
"timeout": 120,
"verify": False,
"headers": {
"x-tableau-auth": "{token}",
"content-type": "text/xml",
"User-Agent": "Tableau Server Client/0.36"
},
"data": b"<tsRequest><permissions><granteeCapabilities>
<group id={groupId} />
<capabilities>
<capability name='Read' mode='Allow' />
<capability name='Filter' mode='Allow' />
<capability name='ViewComments' mode='Allow' />
<capability name='AddComment' mode='Allow' />
<capability name='ExportImage' mode='Allow' />
<capability name='ExportData' mode='Allow' />
</capabilities>
</granteeCapabilities></permissions></tsRequest>"
}Results
400000: Bad Request
Required request body is missing: public com.tableausoftware.api.rest.IRestApiResponse
com.tableausoftware.api.rest.permissions.RestApiPermissionsController.addWorkbookPermissions
(com.tableausoftware.api.rest.util.RestApiVersion,com.tableausoftware.domain.user.IAuthenticatedUser,
java.lang.String,com.tableausoftware.api.rest.viewmodels.TsRequest,javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse) throws java.lang.Exception