Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Import Error for User Model

I have this piece of code which is running perfectly on localhost but throws up this obscure error on GAE:

import_string() failed for 'webapp2_extras.appengine.auth.models.User' . Possible reasons are: - missing __init__.py in a package; - package or module

My import statements:

from webapp2_extras import auth
from webapp2_extras import sessions
from webapp2_extras.auth import InvalidAuthIdError   
from webapp2_extras.auth import InvalidPasswordError

Usage of auth's user model:

user = self.auth.store.user_model.create_user(username, password_raw = password, email = email)
if not user[0]: #returns a tuple with [boolean, user_info]
    return 'Create user error'
else:
    self.set_flash("Thank you for registering. Please login!")
    self.redirect(self.auth_config['login_url'])

Full code

UPDATE (Full stack trace)

import_string() failed for 'webapp2_extras.appengine.auth.models.User'. Possible reasons are:

- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;

Original exception:

ImportError: No module named ndb

Debugged import:

- 'webapp2_extras' found in '/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/__init__.pyc'.
- 'webapp2_extras.appengine' found in '/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/appengine/__init__.pyc'.
- 'webapp2_extras.appengine.auth' found in '/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/appengine/auth/__init__.pyc'.
- 'webapp2_extras.appengine.auth.models' not found.
Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/base/data/home/apps/s~webapp-auth/1.358936463581927371/main.py", line 34, in dispatch
    response = super(BaseHandler, self).dispatch()
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~webapp-auth/1.358936463581927371/main.py", line 127, in post
    user = self.auth.store.user_model.create_user(username, password_raw = password, email = email)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 701, in __get__
    value = self.func(obj)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/auth.py", line 131, in user_model
    cls = self.config['user_model'] = webapp2.import_string(cls)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1824, in import_string
    return getattr(__import__(module, None, None, [obj]), obj)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/appengine/auth/models.py", line 13, in <module>
    from ndb import model
like image 764
Prakhar Avatar asked May 15 '12 18:05

Prakhar


1 Answers

Look similar to this issue which was already fixed by webapp 2.5.1

Make sure you import the latest version of webapp2, by adding those line to your app.yaml file:

libraries:
- name: webapp2
  version: latest

As a workaround you can add the following lines to your application:

 import sys
 from google.appengine.ext import ndb
 sys.modules['ndb'] = ndb
like image 146
proppy Avatar answered Sep 27 '22 22:09

proppy