Preserve Box subclass as default nested box_class during pickle#316
Draft
Shevanio wants to merge 1 commit into
Draft
Preserve Box subclass as default nested box_class during pickle#316Shevanio wants to merge 1 commit into
Shevanio wants to merge 1 commit into
Conversation
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.
Context
The Box class implementation needs to support preserving its subclass during the pickling and unpickling process. This is essential for maintaining the integrity of nested Box subclasses when handling serialized data.
Solution
Box.__new__initialization inbox/box.pyto set the defaultbox_classusingclsinstead of the concreteBoxclass, which allows subclasses to wrap nested dictionary values recursively with their own types.box_classvalues still take precedence over the new default configuration to maintain the behavior for existing clients.test/test_box.pywith a subclass to verify that pickled and unpickled objects retain their subclass instances, usingpickle.HIGHEST_PROTOCOLfor testing.Scope
This change impacts the Box class in
box/box.pyand its behavior in serialization contexts. Regression tests ensure that the functionality remains intact, and new behavior is corroborated.Tests Run
160 tests were executed during the validation process.
Results
All tests passed successfully, confirming that the implementation is working as intended and does not introduce any regressions.
Risks
Low risk of breakage given the thorough testing and preserving of existing behaviors in the codebase.
Related Issue
This PR addresses the issue of subclass pickling in the Box class and aligns with enhancement requests on the repository regarding maintaining subclass integrity.