Cursor.__deepcopy() does not support lists and causes (obscure) application crashes #179
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.
The method pymongo.cursor.Cursor.__deepcopy() was apparently created avoid copying regex'es in a deep copy. It works to copy dicts but does nothing for the list case. I found this behavior to be the cause of (obscure) "cannot deepcopy this pattern object" crashes when using Flask-admin with mongoengine. The failure was the result of query criteria containing a list that contained regex'es. In that list case __deepcopy() just calls copy.deepcopy() which fails on the regex'es.
The submitted patch enables __deepcopy to copy lists in addition to dicts. My goal in writing the patch was to implement the list case while minimizing logic changes to the original code as I did not want to unintentionally introduce any new problems. So the code may appear a bit clumsy. But it is perfectly functional and solves the failing case.
I hope this helps. Thanks for all the good work! -Juan