Издевайтесь над константой в python

#python #django #django-rest-framework #python-unittest.mock

Вопрос:

Я имею в виду filterset_class = main_app.api.filters.TestClassFilter и там поле id__in

 class TestClassFilter(FilterSet):
    id__in = BaseInLimitFilter(
        field_name="id",
        label='Id in',
        limit=LIMIT
    )
 

с пользовательским классом фильтра api.filters.BaseInLimitFilter

 class BaseInLimitFilter(BaseInFilter):
    message = _("At most {} values are allowed.")
    limit = 10

    def __init__(self, *args, **kwargs):
        if 'limit' in kwargs:
            self.limit = kwargs.pop('limit')
        super(BaseInLimitFilter, self).__init__(*args, **kwargs)

    def filter(self, qs, value):
        if len(value) >= self.limit:
            raise ValidationError({
                "id__in": self.message.format(self.limit)
            })

        return super(BaseInLimitFilter, self).filter(qs, value)
 

Я пытаюсь имитировать константу api.const.LIMIT и установить значение 1 в своем тесте, но у меня с этим проблемы. Я пробовал что-то в этом роде:

 @mock.patch('main_app.api.filters.LIMIT', 1)
 

У кого-нибудь есть какие-нибудь идеи, что я делаю не так?

Комментарии:

1. не могли бы вы сделать это воспроизводимым? Вы понимаете, что макет вступает в силу только после его вызова, но если вы импортируете свой код в верхней части набора тестов и создадите его экземпляр, будет слишком поздно его издеваться