Сравнение двух (одинаковых) функций с одинаковым id <функция ... at 0x7f490f225900> возвращает False в Django Middleware

Я создал middleware, который изменяет один аргумент для представления в process_view методе.

Поскольку это нужно сделать только для одного конкретного представления, я сравниваю аргумент callback с функцией view следующим образом:

from third_party_app import view_func

class ModifyCodeKwargForViewFuncMiddleware(MiddlewareMixin):

    def process_view(self, request, callback, callback_args, callback_kwargs):
    
        if callback is view_func:
            raw_code = callback_kwargs["code"]
            normalized_code = utils.normalize_code(raw_code)
            return view_func(request, normalized_code)
        return None

Это работает правильно на моем сервере разработки;

callback is view_func

является True

Но он не работает на сервере на heroku.

Я зарегистрировал callback и view_func прямо перед сравнением и заметил, что их идентификаторы одинаковы (также на сервере heroku), что еще более странно:

class ModifyCodeKwargForViewFuncMiddleware(MiddlewareMixin):

    def process_view(self, request, callback, callback_args, callback_kwargs):

        logging.warning(f"callback is `{callback}`")
        logging.warning(f"imported view_func is `{view_func}`")
        logging.warning(f"callback is view_func {callback is view_func}")

        if callback is view_func:
            raw_code = callback_kwargs["code"]
            normalized_code = utils.normalize_code(raw_code)
            return view_func(request, normalized_code)
        return None

Записи в журнале выглядят следующим образом:

callback is `<function view_func at 0x7f490f225900>`
imported view_func is `<function view_func at 0x7f490f225900>`
callback is view_func False

Как это возможно и как я могу заставить это работать?

Вернуться на верх