I am new to TurboGears and have just installed TG2 development in a virtual environment. I'm following along in the quickstart guide, and have successfully built a helloworld via
paster quickstart
I started the server and navigated a web-browser to localhost:8080
Wouldn't you know it, I immediately get an error, and not the welcome message the documentation suggests I should be seeing.
The error reads:
AttributeError: 'AcceptLanguage' object has no attribute 'best_matches'
Here's the trace:
URL: http://localhost:8080/
File 'C:\\VirtualEnv_1\\lib\\site-packages\\weberror-0.10.3-py2.7.egg\\weberror\\evalexception.py', line 431 in respond
app_iter = self.application(environ, detect_start_response)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\beaker-1.6-py2.7.egg\\beaker\\middleware.py', line 73 in __call__
return self.app(environ, start_response)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\beaker-1.6-py2.7.egg\\beaker\\middleware.py', line 155 in __call__
return self.wrap_app(environ, session_start_response)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\routes-1.12.3-py2.7.egg\\routes\\middleware.py', line 131 in __call__
response = self.app(environ, start_response)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\pylons-1.0-py2.7.egg\\pylons\\wsgiapp.py', line 107 in __call__
response = self.dispatch(controller, environ, start_response)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\pylons-1.0-py2.7.egg\\pylons\\wsgiapp.py', line 312 in dispatch
return controller(environ, start_response)
File 'C:\\VirtualEnv_1\\Scripts\\HelloWorld\\helloworld\\lib\\base.py', line 27 in __call__
return TGController.__call__(self, environ, start_response)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\pylons-1.0-py2.7.egg\\pylons\\controllers\\core.py', line 211 in __call__
response = self._dispatch_call()
File 'C:\\VirtualEnv_1\\lib\\site-packages\\pylons-1.0-py2.7.egg\\pylons\\controllers\\core.py', line 162 in _dispatch_call
response = self._inspect_call(func)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\pylons-1.0-py2.7.egg\\pylons\\controllers\\core.py', line 105 in _inspect_call
result = self._perform_call(func, args)
File 'C:\\VirtualEnv_1\\lib\\site-packages\\turbogears2-2.1.3-py2.7.egg\\tg\\controllers\\dispatcher.py', line 230 in _perform_call
setup_i18n()
File 'C:\\VirtualEnv_1\\lib\\site-packages\\turbogears2-2.1.3-py2.7.egg\\tg\\i18n.py', line 61 in setup_i18n
pylons.request.accept_language.best_matches())) AttributeError: 'AcceptLanguage' object has no attribute 'best_matches'
Did I mess something up when I installed it, or is this a problem with TurboGears?
Edit: I created a second project I named GoodnightMoon, this time without the Mako template option (which is the only difference between setups) and I get the same error:
'AcceptLanguage' object has no attribute 'best_matches'
Unfortunately this question is the only one I can find with a web search related exactly to this error.
Are there any other clues I can use and provide to stackoverflow to assist in answering this question?
Following Michael Pederson's advice below, I researched the i18n. I have an i18n directory with only one sub-directory, named ru (Russian, I assume). I'm working on English-defaulted systems and browsers.
I'm using whatever the most current TG2 distro is at the time of this question, v. 2.1.3, and tg.devtools 2.1.x
The problem in wrong dependency to WebOb. IIRC 1.2b2 is installed which lack best_matches method on AcceptLanguage class. The easiest way to overcome that trouble is to replace WebOb-1.2b2 with stable WebOb-1.1.1. This solution works fine for me.
PS: if you use virtual-env - just replace files inside lib/python2.7/site-packages/webob with ones from official site http://pypi.python.org/pypi/WebOb/1.1.1