来自另一个模块的Python补丁方法

时间:2014-12-06 10:22:18

标签: python monkeypatching rethinkdb

我需要为RethinkDB的run()方法添加一些额外的功能。以下是我的想法:

from rethinkdb.ast import RqlQuery

class ExtendedRqlQuery(RqlQuery):
    def run(self, c=None, **global_optargs):
        if not c:
            with connection.get_conn() as conn:
                return super(ExtendedRqlQuery, self).run(conn, **global_optargs)
        else:
            return super(ExtendedRqlQuery, self).run(c, **global_optargs)
RqlQuery = ExtendedRqlQuery

问题是,如果我在没有任何连接参数的情况下运行查询,则会发生default behavior,就像我的补丁没有生效一样。我做错了什么?

修改

我已经进行了测试,这对我来说似乎很奇怪:

import rethinkdb as r
# Here is where I do my patching
import .utils

class Test(TestCase):
    def test(self):
        print r.ast.RqlQuery
        r.table('table').insert({'a': 1}).run()

print语句显示<class 'remodel.utils.ExtendedRqlQuery'>(这是正确的),但以下语句仍使用rethinkdb/ast.py处的原始文件。

0 个答案:

没有答案