<type 'exceptions.AttributeError'> | Python 2.5.4: C:\Python25\pythonw.exe Wed Sep 01 19:06:01 2010 |
A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in _HandleRequest(self=<google.appengine.tools.dev_appserver.DevAppServerRequestHandler instance at 0x01472DF0>) |
3110 outfile = cStringIO.StringIO() |
3111 try: |
3112 self._Dispatch(dispatcher, self.rfile, outfile, env_dict) |
3113 finally: |
3114 self.module_manager.UpdateModuleFileModificationTimes() |
self = <google.appengine.tools.dev_appserver.DevAppServerRequestHandler instance at 0x01472DF0>, self._Dispatch = <bound method DevAppServerRequestHandler._Dispat...vAppServerRequestHandler instance at 0x01472DF0>>, dispatcher = <google.appengine.tools.dev_appserver.MatcherDispatcher object at 0x0126AE70>, self.rfile = <socket._fileobject object at 0x0147AEF0>, outfile = <cStringIO.StringO object at 0x0147C540>, env_dict = {'APPLICATION_ID': 'helloworld', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8083', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0'} |
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in _Dispatch(self=<google.appengine.tools.dev_appserver.DevAppServerRequestHandler instance at 0x01472DF0>, dispatcher=<google.appengine.tools.dev_appserver.MatcherDispatcher object at 0x0126AE70>, socket_infile=<socket._fileobject object at 0x0147AEF0>, outfile=<cStringIO.StringO object at 0x0147C540>, env_dict={'APPLICATION_ID': 'helloworld', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8083', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0'}) |
3053 request_file, |
3054 outfile, |
3055 base_env_dict=env_dict) |
3056 finally: |
3057 request_file.close() |
base_env_dict undefined, env_dict = {'APPLICATION_ID': 'helloworld', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8083', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0'} |
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in Dispatch(self=<google.appengine.tools.dev_appserver.MatcherDispatcher object at 0x0126AE70>, relative_url='/', path=None, headers=<mimetools.Message instance at 0x01472D78>, infile=<closed file 'c:\docume~1\admini~1\locals~1\temp\request.zz1etn.tmp', mode 'rb' at 0x0107A890>, outfile=<cStringIO.StringO object at 0x0147C540>, base_env_dict={'APPLICATION_ID': 'helloworld', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8083', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0'}) |
446 infile, |
447 outfile, |
448 base_env_dict=base_env_dict) |
449 |
450 if forward: |
base_env_dict = {'APPLICATION_ID': 'helloworld', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8083', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0'} |
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in Dispatch(self=<google.appengine.tools.dev_appserver.CGIDispatcher object at 0x0147C0F0>, relative_url='/', path='helloworld.py', headers=<mimetools.Message instance at 0x01472D78>, infile=<closed file 'c:\docume~1\admini~1\locals~1\temp\request.zz1etn.tmp', mode 'rb' at 0x0107A890>, outfile=<cStringIO.StringO object at 0x0147C540>, base_env_dict={'APPLICATION_ID': 'helloworld', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8083', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0'}) |
2313 memory_file, |
2314 outfile, |
2315 self._module_dict) |
2316 handler.AddDebuggingConsole(relative_url, env, outfile) |
2317 finally: |
self = <google.appengine.tools.dev_appserver.CGIDispatcher object at 0x0147C0F0>, self._module_dict = {'HTMLParser': <module 'HTMLParser' from 'C:\Python25\lib\HTMLParser.py'>, 'StringIO': <module 'StringIO' from 'C:\Python25\lib\StringIO.pyc'>, '__future__': <module '__future__' from 'C:\Python25\lib\__future__.pyc'>, '__main__': <module 'helloworld' from 'E:\helloworld\helloworld.py'>, '_bisect': <module '_bisect' (built-in)>, '_hashlib': <module '_hashlib' from 'C:\Python25\DLLs\_hashlib.pyd'>, '_locale': <module '_locale' (built-in)>, '_mechanize_dist': <module '_mechanize_dist' from 'E:\helloworld\twill\other_packages\_mechanize_dist\__init__.pyc'>, '_mechanize_dist.ClientForm': <module '_mechanize_dist.ClientForm' from 'E:\he...l\other_packages\_mechanize_dist\ClientForm.pyc'>, '_mechanize_dist.HTMLParser': None, ...} |
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in ExecuteCGI(root_path=r'E:\helloworld', handler_path='helloworld.py', cgi_path=r'E:\helloworld\helloworld.py', env={'APPLICATION_ID': 'helloworld', 'AUTH_DOMAIN': 'gmail.com', 'CONTENT_LENGTH': '', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'CURRENT_VERSION_ID': '1.1', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CONNECTION': 'keep-alive', ...}, infile=<cStringIO.StringO object at 0x0147C2E0>, outfile=<cStringIO.StringO object at 0x0147C540>, module_dict={'HTMLParser': <module 'HTMLParser' from 'C:\Python25\lib\HTMLParser.py'>, 'StringIO': <module 'StringIO' from 'C:\Python25\lib\StringIO.pyc'>, '__future__': <module '__future__' from 'C:\Python25\lib\__future__.pyc'>, '__main__': <module 'helloworld' from 'E:\helloworld\helloworld.py'>, '_bisect': <module '_bisect' (built-in)>, '_hashlib': <module '_hashlib' from 'C:\Python25\DLLs\_hashlib.pyd'>, '_locale': <module '_locale' (built-in)>, '_mechanize_dist': <module '_mechanize_dist' from 'E:\helloworld\twill\other_packages\_mechanize_dist\__init__.pyc'>, '_mechanize_dist.ClientForm': <module '_mechanize_dist.ClientForm' from 'E:\he...l\other_packages\_mechanize_dist\ClientForm.pyc'>, '_mechanize_dist.HTMLParser': None, ...}, exec_script=<function ExecuteOrImportScript at 0x01441B70>) |
2223 logging.debug('Executing CGI with env:\n%s', pprint.pformat(env)) |
2224 try: |
2225 reset_modules = exec_script(handler_path, cgi_path, hook) |
2226 except SystemExit, e: |
2227 logging.debug('CGI exited with status: %s', e) |
reset_modules = True, exec_script = <function ExecuteOrImportScript at 0x01441B70>, handler_path = 'helloworld.py', cgi_path = r'E:\helloworld\helloworld.py', hook = <google.appengine.tools.dev_appserver.HardenedModulesHook object at 0x0147C0D0> |
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in ExecuteOrImportScript(handler_path='helloworld.py', cgi_path=r'E:\helloworld\helloworld.py', import_hook=<google.appengine.tools.dev_appserver.HardenedModulesHook object at 0x0147C0D0>) |
2119 try: |
2120 if module_code: |
2121 exec module_code in script_module.__dict__ |
2122 else: |
2123 script_module.main() |
module_code = <code object <module> at 014399B0, file "E:\helloworld\helloworld.py", line 1>, script_module = <module 'helloworld' from 'E:\helloworld\helloworld.py'>, script_module.__dict__ = {'__builtins__': {'ArithmeticError': <type 'exceptions.ArithmeticError'>, 'AssertionError': <type 'exceptions.AssertionError'>, 'AttributeError': <type 'exceptions.AttributeError'>, 'BaseException': <type 'exceptions.BaseException'>, 'DeprecationWarning': <type 'exceptions.DeprecationWarning'>, 'EOFError': <type 'exceptions.EOFError'>, 'Ellipsis': Ellipsis, 'EnvironmentError': <type 'exceptions.EnvironmentError'>, 'Exception': <type 'exceptions.Exception'>, 'False': False, ...}, '__doc__': None, '__file__': r'E:\helloworld\helloworld.py', '__loader__': <google.appengine.tools.dev_appserver.HardenedModulesHook object at 0x0147C0D0>, '__name__': 'helloworld', 'add_auth': <function add_auth at 0x01705530>, 'add_extra_header': <function add_extra_header at 0x017057F0>, 'agent': <function agent at 0x01705130>, 'back': <function back at 0x016FEFB0>, 'clear_cookies': <function clear_cookies at 0x017054B0>, ...} |
E:\helloworld\helloworld.py in |
1 from twill.commands import * |
2 go("http://www.python.org/") |
3 showforms() |
4 |
go = <function go at 0x016FED70> |
E:\helloworld\twill\commands.py in go(url='http://www.python.org/') |
110 Visit the URL given. |
111 """ |
112 browser.go(url) |
113 return browser.get_url() |
114 |
global browser = <twill.browser.TwillBrowser object at 0x016F6A50>, browser.go = <bound method TwillBrowser.go of <twill.browser.TwillBrowser object at 0x016F6A50>>, url = 'http://www.python.org/' |
E:\helloworld\twill\browser.py in go(self=<twill.browser.TwillBrowser object at 0x016F6A50>, url='http://www.python.org/') |
111 for u in try_urls: |
112 try: |
113 self._journey('open', u) |
114 success = True |
115 break |
self = <twill.browser.TwillBrowser object at 0x016F6A50>, self._journey = <bound method TwillBrowser._journey of <twill.browser.TwillBrowser object at 0x016F6A50>>, u = 'http://www.python.org/' |
E:\helloworld\twill\browser.py in _journey(self=<twill.browser.TwillBrowser object at 0x016F6A50>, func_name='open', *args=('http://www.python.org/',), **kwargs={}) |
521 func = getattr(self._browser, func_name) |
522 try: |
523 r = func(*args, **kwargs) |
524 except mechanize.HTTPError, e: |
525 r = e |
r undefined, func = <bound method PatchedMechanizeBrowser.open of <t....PatchedMechanizeBrowser instance at 0x016F7E90>>, args = ('http://www.python.org/',), kwargs = {} |
E:\helloworld\twill\other_packages\_mechanize_dist\_mechanize.py in open(self=<twill._browser.PatchedMechanizeBrowser instance at 0x016F7E90>, url='http://www.python.org/', data=None) |
210 |
211 def open(self, url, data=None): |
212 return self._mech_open(url, data) |
213 |
214 def _mech_open(self, url, data=None, update_history=True, visit=None): |
self = <twill._browser.PatchedMechanizeBrowser instance at 0x016F7E90>, self._mech_open = <bound method PatchedMechanizeBrowser._mech_open....PatchedMechanizeBrowser instance at 0x016F7E90>>, url = 'http://www.python.org/', data = None |
E:\helloworld\twill\other_packages\_mechanize_dist\_mechanize.py in _mech_open(self=<twill._browser.PatchedMechanizeBrowser instance at 0x016F7E90>, url='http://www.python.org/', data=None, update_history=True, visit=True) |
255 |
256 if visit: |
257 self._set_response(response, False) |
258 response = copy.copy(self._response) |
259 elif response is not None: |
self = <twill._browser.PatchedMechanizeBrowser instance at 0x016F7E90>, self._set_response = <bound method PatchedMechanizeBrowser._set_respo....PatchedMechanizeBrowser instance at 0x016F7E90>>, response = <response_seek_wrapper at 0x15a7cb0 whose wrappe...dist.httplib.HTTPResponse object at 0x0147C1F0>>>, builtin False = False |
E:\helloworld\twill\other_packages\_mechanize_dist\_mechanize.py in _set_response(self=<twill._browser.PatchedMechanizeBrowser instance at 0x016F7E90>, response=<response_seek_wrapper at 0x15a7f30 whose wrappe...dist.httplib.HTTPResponse object at 0x0147C1F0>>>, close_current=False) |
314 self._response.close() |
315 self._response = response |
316 self._factory.set_response(response) |
317 |
318 def visit_response(self, response, request=None): |
self = <twill._browser.PatchedMechanizeBrowser instance at 0x016F7E90>, self._factory = <twill.utils.ConfigurableParsingFactory instance at 0x01495990>, self._factory.set_response = <bound method ConfigurableParsingFactory.set_res...nfigurableParsingFactory instance at 0x01495990>>, response = <response_seek_wrapper at 0x15a7f30 whose wrappe...dist.httplib.HTTPResponse object at 0x0147C1F0>>> |
E:\helloworld\twill\utils.py in set_response(self=<twill.utils.ConfigurableParsingFactory instance at 0x01495990>, response=<response_seek_wrapper at 0x15a7f30 whose wrappe...dist.httplib.HTTPResponse object at 0x0147C1F0>>>) |
322 else: |
323 self.factory = self.basic_factory |
324 cleaned_response = self._cleanup_html(response) |
325 self.factory.set_response(cleaned_response) |
326 |
cleaned_response undefined, self = <twill.utils.ConfigurableParsingFactory instance at 0x01495990>, self._cleanup_html = <bound method ConfigurableParsingFactory._cleanu...nfigurableParsingFactory instance at 0x01495990>>, response = <response_seek_wrapper at 0x15a7f30 whose wrappe...dist.httplib.HTTPResponse object at 0x0147C1F0>>> |
E:\helloworld\twill\utils.py in _cleanup_html(self=<twill.utils.ConfigurableParsingFactory instance at 0x01495990>, response=<response_seek_wrapper at 0x15a7f30 whose wrappe...dist.httplib.HTTPResponse object at 0x0147C1F0>>>) |
358 use_tidy = _options.get('use_tidy') |
359 if use_tidy: |
360 (new_html, errors) = run_tidy(self._html) |
361 if new_html: |
362 self._html = new_html |
new_html undefined, errors undefined, global run_tidy = <function run_tidy at 0x016FC2F0>, self = <twill.utils.ConfigurableParsingFactory instance at 0x01495990>, self._html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra...div>\n\n\n </div>\n </div>\n</body>\n</html>\n\n\n\n\n\n\n' |
E:\helloworld\twill\utils.py in run_tidy(html='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra...div>\n\n\n </div>\n </div>\n</body>\n</html>\n\n\n\n\n\n\n') |
273 if _tidy_exists: |
274 try: |
275 process = subprocess.Popen(_tidy_cmd, stdin=subprocess.PIPE, |
276 stdout=subprocess.PIPE, |
277 stderr=subprocess.PIPE, bufsize=0, |
process undefined, global subprocess = <module 'google.appengine.dist.subprocess' from ..._appengine\google\appengine\dist\subprocess.pyc'>, subprocess.Popen undefined, global _tidy_cmd = ['tidy', '-q', '-ashtml'], stdin undefined, subprocess.PIPE undefined, stdout undefined, stderr undefined, bufsize undefined, shell undefined, builtin False = False |
<type 'exceptions.AttributeError'>: 'module' object has no attribute 'Popen'
args =
("'module' object has no attribute 'Popen'",)
message =
"'module' object has no attribute 'Popen'"