Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using the Requests python library in Google App Engine

Tags:

I'm trying to use the awesome Requests library on Google App Engine. I found a patch for urllib3, which requests relies on, that is compatible with App Engine. https://github.com/shazow/urllib3/issues/61

I can successfully

import requests 

but then

response = requests.get('someurl') 

fails with the following traceback. What's going on?

Traceback (most recent call last):   File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/admin/__init__.py", line 317, in post     exec(compiled_code, globals())   File "<string>", line 6, in <module>   File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/api.py", line 52, in get     return request('get', url, **kwargs)   File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/api.py", line 40, in request     return s.request(method=method, url=url, **kwargs)   File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/sessions.py", line 208, in request     r.send(prefetch=prefetch)   File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/models.py", line 458, in send     self.auth = get_netrc_auth(url)   File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/utils.py", line 43, in get_netrc_auth     for loc in locations:   File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/utils.py", line 40, in <genexpr>     locations = (os.path.expanduser('~/{0}'.format(f)) for f in NETRC_FILES)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 260, in expanduser     userhome = pwd.getpwuid(os.getuid()).pw_dir AttributeError: 'module' object has no attribute 'getuid' 
like image 304
rd108 Avatar asked Mar 18 '12 21:03

rd108


People also ask

Does Google App Engine support Python 3?

No, It doesn't. Google App Engine (GAE) uses sandboxed Python 2.7 runtime for Python applications. That is the normal App Engine Hosting. However, in GAE you can use Managed VM Hosting.

What is the latest Python version that can be used for App Engine?

The Python 3.10 runtime is capable of running any framework, library, or binary. Optimized to scale nearly instantaneously to handle huge traffic spikes.


1 Answers

As mentioned, master branch of standalone urllib3 supposedly supports AppEngine now (I'll do a proper PyPI release once someone confirms this fact), but Requests does not yet support AppEngine since it makes assumption about various filesystem things to load configuration files which don't exist on AppEngine. Specifically the error you ran into has to do with loading the ~/.netrc configuration file.

See Issue #493.

For what it's worth, the equivalent in urllib3 would be:

import urllib3 http = urllib3.PoolManager() response = http.request('GET', 'someurl') 

Update: urllib3 v1.3 was released yesterday which includes AppEngine support.

like image 147
shazow Avatar answered Nov 18 '22 14:11

shazow