Using Mechanize with the Google App Engine
A very slight tweak to the code posted by John Lee on the wwwsearch mailing list at SourceForge allows mechanize to work on the google app engine. The code I am using, which is almost all his, is:
<pre>
import urllib2
import copy
import mechanize
import mechanize._response
class GAEMechanizeHTTPHandler(mechanize.BaseHandler):
def __init__(self, gae_http_handler, debuglevel=0):
self._debuglevel = debuglevel
self._gae_http_handler = gae_http_handler
def http_open(self, req):
return self._gae_http_handler.http_open(req)
def make_gae_handler():
return urllib2.HTTPHandler()
def make_http_handler():
gae_handler = make_gae_handler()
return GAEMechanizeHTTPHandler(gae_handler)
class GAEBrowser(mechanize.Browser):
handler_classes = copy.copy(mechanize.Browser.handler_classes)
handler_classes["http"] = make_http_handler
</pre>
Mechanize is not thoroughly tested, but the above does allow my project’s code to pass its regression tests when running on the GAE.






December 13th, 2009 at 8:40 pm
Hi,
I am having problem running mechanize 0.1.11 with GAE (using gae 1.2.8) + winxp64 + eclipse.
I copied the code above and run it, but I got the error below.
Please help..
ERROR 2009-12-14 09:37:50,390 dev_appserver.py:3149] Exception encountered handling request
Traceback (most recent call last):
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 3112, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 3055, in _Dispatch
base_env_dict=env_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 448, in Dispatch
base_env_dict=base_env_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 2315, in Dispatch
self._module_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 2225, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 2121, in ExecuteOrImportScript
exec module_code in script_module.__dict__
File “D:\data\eclipse-php\testpy4\src\hello.py”, line 3, in
import mechanize
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\__init__.py”, line 86, in
from _mechanize import __version__
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_mechanize.py”, line 20, in
from _useragent import UserAgentBase
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_useragent.py”, line 18, in
import _opener
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_opener.py”, line 24, in
import _http
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_http.py”, line 43, in
socket._fileobject(“fake socket”, close=True)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\dist\socket.py”, line 42, in _fileobject
fp.fileno = lambda: None
AttributeError: ’str’ object has no attribute ‘fileno’
INFO 2009-12-14 09:37:50,405 dev_appserver.py:3178] “GET / HTTP/1.1″ 500 -
December 14th, 2009 at 4:40 am
Hi,
I am trying to run this code on Google app engine,
but i got the errors below.
Am I missing something?
ERROR 2009-12-14 09:37:50,390 dev_appserver.py:3149] Exception
encountered handling request
Traceback (most recent call last):
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 3112, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 3055, in _Dispatch
base_env_dict=env_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 448, in Dispatch
base_env_dict=base_env_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 2315, in Dispatch
self._module_dict)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 2225, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 2121, in ExecuteOrImportScript
exec module_code in script_module.__dict__
File “D:\data\eclipse-php\testpy4\src\hello.py”, line 3, in
import mechanize
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\__init__.py”, line
86, in
from _mechanize import __version__
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_mechanize.py”, line
20, in
from _useragent import UserAgentBase
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_useragent.py”, line
18, in
import _opener
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_opener.py”, line
24, in
import _http
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1850, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1752, in FindAndLoadModule
description)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1200, in Decorate
return func(self, *args, **kwargs)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\tools\dev_appserver.py”, line 1703, in LoadModuleRestricted
description)
File “D:\data\eclipse-php\testpy4\src\mechanize\_http.py”, line 43,
in
socket._fileobject(“fake socket”, close=True)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine
\dist\socket.py”, line 42, in _fileobject
fp.fileno = lambda: None
AttributeError: ’str’ object has no attribute ‘fileno’
INFO 2009-12-14 09:37:50,405 dev_appserver.py:3178] “GET / HTTP/
1.1″ 500 -