diff --git a/docs/changelog.rst b/docs/changelog.rst index de6b1b923..f872d6fe0 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -12,9 +12,10 @@ Development - Fix validate() not being called when inheritance is used in EmbeddedDocument and validate is overriden #2784 - Add support for readPreferenceTags in connection parameters #2644 - Use estimated_documents_count OR documents_count when count is called, based on the query #2529 -- Fix no_dereferencing context manager which wasn't turning off auto-dereferencing correctly in some cases -- BREAKING CHANGE: no_dereferencing context manager no longer returns the class in __enter__ - as it was useless and making it look like it was returning a different class +- Fix no_dereferencing context manager which wasn't turning off auto-dereferencing correctly in some cases #2788 +- BREAKING CHANGE: no_dereferencing context manager no longer returns the class in __enter__ #2788 + as it was useless and making it look like it was returning a different class. + Thus, must be called like `with no_dereferencing(User):` and no longer `with no_dereferencing(User) as OtherUserClass:` Changes in 0.27.0 ================= diff --git a/tests/document/test_indexes.py b/tests/document/test_indexes.py index 8a0486412..c50764b11 100644 --- a/tests/document/test_indexes.py +++ b/tests/document/test_indexes.py @@ -451,75 +451,65 @@ class Test(Document): # the documents returned might have more keys in that here. query_plan = Test.objects(id=obj.id).exclude("a").explain() assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("inputStage") - .get("stage") - == "IDHACK" + query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IDHACK" ) query_plan = Test.objects(id=obj.id).only("id").explain() assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("inputStage") - .get("stage") - == "IDHACK" + query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IDHACK" ) mongo_db = get_mongodb_version() query_plan = Test.objects(a=1).only("a").exclude("id").explain() if mongo_db < MONGODB_70: assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("inputStage") - .get("stage") + query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IXSCAN" ) else: - assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("queryPlan") - .get("inputStage") - .get("stage") - == "IXSCAN" - ) + try: + assert ( + query_plan["queryPlanner"]["winningPlan"]["queryPlan"][ + "inputStage" + ]["stage"] + == "IXSCAN" + ) + except KeyError: + # Not all MongoDB 7.0 or Pymongo 4.6.x are consistent + assert ( + query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] + == "IXSCAN" + ) PROJECTION_STR = "PROJECTION" if mongo_db < MONGODB_42 else "PROJECTION_COVERED" if mongo_db < MONGODB_70: - assert ( - query_plan.get("queryPlanner").get("winningPlan").get("stage") - == PROJECTION_STR - ) + assert query_plan["queryPlanner"]["winningPlan"]["stage"] == PROJECTION_STR else: assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("queryPlan") - .get("stage") + query_plan["queryPlanner"]["winningPlan"]["queryPlan"]["stage"] == PROJECTION_STR ) query_plan = Test.objects(a=1).explain() if mongo_db < MONGODB_70: assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("inputStage") - .get("stage") + query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IXSCAN" ) else: - assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("queryPlan") - .get("inputStage") - .get("stage") - == "IXSCAN" - ) + try: + assert ( + query_plan["queryPlanner"]["winningPlan"]["queryPlan"][ + "inputStage" + ]["stage"] + == "IXSCAN" + ) + except KeyError: + # Not all MongoDB 7.0 or Pymongo 4.6.x are consistent + assert ( + query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] + == "IXSCAN" + ) if mongo_db < MONGODB_70: assert ( @@ -528,10 +518,7 @@ class Test(Document): ) else: assert ( - query_plan.get("queryPlanner") - .get("winningPlan") - .get("queryPlan") - .get("stage") + query_plan["queryPlanner"]["winningPlan"]["queryPlan"]["stage"] == "FETCH" )