Django1.3.1からDjango1.4に移行しました。そうしてすぐに、私のテストの非常に多くがこれらのエラーを引き起こし始めました:
Traceback (most recent call last):
File "/Volumes/Data/ADay/Website/Backend/(trunk)/project/tests/templatetags.py", line 406, in setUp
self.context = template.RequestContext(self.request)
File "/Library/Python/2.6/site-packages/django/template/context.py", line 176, in __init__
self.update(processor(request))
File "/Volumes/Data/ADay/Website/Backend/(trunk)/project/social_auth/context_processors.py", line 21, in social_auth_by_type_backends
data = backends_data(request.user)
AttributeError: 'WSGIRequest' object has no attribute 'user'
これらのエラーはすべて、request.userにリクエストコンテキストを構築しようとするdjango-social-authコンテキストプロセッサを参照しています。
def social_auth_by_type_backends(request):
"""Load Social Auth current user data to context.
Will add a output from backends_data to context under social_auth key where
each entry will be grouped by backend type (openid, oauth, oauth2).
"""
data = backends_data(request.user)
data['backends'] = group_backend_by_type(data['backends'])
data['not_associated'] = group_backend_by_type(data['not_associated'])
data['associated'] = group_backend_by_type(data['associated'],
key=lambda assoc: assoc.provider)
return {'social_auth': data}
Djangoは、リクエストコンテキストの構築中に、リクエストを関数に渡しませんか?それだけではないと思います。social-authチームの誰かが、おそらく今までにそのような問題を発見したでしょう。
編集:
私は最初、非推奨のcontext_processorに問題があると思いましたが、チェックしたところ、すべて最新である必要があります。
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.messages.context_processors.messages',
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
'django.core.context_processors.request',
'pages.context_processors.media',
'social_auth.context_processors.social_auth_by_type_backends',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
edit2:
わかりました。サイトは引き続き機能しているため、これはおそらく私のテストコードの問題です。ここにあります:
def setUp(self):
self.factory = RequestFactory()
# create an initial request including session data
self.response = self.client.get('/')
self.request = self.factory.get("/") #any valid url will do, i just need a request
self.request.session = self.client.session
self.context = template.RequestContext(self.request)
最後の行はエラーを引き起こしています。TestCaseのsetUp()関数にあるので、テスト全体でその例外が発生し始めます。なぜこれがDjango1.4で機能しなくなったのですか?