Niklas Rosencrantz
Niklas Rosencrantz

Reputation: 26655

Help with error message

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?

Upvotes: 2

Views: 197

Answers (1)

mac
mac

Reputation: 43031

I would guess your error is at import-time of some module:

ERROR    2011-07-15 15:01:07,664 __init__.py:463] 'User' object has no attribute '_User__email'

__init__.py is the file that define a directory as being a package of modules.

You could either look for a line #463 with a User object 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 User object 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...

Upvotes: 1

Related Questions