Just read Jeff Scudder's comment on my recent UpgradeSessionToken post. He pointed out that there is a newer gdata API which externally appears to be a minor change in the API usage. OK. Here goes!
He references the gdata docs which for my app required these changes (consolidated in a diff-like listing):
-import gdata.spreadsheet.service +import gdata.service +import gdata.alt.appengine -gdata.service.http_request_handler = gdata.urlfetch -gd_client = gdata.spreadsheet.service.SpreadsheetsService() +gd_client = gdata.service.GDataService() +gdata.alt.appengine.run_on_appengine(gd_client)
Great! Now we run the app and...
<class 'django.core.exceptions.ViewDoesNotExist'>: Could not import myapp.admin.views. Error was: No module named alt.appengine
Traceback (most recent call last):
File "/base/data/home/apps/rightreply/1.73/main.py", line 45, in <module>
main()
File "/base/data/home/apps/rightreply/1.73/main.py", line 42, in main
util.run_wsgi_app(application)
File "/base/python_lib/versions/1/google/appengine/ext/webapp/util.py", line 76, in run_wsgi_app
result = application(env, _start_response)
File "/base/data/home/apps/rightreply/1.73/django/core/handlers/wsgi.py", line 222, in __call__
response = self.get_response(request)
File "/base/data/home/apps/rightreply/1.73/django/core/handlers/base.py", line 67, in get_response
response = middleware_method(request)
File "/base/data/home/apps/rightreply/1.73/django/middleware/common.py", line 72, in process_request
urlresolvers.resolve("%s/" % request.path_info)
File "/base/data/home/apps/rightreply/1.73/django/core/urlresolvers.py", line 299, in resolve
return get_resolver(urlconf).resolve(path)
File "/base/data/home/apps/rightreply/1.73/django/core/urlresolvers.py", line 240, in resolve
sub_match = pattern.resolve(new_path)
File "/base/data/home/apps/rightreply/1.73/django/core/urlresolvers.py", line 179, in resolve
return self.callback, args, kwargs
File "/base/data/home/apps/rightreply/1.73/django/core/urlresolvers.py", line 188, in _get_callback
raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))
<class 'django.core.exceptions.ViewDoesNotExist'>: Could not import myapp.admin.views. Error was: No module named alt.appengine
Realized the article referenced an updated codebase released two days ago. The code affects the gdata and atom packages/directories. I'm not sure whether I downloaded the client code previously, or if it was created by google's app creation helper, but I had aging copies of the library in my project locally. So, I downloaded the updates and replaced the files:
jonathan$ wget http://gdata-python-client.googlecode.com/files/gdata.py-1.2.0.tar.gz --2008-09-13 01:51:13-- http://gdata-python-client.googlecode.com/files/gdata.py-1.2.0.tar.gz Resolving gdata-python-client.googlecode.com... 74.125.47.82 Connecting to gdata-python-client.googlecode.com|74.125.47.82|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 451038 (440K) [application/x-gzip] Saving to: `gdata.py-1.2.0.tar.gz' 100%[=============================================================================================>] 451,038 92.5K/s in 4.8s 2008-09-13 01:51:20 (92.5 KB/s) - `gdata.py-1.2.0.tar.gz' saved [451038/451038] jonathan$ tar xvzf gdata.py-1.2.0.tar.gz gdata.py-1.2.0/ gdata.py-1.2.0/pydocs/ gdata.py-1.2.0/pydocs/atom.html gdata.py-1.2.0/pydocs/atom.http_interface.html gdata.py-1.2.0/pydocs/atom.mock_http.html gdata.py-1.2.0/pydocs/atom.mock_service.html gdata.py-1.2.0/pydocs/atom.service.html gdata.py-1.2.0/pydocs/atom.token_store.html gdata.py-1.2.0/pydocs/atom.url.html gdata.py-1.2.0/pydocs/gdata.alt.appengine.html gdata.py-1.2.0/pydocs/gdata.apps.html gdata.py-1.2.0/pydocs/gdata.apps.service.html gdata.py-1.2.0/pydocs/gdata.auth.html gdata.py-1.2.0/pydocs/gdata.base.html gdata.py-1.2.0/pydocs/gdata.base.service.html gdata.py-1.2.0/pydocs/gdata.blogger.html gdata.py-1.2.0/pydocs/gdata.blogger.service.html gdata.py-1.2.0/pydocs/gdata.calendar.html gdata.py-1.2.0/pydocs/gdata.calendar.service.html gdata.py-1.2.0/pydocs/gdata.client.html gdata.py-1.2.0/pydocs/gdata.codesearch.html gdata.py-1.2.0/pydocs/gdata.codesearch.service.html gdata.py-1.2.0/pydocs/gdata.contacts.html gdata.py-1.2.0/pydocs/gdata.contacts.service.html gdata.py-1.2.0/pydocs/gdata.docs.html gdata.py-1.2.0/pydocs/gdata.docs.service.html gdata.py-1.2.0/pydocs/gdata.exif.html gdata.py-1.2.0/pydocs/gdata.geo.html gdata.py-1.2.0/pydocs/gdata.html gdata.py-1.2.0/pydocs/gdata.media.html gdata.py-1.2.0/pydocs/gdata.photos.html gdata.py-1.2.0/pydocs/gdata.photos.service.html gdata.py-1.2.0/pydocs/gdata.service.html gdata.py-1.2.0/pydocs/gdata.spreadsheet.html gdata.py-1.2.0/pydocs/gdata.spreadsheet.service.html gdata.py-1.2.0/pydocs/gdata.spreadsheet.text_db.html gdata.py-1.2.0/pydocs/gdata.urlfetch.html gdata.py-1.2.0/pydocs/gdata.youtube.html gdata.py-1.2.0/pydocs/gdata.youtube.service.html gdata.py-1.2.0/pydocs/generate_docs gdata.py-1.2.0/samples/ gdata.py-1.2.0/samples/base/ gdata.py-1.2.0/samples/base/baseQueryExample.py gdata.py-1.2.0/samples/base/dryRunInsert.py gdata.py-1.2.0/samples/blogger/ gdata.py-1.2.0/samples/blogger/BloggerExample.py gdata.py-1.2.0/samples/calendar/ gdata.py-1.2.0/samples/calendar/calendarExample.py gdata.py-1.2.0/samples/contacts/ gdata.py-1.2.0/samples/contacts/contacts_example.py gdata.py-1.2.0/samples/docs/ gdata.py-1.2.0/samples/docs/docs_example.py gdata.py-1.2.0/samples/mashups/ gdata.py-1.2.0/samples/mashups/birthdaySample.py gdata.py-1.2.0/samples/spreadsheets/ gdata.py-1.2.0/samples/spreadsheets/spreadsheetExample.py gdata.py-1.2.0/src/ gdata.py-1.2.0/src/atom/ gdata.py-1.2.0/src/atom/__init__.py gdata.py-1.2.0/src/atom/http.py gdata.py-1.2.0/src/atom/http_interface.py gdata.py-1.2.0/src/atom/mock_http.py gdata.py-1.2.0/src/atom/mock_service.py gdata.py-1.2.0/src/atom/service.py gdata.py-1.2.0/src/atom/token_store.py gdata.py-1.2.0/src/atom/url.py gdata.py-1.2.0/src/gdata/ gdata.py-1.2.0/src/gdata/alt/ gdata.py-1.2.0/src/gdata/alt/__init__.py gdata.py-1.2.0/src/gdata/alt/appengine.py gdata.py-1.2.0/src/gdata/apps/ gdata.py-1.2.0/src/gdata/apps/__init__.py gdata.py-1.2.0/src/gdata/apps/service.py gdata.py-1.2.0/src/gdata/base/ gdata.py-1.2.0/src/gdata/base/__init__.py gdata.py-1.2.0/src/gdata/base/service.py gdata.py-1.2.0/src/gdata/blogger/ gdata.py-1.2.0/src/gdata/blogger/__init__.py gdata.py-1.2.0/src/gdata/blogger/service.py gdata.py-1.2.0/src/gdata/calendar/ gdata.py-1.2.0/src/gdata/calendar/__init__.py gdata.py-1.2.0/src/gdata/calendar/service.py gdata.py-1.2.0/src/gdata/codesearch/ gdata.py-1.2.0/src/gdata/codesearch/__init__.py gdata.py-1.2.0/src/gdata/codesearch/service.py gdata.py-1.2.0/src/gdata/contacts/ gdata.py-1.2.0/src/gdata/contacts/__init__.py gdata.py-1.2.0/src/gdata/contacts/service.py gdata.py-1.2.0/src/gdata/docs/ gdata.py-1.2.0/src/gdata/docs/__init__.py gdata.py-1.2.0/src/gdata/docs/service.py gdata.py-1.2.0/src/gdata/exif/ gdata.py-1.2.0/src/gdata/exif/__init__.py gdata.py-1.2.0/src/gdata/geo/ gdata.py-1.2.0/src/gdata/geo/__init__.py gdata.py-1.2.0/src/gdata/media/ gdata.py-1.2.0/src/gdata/media/__init__.py gdata.py-1.2.0/src/gdata/photos/ gdata.py-1.2.0/src/gdata/photos/__init__.py gdata.py-1.2.0/src/gdata/photos/service.py gdata.py-1.2.0/src/gdata/spreadsheet/ gdata.py-1.2.0/src/gdata/spreadsheet/__init__.py gdata.py-1.2.0/src/gdata/spreadsheet/service.py gdata.py-1.2.0/src/gdata/spreadsheet/text_db.py gdata.py-1.2.0/src/gdata/youtube/ gdata.py-1.2.0/src/gdata/youtube/__init__.py gdata.py-1.2.0/src/gdata/youtube/service.py gdata.py-1.2.0/src/gdata/__init__.py gdata.py-1.2.0/src/gdata/auth.py gdata.py-1.2.0/src/gdata/client.py gdata.py-1.2.0/src/gdata/service.py gdata.py-1.2.0/src/gdata/test_data.py gdata.py-1.2.0/src/gdata/urlfetch.py gdata.py-1.2.0/tests/ gdata.py-1.2.0/tests/atom_tests/ gdata.py-1.2.0/tests/atom_tests/__init__.py gdata.py-1.2.0/tests/atom_tests/http_interface_test.py gdata.py-1.2.0/tests/atom_tests/mock_http_test.py gdata.py-1.2.0/tests/atom_tests/mock_server_test.py gdata.py-1.2.0/tests/atom_tests/service_test.py gdata.py-1.2.0/tests/atom_tests/token_store_test.py gdata.py-1.2.0/tests/atom_tests/url_test.py gdata.py-1.2.0/tests/gdata_tests/ gdata.py-1.2.0/tests/gdata_tests/apps/ gdata.py-1.2.0/tests/gdata_tests/apps/__init__.py gdata.py-1.2.0/tests/gdata_tests/apps/service_test.py gdata.py-1.2.0/tests/gdata_tests/base/ gdata.py-1.2.0/tests/gdata_tests/base/__init__.py gdata.py-1.2.0/tests/gdata_tests/base/service_test.py gdata.py-1.2.0/tests/gdata_tests/blogger/ gdata.py-1.2.0/tests/gdata_tests/blogger/__init__.py gdata.py-1.2.0/tests/gdata_tests/blogger/service_test.py gdata.py-1.2.0/tests/gdata_tests/calendar/ gdata.py-1.2.0/tests/gdata_tests/calendar/__init__.py gdata.py-1.2.0/tests/gdata_tests/calendar/calendar_acl_test.py gdata.py-1.2.0/tests/gdata_tests/calendar/service_test.py gdata.py-1.2.0/tests/gdata_tests/contacts/ gdata.py-1.2.0/tests/gdata_tests/contacts/__init__.py gdata.py-1.2.0/tests/gdata_tests/contacts/service_test.py gdata.py-1.2.0/tests/gdata_tests/docs/ gdata.py-1.2.0/tests/gdata_tests/docs/__init__.py gdata.py-1.2.0/tests/gdata_tests/docs/service_test.py gdata.py-1.2.0/tests/gdata_tests/photos/ gdata.py-1.2.0/tests/gdata_tests/photos/__init__.py gdata.py-1.2.0/tests/gdata_tests/photos/service_test.py gdata.py-1.2.0/tests/gdata_tests/spreadsheet/ gdata.py-1.2.0/tests/gdata_tests/spreadsheet/__init__.py gdata.py-1.2.0/tests/gdata_tests/spreadsheet/service_test.py gdata.py-1.2.0/tests/gdata_tests/spreadsheet/text_db_test.py gdata.py-1.2.0/tests/gdata_tests/youtube/ gdata.py-1.2.0/tests/gdata_tests/youtube/__init__.py gdata.py-1.2.0/tests/gdata_tests/youtube/service_test.py gdata.py-1.2.0/tests/gdata_tests/__init__.py gdata.py-1.2.0/tests/gdata_tests/apps_test.py gdata.py-1.2.0/tests/gdata_tests/auth_test.py gdata.py-1.2.0/tests/gdata_tests/base_test.py gdata.py-1.2.0/tests/gdata_tests/blogger_test.py gdata.py-1.2.0/tests/gdata_tests/calendar_test.py gdata.py-1.2.0/tests/gdata_tests/client_online_test.py gdata.py-1.2.0/tests/gdata_tests/client_test.py gdata.py-1.2.0/tests/gdata_tests/codesearch_test.py gdata.py-1.2.0/tests/gdata_tests/contacts_test.py gdata.py-1.2.0/tests/gdata_tests/docs_test.py gdata.py-1.2.0/tests/gdata_tests/photos_test.py gdata.py-1.2.0/tests/gdata_tests/service_test.py gdata.py-1.2.0/tests/gdata_tests/spreadsheet_test.py gdata.py-1.2.0/tests/gdata_tests/youtube_test.py gdata.py-1.2.0/tests/__init__.py gdata.py-1.2.0/tests/atom_test.py gdata.py-1.2.0/tests/gdata_test.py gdata.py-1.2.0/tests/module_test_runner.py gdata.py-1.2.0/tests/run_all_tests.py gdata.py-1.2.0/tests/run_data_tests.py gdata.py-1.2.0/tests/run_service_tests.py gdata.py-1.2.0/tests/testimage.jpg gdata.py-1.2.0/README.txt gdata.py-1.2.0/RELEASE_NOTES.txt gdata.py-1.2.0/INSTALL.txt gdata.py-1.2.0/MANIFEST gdata.py-1.2.0/setup.py gdata.py-1.2.0/PKG-INFO # And finally... replace the local copies with the updated API libs. jonathan$ cp -r gdata.py-1.2.0/src/gdata gdata.py-1.2.0/src/atom .
Try again and... Resolved! Thanks again for the pointer Jeff
1 comments:
I know this is a really old blog entry but it helped me immensely. Just wanted to say thanks.
Post a Comment