Fix: Ensure correct handling of _included
entities in Entity
class
#225
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.
Background
I encountered this issue while calling the
roles.list
method with theinclude
parameter, specifically:When iterating over the returned
roles
object, I attempted to access the includeduser
andspace
data using dynamically generated methods, such asrole.user()
androle.space()
. However, I noticed that these methods did not return the correct associated data. Instead, both methods returned the same data, corresponding to the last entity processed in the_included
dictionary.Root Cause:
The problematic line of code is:
Here, the
lambda
function captures the variableentity
by reference. Sinceentity
is updated during each iteration of the loop, all dynamically created methods (e.g.,role.user()
androle.space()
) share the same reference toentity
. As a result, after the loop completes, all methods return the data of the last processed entity.Solution:
To fix this issue, I replaced the
lambda
withfunctools.partial
, which binds the current value ofentity
to the dynamically created method. This ensures that each method maintains an independent reference to the correctentity
value.If you have any suggestions, or need additional details about the fix, please feel free to contact me. I'm happy to provide further clarification or make additional changes if necessary.
Looking forward to your feedback and I hope this contribution can help improve the project!