Opened 17 years ago

Last modified 17 years ago

#1149 closed defect

AttributeError: 'long' object has no attribute 'astimezone' — at Version 4

Reported by: sean.kane@… Owned by: Matt Good
Priority: high Component: AccountManagerPlugin
Severity: blocker Keywords: long astimezone Account Manager users
Cc: Trac Release: 0.11

Description (last modified by Noah Kantrowitz)

Originally reported here.

How to Reproduce

While doing a GET operation on /admin/accounts/users, Trac issued an internal error.

System Information

Trac
0.11dev
Python
2.5 (r25:51908, Jan 3 2007, 23:53:09)
GCC
3.2.3 20030502 (Red Hat Linux 3.2.3-56)
MySQL
5.0.27-standard
MySQLdb
1.2.1_p2
Genshi
0.3.6
Pygments
0.6
Subversion
1.4.2

Python Traceback

Traceback (most recent call last):
  File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 395, in dispatch_request
    dispatcher.dispatch(req)
  File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 213, in dispatch
    resp = chosen_handler.process_request(req)
  File "/usr/local/lib/python2.5/site-packages/trac/admin/web_ui.py", line 84, in process_request
    path_info)
  File "build/bdist.linux-i686/egg/acct_mgr/admin.py", line 47, in render_admin_panel
    return self._do_users(req)
  File "build/bdist.linux-i686/egg/acct_mgr/admin.py", line 129, in _do_users
    account['last_visit'] = format_datetime(last_visit)
  File "/usr/local/lib/python2.5/site-packages/trac/util/datefmt.py", line 60, in format_datetime
    t = t.astimezone(tzinfo)
AttributeError: 'long' object has no attribute 'astimezone'

Cut and Paste from the web page:

Trac detected an internal error:

AttributeError?: 'long' object has no attribute 'astimezone'

If you think this should work you can reproduce the problem, you should consider reporting this to the Trac team.

    * File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 395, in dispatch_request
      Code fragment:
       389. req = Request(environ, start_response)
       390. try:
       391. try:
       392. try:
       393. dispatcher = RequestDispatcher(env)
       394. dispatcher.dispatch(req)
       395. except RequestDone:
       396. pass
       397. return req._response or []
       398. finally:
       399. if not run_once:
      Local variables:
      Name	Value
      after 	[' except RequestDone:', ' pass', ' ...
      before 	[' req = Request(environ, start_response)', ' try:', ' try:', ...
      dispatcher 	<trac.web.main.RequestDispatcher object at 0xb6d179ac>
      e 	AttributeError("'long' object has no attribute 'astimezone'",)
      egg_cache 	'/usr/local/share/trac/egg_cache'
      env 	<trac.env.Environment object at 0xb700d60c>
      env_name 	'VMS'
      env_parent_dir 	'/usr/local/share/trac/projects'
      env_path 	'/usr/local/share/trac/projects/VMS'
      env_paths 	None
      environ 	{'HTTP_AUTHORIZATION': 'Basic a2FuZXM6d2FzNDJhYmk=', 'wsgi.multiprocess': ...
      exc_info 	(<type 'exceptions.AttributeError'>, AttributeError("'long' object has no ...
      filename 	'/usr/local/lib/python2.5/site-packages/trac/web/main.py'
      frames 	[{'function': 'dispatch_request', 'lines_before': [' req = ...
      line 	' dispatcher.dispatch(req)'
      lineno 	394
      message 	u"AttributeError: 'long' object has no attribute 'astimezone'"
      options 	{'TracUriRoot': '/projects', 'TracEnvParentDir': ...
      path_info 	['admin', 'accounts', 'users']
      req 	<Request "GET /admin/accounts/users">
      request_uri 	'/projects/VMS/admin/accounts/users'
      root_uri 	'/projects'
      run_once 	False
      start_response 	<bound method ModPythonGateway._start_response of ...
      tb 	<traceback object at 0xb6c4ac0c>
      traceback 	'Traceback (most recent call last):\n File ...
    * File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 213, in dispatch
      Code fragment:
       207. 'Do you have cookies enabled?')
       208.  
       209. # Process the request and render the template
       210. try:
       211. try:
       212. resp = chosen_handler.process_request(req)
       213. if resp:
       214. if len(resp) == 2: # Clearsilver
       215. chrome.populate_hdf(req)
       216. template, content_type = \
       217. self._post_process_request(req, *resp)
      Local variables:
      Name	Value
      chosen_handler 	<trac.admin.web_ui.AdminModule object at 0xb6d17b0c>
      chrome 	<trac.web.chrome.Chrome object at 0xb6cf446c>
      err 	(<type 'exceptions.AttributeError'>, AttributeError("'long' object has no ...
      handler 	<trac.admin.web_ui.AdminModule object at 0xb6d17b0c>
      req 	<Request "GET /admin/accounts/users">
      self 	<trac.web.main.RequestDispatcher object at 0xb6d179ac>
    * File "/usr/local/lib/python2.5/site-packages/trac/admin/web_ui.py", line 84, in process_request
      Code fragment:
        78. provider = providers.get((cat_id, panel_id), None)
        79. if not provider:
        80. raise HTTPNotFound('Unknown administration panel')
        81.  
        82. template, data = provider.render_admin_panel(req, cat_id, panel_id,
        83. path_info)
        84. data.update({
        85. 'active_cat': cat_id, 'active_panel': panel_id,
        86. 'panel_href': partial(req.href, 'admin', cat_id, panel_id),
        87. 'panels': [{
        88. 'category': {'id': panel[0], 'label': panel[1]},
      Local variables:
      Name	Value
      cat_id 	u'accounts'
      panel_id 	u'users'
      panels 	[('accounts', 'Accounts', 'config', 'Configuration'), ('accounts', ...
      path_info 	None
      provider 	<acct_mgr.admin.AccountManagerAdminPage object at 0xb6cda70c>
      providers 	{('general', 'basics'): <trac.admin.web_ui.BasicsAdminPanel object at ...
      req 	<Request "GET /admin/accounts/users">
      self 	<trac.admin.web_ui.AdminModule object at 0xb6d17b0c>
    * File "build/bdist.linux-i686/egg/acct_mgr/admin.py", line 47, in render_admin_panel
      Local variables:
      Name	Value
      cat 	u'accounts'
      page 	u'users'
      path_info 	None
      req 	<Request "GET /admin/accounts/users">
      self 	<acct_mgr.admin.AccountManagerAdminPage object at 0xb6cda70c>
    * File "build/bdist.linux-i686/egg/acct_mgr/admin.py", line 129, in _do_users
      Local variables:
      Name	Value
      account 	{   XXXX DELETED FOR SECURITY XXXX
      accounts 	{   XXXX DELETED FOR SECURITY XXXX
      create_enabled 	True
      cursor 	<trac.db.util.IterableCursor object at 0xb6ca4cd4>
      data 	{'create_enabled': True, 'delete_enabled': True, 'listing_enabled': True}
      db 	<trac.db.pool.PooledConnection object at 0xb6c3462c>
      delete_enabled 	True
      email 	XXXX DELETED FOR SECURITY XXXX
      last_visit 	1167955396L
      listing_enabled 	True
      name 	XXXX DELETED FOR SECURITY XXXX
      perm 	<trac.perm.PermissionSystem object at 0xb6ce630c>
      req 	<Request "GET /admin/accounts/users">
      self 	<acct_mgr.admin.AccountManagerAdminPage object at 0xb6cda70c>
      username 	XXXX DELETED FOR SECURITY XXXX
    * File "/usr/local/lib/python2.5/site-packages/trac/util/datefmt.py", line 60, in format_datetime
      Code fragment:
        54. tzinfo = localtz
        55. if t is None:
        56. t = datetime.now(utc)
        57. if isinstance(t, int):
        58. t = datetime.fromtimestamp(t, tzinfo)
        59. t = t.astimezone(tzinfo)
        60. text = t.strftime(format)
        61. encoding = locale.getpreferredencoding()
        62. if sys.platform != 'win32':
        63. encoding = locale.getlocale(locale.LC_TIME)[1] or encoding
        64. # the above is broken on win32, e.g. we'd get '437' instead of 'cp437'
      Local variables:
      Name	Value
      format 	'%x %X'
      t 	1167955396L
      tzinfo 	<trac.util.datefmt.LocalTimezone object at 0xb70f958c>

File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 394, in dispatch_request
  dispatcher.dispatch(req)
File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 212, in dispatch
  resp = chosen_handler.process_request(req)
File "/usr/local/lib/python2.5/site-packages/trac/admin/web_ui.py", line 83, in process_request
  path_info)
File "build/bdist.linux-i686/egg/acct_mgr/admin.py", line 46, in render_admin_panelFile "build/bdist.linux-i686/egg/acct_mgr/admin.py", line 128, in _do_usersFile "/usr/local/lib/python2.5/site-packages/trac/util/datefmt.py", line 59, in format_datetime
  t = t.astimezone(tzinfo)

Change History (4)

comment:1 Changed 17 years ago by justinjohnson@…

This is also happening for me running Trac 0.11dev, Python 2.4.2, MySQL 4.1.22.

comment:2 Changed 17 years ago by justinjohnson@…

I found the problem. In admin.py last_visit is being retrieved from the database as a long, but the date formatting helpers in trac don't handle the case of a long. They handle int and convert it to a datetime. So adding last_visit = int(last_visit) fixed it.

comment:3 Changed 17 years ago by justinjohnson@…

See the latest comment at http://trac.edgewall.org/ticket/4497#comment:4. It will be fixed in Trac to catch the case of a long.

comment:4 Changed 17 years ago by Noah Kantrowitz

Description: modified (diff)

Fixing formatting

Note: See TracTickets for help on using tickets.