-
Notifications
You must be signed in to change notification settings - Fork 13.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(tags): Export and Import Functionality for Superset Dashboards and Charts #30833
base: master
Are you sure you want to change the base?
Conversation
DR-4503: Added export Tags functionality for Superset Dashboards and …
DR-4503: Added Import Tags functionality for Superset Dashboards and Charts
DR-4503: Fix Export Tag to ignore owner:
remove docker .env custom SUPERSET_SECRET_KEY
Superset remove unwanted files
Thank you for the PR @asher-lab. Could you add unit tests for the new feature with the feature flag on and off? |
Add superset logic to handle disable tagging system
Good day, @michael-s-molina. We've added logic to handle cases when the Tagging System is disabled in Superset. When disabled, the Could you provide guidance on creating a unit test for this new feature? I have limited experience with writing unit tests, so any help would be appreciated. Thank you! |
Hi @asher-lab. You can check this file for examples. |
Good morning @betodealmeida , resolve the merge conflicts one more run please. Thank you! |
SUMMARY
This PR is related to Discussion: #30629 by Spens
Motivation
We have adopted the tagging functionality and it is working quite well for us for dashboards and and charts. Our use case and process requires us to build dashboards on a development server, export the dashboards, commit the YAMLs to source control, and finally import the ZIPs to our production server. We would like the tags we assign on the development server to be captured in the export so they are replicated to our production server.
Proposed Change
UI elements are not affected by this change. All changes are related to updated logic/processing of the existing export and import functionality.
Only tags of type "custom" are exported. Other tags that exist but are not exported are "type" and "owner".
Export Logic
When an object (Dashboard/Chart) is exported, a new parameter is added to the exported YAML file. The parameter is "tags" and the value is an array of tag names. Here is an example:
...
Because tags have additional information (for example, a description), a new file is needed to hold this information. The file is called "tags.yaml" and lives in the top level of the zip file. For example:
The format of the tags.yaml file is an array of tags
Import Logic
When an object is imported, the code checks to see if any tags included in the import file.
If yes, the tag is created if it does not already exist then the tag is assigned to the imported object. If the tag already exists, it is just assigned with no changes to the tag.
Details
Existing Superset behavior: When importing objects that already exist, the user is prompted whether it is ok to overwrite. If no, the import process aborts. If yes, the old object is replaced with the new object.
To be consistent with this behavior, when importing an object and specifying "overwrite", old tags that are no longer specified with the object are removed, new tags that didn't originally exist are created, old tags that still remain in the new set of tags are retained (descriptions are not updated for example)
This is intentional because for the use case of trying to mirror the settings and properties from one system to another, you must have the ability to remove tags from the target system. Otherwise, for example, if you rename a tag, the new name would get added and the old name would stick around which is not the desired behavior.
Thank you to anyone taking the time to read and comment!
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
TESTING INSTRUCTIONS
ADDITIONAL INFORMATION