Skip to content

server.views.populate_image renders stale image despite usage of maxage param #1234

Closed as not planned

Description

@RobbertvK

Describe the bug
When rendering an image for dashboards that use parameters, the received image is always a stale one. The parameters are sent in using a view filter. The parameters work since the data shown on the dashboard corresponds with the parameters sent in the request.
The option 'maxage' is set in the ImageRequestOptions object and sent with the request together with the imageresolution param. The image rendered is in the highest quality so this indicates that the ImageRequestOptions are received properly.

We have even included a parameter named 'cachebuster' in the dashboards. This parameter was added to make sure the request for the view is alway unique (found this possible solution on one of the forum posts). The value is sent in as a view filter in the request.

Versions
Details of your environment, including:

  • Tableau Server version: 2022.1 / API version 3.15
  • Python version: 3.9
  • TSC library version: 0.25 ("full-revisionid": "e4fbe41560fbd2314c9c7b8b8a169164dd15185f")

To Reproduce
Create dashboard that uses parameters to control the view.
Render images using server.views.populate_image

`import json
import requests
import time
from requests.auth import HTTPBasicAuth
import tableauserverclient as TSC

dashboards = {
"Smulpaap": {
"workbook_id": "workbook_id",
"views": [
{
"filename": "image_name.png",
"id": "view_id",
"filters": [
{"field": "kies locatie key en naam", "value": 1684},
{"field": "kies datum", "value": <current_date>},
],
},
],
},
}

tableau_auth = TSC.TableauAuth(credentials["username"], credentials["password"])
server = TSC.Server("https://server_url", use_server_version=True)

with server.auth.sign_in(tableau_auth) as auth:

for dashboard_item in dashboards.values():

    workbook = server.workbooks.get_by_id(dashboard_item["workbook_id"])

    for view_setting in dashboard_item["views"]:

        image_req_option = TSC.ImageRequestOptions(
            imageresolution=TSC.ImageRequestOptions.Resolution.High, maxage=1
        )

        # add cachebuster filter by default, this sends in a unique guid for the parameter 'cachebuster'
        image_req_option.vf(f"Parameters.cachebuster", <unique_guid>)

        # iterate over the defined filters and set the desired values in the view filter
        if len(view_setting["filters"]) > 0:
            for filter in view_setting["filters"]:
                image_req_option.vf(f"Parameters.{filter['field']}", filter["value"])

        view = server.views.get_by_id(view_setting["id"])
        server.views.populate_image(view_item=view, req_options=image_req_option)

        # store image in aws s3 bucket
        client.put_object(
            Body=view.image,
            Bucket=get_env("imageBucket"),
            Key=filename,
            ContentType="image/png",
            CacheControl="no-cache",
        )`

Results
No errors are received but the image stored is a stale one. It never gets refreshed although the dashboard itself is refreshed every 15 minutes.

NOTE: Be careful not to post user names, passwords, auth tokens or any other private or sensitive information.

Activity

  1. github-actions commented on Aug 3, 2026

    @github-actions

    This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 14 days if no further activity occurs. If this is still relevant, please comment to keep it open.

  2. github-actions commented on Aug 18, 2026

    @github-actions

    Closing due to inactivity. If this is still relevant, please reopen or file a new issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs investigationIssue needs to be looked at by TableaustaletriagedReviewed by a maintainer; leave closed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions