Сравнение двух (одинаковых) функций с одинаковым 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
Как это возможно и как я могу заставить это работать?