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
Issue1414: wrong behavior of json() method with nested models containing custom root #1429
Conversation
Codecov Report
@@ Coverage Diff @@
## master #1429 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 21 21
Lines 3747 3761 +14
Branches 742 748 +6
=========================================
+ Hits 3747 3761 +14
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In future, please give pull requests a descriptive name, just "Issue1414" doesn't help explain what this is about, you can probably edit the title.
if self.__custom_root_type__: | ||
data = data[ROOT_KEY] | ||
|
||
def reparent_root(d: 'DictStrAny') -> 'DictStrAny': |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this can be done more easily with a change to _get_value
, though I haven't tried myself.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried to look at _get_value but it would spread the change also to dict() method and make some other tests failing (and might introduce new issues?).
@@ -204,6 +204,37 @@ class Model(BaseModel): | |||
assert Model(__root__=['a', 'b']).json() == '["a", "b"]' | |||
|
|||
|
|||
def test_encode_nested_root(): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this has nothing to do with .json()
in particular, it should be true of .dict()
too, so tests shouldn't be in this file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure to understand your comment. Those tests build models with nested root as child elements, then calls the json method and the expected result is a json without the __root__
intermediate key.
(The behavior change concerns only the json method, doing it in dict method is breaking other tests)
I think the point here is that this should effect |
replaced by #1607 |
Change Summary
1414
#1414
Fix proposal for the issue 1414, wrong behavior of json method when there are nested models with custom root.
Once the dict is generated, it is parsed and each time an item has the root key, its associated value is attached to the parent key
(Maybe this can be done in a more pythonic way, but with 15 years of C++ I still have bad habits)
Checklist
changes/<pull request or issue id>-<github username>.md
file added describing change(see changes/README.md for details)