小编Uri*_*lit的帖子

Python @patch无效

我试图测试一个方法,在其中创建另一个类的实例,我试图模拟内部类的创建......这对我不起作用.我尝试将问题复制到一个简化的案例 - 但仍然没有去.这是简化的案例:

我有一个新的目录pymock__init__.py它.除此之外,还有以下3个文件:

foo.py

#!/usr/bin/python
class Foo(object):
    def foo1(self):
        return 1
Run Code Online (Sandbox Code Playgroud)

goo.py

#!/usr/bin/python
from foo import Foo


class Goo(object):
    def goo1(self):
        f = Foo()
        return f.foo1()
Run Code Online (Sandbox Code Playgroud)

goo_test.py

#!/usr/bin/python
from mock import patch, Mock
from nose.tools import assert_equal

from goo import Goo


class TestGoo(object):
    def setup(self):
        self.goo = Goo()

    @patch('pymock.foo.Foo', autospec=True)
    def test_goo1(self, foo1_mock):
        foo_instance = Mock()
        foo1_mock.return_value = foo_instance
        foo_instance.foo1.return_value = 11
        assert_equal(11, self.goo.goo1())
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python unit-testing mocking

9
推荐指数
2
解决办法
2790
查看次数

Django Rest Framework 中“不是有效选择”的转义问题

我有一个带有状态字段的模型,如下所示:

PENDING = 'pending'
DONE = 'done'
CANCELED = 'canceled'

class Event:
    EVENT_STATUSES = [(1, PENDING), (2, DONE), (3, CANCELED)]
    status = models.CharField(max_length=20, choices=EVENT_STATUSES, default=PENDING)
Run Code Online (Sandbox Code Playgroud)

我有一个序列化器:

class EventUpdateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Event
        fields = ('status')
Run Code Online (Sandbox Code Playgroud)

当使用以下 JSON 调用它时:

{
    "status": "done"
}
Run Code Online (Sandbox Code Playgroud)

我得到回应:

{
  "status": [
    "\"done\" is not a valid choice."
  ]
}
Run Code Online (Sandbox Code Playgroud)

我认为问题在于逃避完成,但为什么呢?我该如何预防呢?

(我有一个内容类型 application/json 标头)。

django json django-rest-framework

7
推荐指数
1
解决办法
2010
查看次数

Telegram bot发起与用户的对话

我正在写一个Telegram机器人,为了简化问题,假设您可以在渠道中询问机器人问题并且它会私下回复您.当僵尸程序收到命令时,它将chat_id从用户处获取:update.message.from_user.id

但是当我这样做时,我收到一个错误:

Unauthorized: Forbidden: bot can't initiate conversation with a user
Run Code Online (Sandbox Code Playgroud)

这听起来很合乎逻辑,因为我认为这可以防止编写垃圾邮件机器人.问题是我该如何克服它?如何让用户从机器人启用私人消息?

注意:僵尸程序确实成功向我发送消息但不向其他用户发送消息.

python telegram python-telegram-bot telegram-bot

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

Django 获取其派生类具有 mixin 的所有基类对象

我的模型看起来像这样:

class SomeModel(model.Model):
    pass


class Base(models.Model):
    field1 = ...


class Mixin1(models.Model):
    some_model = models.ForeignKey('SomeModel', on_delete=models.CASCADE)

    class Meta:
        abstract = True


class Derive1(Base, Mixin1):
    field2 = ...


class Derive2(Base, Mixin1):
    field3 = ...


class Derive3(Base):
    field4 = ...
Run Code Online (Sandbox Code Playgroud)

现在我希望能够获取从Base和 派生的所有对象Mixin1,而无需显式列出所有使用 的类Mixin1。就像是:

Base.objects.filter(some_model=X)
Run Code Online (Sandbox Code Playgroud)

我明白为什么这不起作用,但我不知道如何让它真正起作用。

解决方案:感谢valentjedi 的回答,我找到了一个可行的解决方案。我将其发布在这里,以防有一天它会对某人有所帮助。

除了希望将所有结果放在一起之外,我还希望它们按 Base 中的日期字段排序,并能够自由过滤它们。所以我在Mixin1函数中创建了:

 @staticmethod
 def get_mixin1_objects(some_model, q_filter=None):
     mixin_models = set(Mixin1.__subclasses__()) & set(Base.__subclasses__())
     results = []
     for mdl in mixin_models:
         apply_filter = Q(some_model=some_model)
         if q_filter is …
Run Code Online (Sandbox Code Playgroud)

python django mixins django-rest-framework

2
推荐指数
1
解决办法
1468
查看次数