Refactor tags/branches data to use dataclass instead of dicts (fixes #7798) #12364
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
This PR refactors the handling of tags and branches data throughout the codebase to use a dataclass (VersionData) instead of plain dictionaries. This improves type safety, code readability, and reduces the risk of bugs related to key typos or inconsistent data structures.
Key Changes
Introduced a VersionData dataclass to represent tags and branches data (identifier and verbose_name).
Updated all code that creates, passes, or consumes tags/branches data to use the dataclass instead of dictionaries.
Before passing tags/branches data to Celery tasks, the dataclasses are serialized to dicts; inside the Celery task, they are deserialized back to dataclasses.
Updated all validation and utility functions to use dataclass attributes.
Ensured full compatibility with Celery serialization.
Motivation
Previously, tags and branches were passed as lists of dictionaries, which was error-prone and harder to maintain. Using a dataclass provides a clear contract for the data structure and makes the codebase more robust.
Related Issue
Fixes #7798
How to Test
Run the test suite to ensure all affected code paths work as expected.
Trigger any Celery tasks that use tags/branches data to confirm serialization works correctly.