小编Zoz*_*ozz的帖子

在python 3.5中模拟异步调用

如何模拟从一个本地协程到另一个使用的异步调用unittest.mock.patch

我目前有一个很尴尬的解决方案:

class CoroutineMock(MagicMock):
    def __await__(self, *args, **kwargs):
        future = Future()
        future.set_result(self)
        result = yield from future
        return result
Run Code Online (Sandbox Code Playgroud)

然后

class TestCoroutines(TestCase):
    @patch('some.path', new_callable=CoroutineMock)
    def test(self, mock):
        some_action()
        mock.assert_called_with(1,2,3)
Run Code Online (Sandbox Code Playgroud)

这有效,但看起来很难看.是否有更多的pythonic方式来做到这一点?

python python-mock python-asyncio

32
推荐指数
7
解决办法
2万
查看次数

在sqlalchemy中刷新分离的实体

我需要将一个对象附加到会话,使其与db中持久化的对象不同.(更容易用代码解释):

session.query(type(some_object)).filter_by(id=some_object.id).one()
Run Code Online (Sandbox Code Playgroud)

有更合适的方法吗? session.add(some_object)不起作用,因为具有此类ID的实体已经可以附加到此会话,并且object = session.merge(some_object)对我不起作用,因为它从分离的副本转换状态(如果我使object.name ='asdfasdf'这些更改将在合并后挂起宾语)

编辑:

我找到了一点不那么丑陋的方式:

some_object = session.merge(some_object)
session.refresh(some_object)
Run Code Online (Sandbox Code Playgroud)

但是在一次通话中有没有办法解决这个问题?

python session sqlalchemy

4
推荐指数
1
解决办法
2225
查看次数