+ @classmethod
+ def _user_query(cls, priv_query_exec, obj, params, method_obj):
+ nonlocal query_method_obj
+ query_method_obj = method_obj
+
+ query_method_obj = None
+ method_obj = object()
+ bt2.QueryExecutor(MySink, "obj", method_obj=method_obj).query()
+ self.assertIs(query_method_obj, method_obj)
+ del query_method_obj
+
+ def test_query_with_method_obj_del_ref(self):
+ class MySink(bt2._UserSinkComponent):
+ def _user_consume(self):
+ pass
+
+ @classmethod
+ def _user_query(cls, priv_query_exec, obj, params, method_obj):
+ nonlocal query_method_obj
+ query_method_obj = method_obj
+
+ class Custom:
+ pass
+
+ query_method_obj = None
+ method_obj = Custom()
+ method_obj.hola = "hello"
+ query_exec = bt2.QueryExecutor(MySink, "obj", method_obj=method_obj)
+ del method_obj
+ query_exec.query()
+ self.assertIsInstance(query_method_obj, Custom)
+ self.assertEqual(query_method_obj.hola, "hello")
+ del query_method_obj
+
+ def test_query_with_none_method_obj(self):
+ class MySink(bt2._UserSinkComponent):
+ def _user_consume(self):