There’s an error message I can’t understand since I don’t see where my code calls it. It appears when using the User object with Google app engine with dev_appserver. Can you tell me what it means?
ERROR 2011-07-15 15:01:07,664 __init__.py:463] 'User' object has no attribute '_User__email'
Traceback (most recent call last):
File "/media/Lexar/projects/google/appengine/ext/webapp/__init__.py", line 700, in __call__
handler.get(*groups)
File "/media/Lexar/projects/myproject/i18n.py", line 313, in get
self.response.out.write(template.render(path, template_values))
File "/media/Lexar/projects/google/appengine/ext/webapp/template.py", line 73, in render
return t.render(Context(template_dict))
File "/media/Lexar/projects/google/appengine/ext/webapp/template.py", line 115, in wrap_render
return orig_render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 173, in render
return self._render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 167, in _render
return self.nodelist.render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 796, in render
bits.append(self.render_node(node, context))
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 809, in render_node
return node.render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/loader_tags.py", line 139, in render
return self.template.render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 173, in render
return self._render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 167, in _render
return self.nodelist.render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 796, in render
bits.append(self.render_node(node, context))
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 809, in render_node
return node.render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/defaulttags.py", line 258, in render
return self.nodelist_true.render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 796, in render
bits.append(self.render_node(node, context))
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 809, in render_node
return node.render(context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 849, in render
return _render_value_in_context(output, context)
File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 829, in _render_value_in_context
value = force_unicode(value)
File "/media/Lexar/projects/lib/django_1_2/django/utils/encoding.py", line 66, in force_unicode
s = unicode(s)
File "/media/Lexar/projects/google/appengine/api/users.py", line 188, in __unicode__
return unicode(self.nickname())
File "/media/Lexar/projects/google/appengine/api/users.py", line 152, in nickname
if (self.__email and self.__auth_domain and
AttributeError: 'User' object has no attribute '_User__email'
EDIT: The error goes away when I remove this code:
'user_url': users.create_logout_url(self.request.uri) if users.get_current_user() else 'login','user' : users.get_current_user(),
So supposedly I’m making some mistake using the User object
UPDATE: It’s seems to have something to do with a monkeypatch I applied. Removing this part removes the error so I’m wondering whether I still need this patch. It’s reported in
def _user_init(self, email=None, _auth_domain=None,
_user_id=None, federated_identity=None, federated_provider=None,
_strict_mode=True):
if not _auth_domain:
_auth_domain = os.environ.get('AUTH_DOMAIN')
assert _auth_domain
if email is None and federated_identity is None:
email = os.environ.get('USER_EMAIL', email)
_user_id = os.environ.get('USER_ID', _user_id)
federated_identity = os.environ.get('FEDERATED_IDENTITY',
federated_identity)
federated_provider = os.environ.get('FEDERATED_PROVIDER',
federated_provider)
if not email and not federated_identity and _strict_mode:
raise UserNotFoundError
self.__email = email
self.__federated_identity = federated_identity
self.__federated_provider = federated_provider
self.__auth_domain = _auth_domain
self.__user_id = _user_id or None
users.User.__init__ = _user_init
Related thread where the monkeypatch comes from
How do I apply a monkeypatch to GAE?
I would guess your error is at import-time of some module:
__init__.pyis the file that define a directory as being a package of modules.You could either look for a line #463 with a
Userobject on it, or selectively removing the imports for understanding which package is at fault.I would guess that for fixing it, you need to make sure when the
Userobject does have a_User__email(which is the mangled name of__email) attribute, but not knowing how you make the call that generate the mistake it’s difficult to say…