Skip to content

Remove deprecated cgi module and clean up related dead code#1771

Open
Copilot wants to merge 2 commits intodevelopmentfrom
copilot/update-deprecated-cgi-module
Open

Remove deprecated cgi module and clean up related dead code#1771
Copilot wants to merge 2 commits intodevelopmentfrom
copilot/update-deprecated-cgi-module

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 7, 2026

The cgi module was deprecated in Python 3.11 and removed in Python 3.13 (PEP-594). The three download endpoints had already migrated from cgi.parse_header() to email.message.Message.get_filename(), but left behind dead code from the old dict-based API.

Changes

  • Removed fix_filename() from helpers/headers.py (and deleted the now-empty file) — it existed solely to normalize cgi.parse_header()'s dict output (handling filename*=UTF-8''... keys). Message.get_filename() already decodes RFC 2231 encoding natively, making this function a permanent no-op.
  • Removed fix_filename imports and calls from datasources_endpoint.py, workbooks_endpoint.py, flows_endpoint.py
  • Renamed paramsfilename in each download method to reflect that get_filename() returns a string, not a parameter dict

Before

from tableauserverclient.helpers.headers import fix_filename
# ...
params = m.get_filename(failobj="")
params = fix_filename(params)  # no-op: always returns params unchanged
filename = to_filename(os.path.basename(params))

After

filename = m.get_filename(failobj="")
filename = to_filename(os.path.basename(filename))

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • test
    • Triggering command: /usr/bin/python python -m pytest test/ -v arse_header\|cgi k/server-client-python/server-client-python/tableauserverclient/filesys_helpers.py tnet/tools/bash (dns block)
    • Triggering command: /usr/bin/python python -m pytest test/ rev-�� HEAD git k/_temp/ghcca-node/node/bin/git --abbrev-ref HEAD k/_temp/ghcca-no--abbrev-ref git desc�� --tags --dirty git --long --match v[[:digit:]]* git (dns block)
    • Triggering command: /usr/bin/python python -m pytest test/ rev-�� --git-dir git rgo/bin/git HEAD git git git show�� -s --format=%ci k/_temp/ghcca-node/node/bin/git --git-dir git rgo/bin/git git (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Remove deprecated cgi module to comply with PEP-0594 Remove deprecated cgi module and clean up related dead code Apr 7, 2026
Copilot AI requested a review from jacalata April 7, 2026 00:50
@jacalata jacalata marked this pull request as ready for review April 7, 2026 02:01
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 7, 2026

Coverage

Coverage Report
FileStmtsMissCoverMissing
tableauserverclient
   __init__.py50100% 
   config.py150100% 
   datetime_helpers.py2511 96%
   exponential_backoff.py200100% 
   filesys_helpers.py310100% 
   namespace.py2633 88%
tableauserverclient/bin
   __init__.py20100% 
   _version.py358212212 41%
tableauserverclient/helpers
   __init__.py10100% 
   logging.py20100% 
   strings.py3111 97%
tableauserverclient/models
   __init__.py460100% 
   collection_item.py4277 83%
   column_item.py553232 42%
   connection_credentials.py351111 69%
   connection_item.py861313 85%
   custom_view_item.py1442121 85%
   data_acceleration_report_item.py5411 98%
   data_alert_item.py15944 97%
   data_freshness_policy_item.py1561515 90%
   database_item.py2073636 83%
   datasource_item.py3011212 96%
   dqw_item.py10455 95%
   exceptions.py40100% 
   extensions_item.py13244 97%
   extract_item.py4544 91%
   favorites_item.py6988 88%
   fileupload_item.py190100% 
   flow_item.py1491010 93%
   flow_run_item.py720100% 
   group_item.py8966 93%
   groupset_item.py5077 86%
   interval_item.py1823232 82%
   job_item.py1881010 95%
   linked_tasks_item.py8011 99%
   location_item.py3022 93%
   metric_item.py1301313 90%
   oidc_item.py6433 95%
   pagination_item.py3411 97%
   permissions_item.py1121212 89%
   project_item.py2073131 85%
   property_decorators.py1001818 82%
   reference_item.py2622 92%
   revision_item.py6011 98%
   schedule_item.py20966 97%
   server_info_item.py3744 89%
   site_item.py6361313 98%
   subscription_item.py10122 98%
   table_item.py1191818 85%
   tableau_auth.py622525 60%
   tableau_types.py2711 96%
   tag_item.py150100% 
   target.py60100% 
   task_item.py5722 96%
   user_item.py3101818 94%
   view_item.py2201616 93%
   virtual_connection_item.py6488 88%
   webhook_item.py6622 97%
   workbook_item.py3621616 96%
tableauserverclient/server
   __init__.py90100% 
   exceptions.py40100% 
   filter.py2111 95%
   pager.py3311 97%
   query.py1431818 87%
   request_factory.py1326197197 85%
   request_options.py38555 99%
   server.py1891919 90%
   sort.py60100% 
tableauserverclient/server/endpoint
   __init__.py350100% 
   auth_endpoint.py751010 87%
   custom_views_endpoint.py1521212 92%
   data_acceleration_report_endpoint.py210100% 
   data_alert_endpoint.py942323 76%
   databases_endpoint.py1113030 73%
   datasources_endpoint.py3283434 90%
   default_permissions_endpoint.py4433 93%
   dqw_endpoint.py451616 64%
   endpoint.py1871818 90%
   exceptions.py7066 91%
   extensions_endpoint.py310100% 
   favorites_endpoint.py952222 77%
   fileuploads_endpoint.py510100% 
   flow_runs_endpoint.py6299 85%
   flow_task_endpoint.py2122 90%
   flows_endpoint.py2105454 74%
   groups_endpoint.py12699 93%
   groupsets_endpoint.py7277 90%
   jobs_endpoint.py6899 87%
   linked_tasks_endpoint.py380100% 
   metadata_endpoint.py881414 84%
   metrics_endpoint.py5566 89%
   oidc_endpoint.py4211 98%
   permissions_endpoint.py4433 93%
   projects_endpoint.py1572424 85%
   resource_tagger.py1273636 72%
   schedules_endpoint.py1191111 91%
   server_info_endpoint.py361010 72%
   sites_endpoint.py1302727 79%
   subscriptions_endpoint.py561414 75%
   tables_endpoint.py1103636 67%
   tasks_endpoint.py6366 90%
   users_endpoint.py18499 95%
   views_endpoint.py15099 94%
   virtual_connections_endpoint.py1131010 91%
   webhooks_endpoint.py5499 83%
   workbooks_endpoint.py3492525 93%
TOTAL11967142588% 

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

cgi module is deprecated and will be removed in python 3.13

2 participants