Repository navigation
Conversation
Overlays for TableauSite, TableauProject, TableauWorkbook, TableauDatasource, TableauDashboard, TableauWorksheet, TableauDatasourceField, TableauCalculatedField, TableauWorksheetField and TableauDashboardField. Each creator emits the qualifiedName atlan-tableau-app emits today, sets the parent relationship and the denormalised site / project / top-level project / workbook / datasource attributes, and raises on blank inputs or a parent qn of the wrong depth. Project qns stay flat under the site; nesting is carried by parentProject. Datasources take an optional workbook_qualified_name to build the embedded shape; datasource and calculated fields infer published vs embedded from the datasource qn depth. top_level_project_qualified_name defaults to the immediate (or parent) project, matching the app when the project hierarchy is empty. Classes regenerated from atlanhq/models FND-3849. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016K2wFCg1G6Hxv8j2TKW7cB
Builds a site, a top-level and a nested project, a workbook in the nested project, a published and an embedded datasource, a dashboard, a worksheet and one of each field type, then checks each saved qualifiedName, parent relationship and denormalised attribute. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016K2wFCg1G6Hxv8j2TKW7cB
Follows the per-type layout used by the QuickSight tests, moves the shared ids and qualifiedNames into tests_v9/unit/model/constants.py, and adds updater / trim_to_required coverage for every Tableau type. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016K2wFCg1G6Hxv8j2TKW7cB
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✨ Description
Adds
creator()for the 10 Tableau asset types in pyatlan_v9: TableauSite, TableauProject, TableauWorkbook, TableauDatasource, TableauDashboard, TableauWorksheet, TableauDatasourceField, TableauCalculatedField, TableauWorksheetField, TableauDashboardField. Follows the Sigma (#1087) and Cognos (#1078) pattern: overlay + parity tests + integration test.ValueError; blank inputs raise (validate_required_fields).{site}/{project}) even when nested.parent_project_qualified_namesetsparent_project,is_top_level_projectandtop_level_project_qualified_name(defaults to the parent).workbook_qualified_namegives the embedded shape and sets theworkbookrelationship; theprojectrelationship is always set. Datasource and calculated fields infer published vs embedded from the datasource qualifiedName depth.tableau_-prefixed denormalised attributes and thetableau_worksheet/tableau_dashboardrelationship, as the app does.top_level_project_qualified_namedefaults to the immediate project (correct when the project hierarchy is empty); callers with deeper nesting pass it.projectHierarchystays caller-set, since it needs ancestor names.pyatlan_v9/model/assets/_overlays/tableau_*.py; only the 10 Tableau classes are taken from the regeneration (pklsdkOnly=pythonwith these overlays, same flags assync-python-sdk.yaml).Linear: FND-3849 (analysis table in the issue comments)
Paired models PR: https://github.com/atlanhq/models/pull/2088 (adds the matching
qualifiedNameFormula; onlyTableauSite's generated pattern changes).Merge order: this PR first, then models#2088. The sync bot regenerates with overlays from atlan-python
mainon each modelsmasterpush, so in this order its sync is a no-op for Tableau; the other way round it regenerates the classes without the creators.🧩 Type of change
✅ How has this been tested?
tests_v9/unit/model/tableau_<type>_test.py(10 files, 125 tests): literal app qualifiedName per type (published and embedded where applicable), pattern match,validate(for_creation=True), parent relationship and denormalised attrs, missing / blank inputs, malformed parent qualifiedNames, cross-site top-level project,createalias,updater/trim_to_required.tests_v9/integration/tableau_asset_test.py(12 tests): builds site → top-level project → nested project → workbook → published and embedded datasources, dashboard, worksheet and every field type through the creators, retrieves each and asserts qualifiedName, parent link and denormalised attrs, then purges. Passes locally against a dev tenant.pytest tests_v9/unit: 8152 passed, 5 skipped.pre-commitclean.📋 Checklist
🤖 Generated with Claude Code
https://claude.ai/code/session_016K2wFCg1G6Hxv8j2TKW7cB