Gdata works on dev_server.py but not on Google AppEngine

7 views
Skip to first unread message

Mark Ellul

unread,
Sep 12, 2008, 6:43:02 AM9/12/08
to Google App Engine
Hi,

I am using the latest version of the Gdata python libs (v 1.2.0) with
the latest google appengine sdk.

My project is migrating a flex frontend application with a python
serverside onto google appengine. The username and password are taken
from flex and passed to my server code which authenticates using the
gdata.contacts.service.ContactsService() object (see below).

[code]
import gdata.contacts.service
import gdata.alt.appengine
gdataService = gdata.contacts.service.ContactsService()
gdata.alt.appengine.run_on_appengine(gdataService)
if(captcha_response != None):
gdataService.ClientLogin(user_name, password, captcha_token =
login_captcha_token, captcha_response = captcha_response )
else:
gdataService.ClientLogin(user_name, password)
[/code]

My main issue is that the below code works on the dev_server.py
however when I update my google appengine app, well it does not work
live. I have retrieved the exception data from below.

TypeError("object of type 'int' has no len()") in putPrefixedString()
(ProtocolBuffer.py:329) <- OutputUnchecked() (urlfetch_service_pb.py:
423) <- OutputUnchecked() (urlfetch_service_pb.py:627) <- Output()
(ProtocolBuffer.py:150) <- MakeCall() (apiproxy.py:144) <-
MakeSyncCall() (apiproxy.py:244) <- MakeSyncCall()
(apiproxy_stub_map.py:46) <- fetch() (urlfetch.py:253) <- request()
(appengine.py:115) <- ProgrammaticLogin() (service.py:449) <-
ClientLogin() (service.py:512) <- login() (iodinexmlrpcserver.py:55)

Any help would be appreciated

Regards

Mark

Jeff S (Google)

unread,
Sep 12, 2008, 6:16:45 PM9/12/08
to Google App Engine
Hi Mark,

It looks like there is a bug in
gdata.alt.appengine.AppEngineHttpClient.request. The section which
calculates the content length should be changed to:

# If the list of headers does not include a Content-Length, attempt to
# calculate it based on the data object.
if data and 'Content-Length' not in all_headers:
all_headers['Content-Length'] = str(len(data_str))

(Note the addition of str above.) It seems that setting the HTTP
header to an int causes an error when running on App Engine, but not
when testing using the SDK. I'll make sure that this is fixed in the
next release.

Thank you,

Jeff

Mark Ellul

unread,
Sep 13, 2008, 4:44:30 PM9/13/08
to Google App Engine
Hi Jeff,

Thanks for your quick response.

Regards

Mark
Reply all
Reply to author
Forward
0 new messages