Opened 15 years ago
Closed 15 years ago
#8808 closed defect (fixed)
KeyError: <Option [account-manager] "account_changes_notify_addresses">
Reported by: | Owned by: | Remy Blank | |
---|---|---|---|
Priority: | high | Milestone: | 0.12 |
Component: | general | Version: | 0.12dev |
Severity: | normal | Keywords: | multirepos |
Cc: | termim@…, r.rossmair@… | Branch: | |
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
My Trac (multirepos-r8782) instance uses AccountManagerPlugin and requires login to view the contents. By chance I've discovered that if I click on the "About Trac" link without logging in then everything is fine, but after logging in it produces an internal error shown below. Obviously it is somehow related to the AccountManagerPlugin plugin and how (badly :) I've configured it, but IMHO Trac should not fail so disgracefully on the about page and the code where the exception happens looks suspicious - the dictionary components is filled up from one source ComponentMeta._components, but then items are extracted from it by keys that are taken from another source - Option.registry.items(). Probably these sources should be in sync but they are not in this case. IMHO the proper fix would somehow combine these two sources into one and eliminate such an errors all together but the following simple patch plugged it for me
Index: config.py =================================================================== --- config.py (revision 8782) +++ config.py (working copy) @@ -485,7 +485,7 @@ if isinstance(attr, Option): components[attr] = cls return dict(each for each in Option.registry.items() - if compmgr.is_enabled(components[each[1]])) + if each[1] in components and compmgr.is_enabled(components[each[1]])) def __init__(self, section, name, default=None, doc=''): """Create the configuration option.
How to Reproduce
While doing a GET operation on /about
, Trac issued an internal error.
(please provide additional details here)
User Agent was: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090730 SUSE/3.5.2-2.1 Firefox/3.5.2 GTB5
System Information
Trac | 0.12multirepos-r8782
|
Python | 2.5.2 (r252:60911, Jun 7 2008, 00:38:48) [GCC 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]]
|
setuptools | 0.6c11
|
SQLite | 3.6.14
|
pysqlite | 2.4.1
|
Genshi | 0.6dev-r1052
|
Babel | -
|
mod_python | 3.3.1
|
Pygments | 1.0
|
jQuery: | 1.3.2
|
Python Traceback
Traceback (most recent call last): File "/usr/local/lib64/python2.5/site-packages/trac/web/main.py", line 486, in _dispatch_request dispatcher.dispatch(req) File "/usr/local/lib64/python2.5/site-packages/trac/web/main.py", line 223, in dispatch resp = chosen_handler.process_request(req) File "/usr/local/lib64/python2.5/site-packages/trac/about.py", line 64, in process_request defaults = self.config.defaults(self.compmgr) File "/usr/local/lib64/python2.5/site-packages/trac/config.py", line 147, in defaults for (section, key), option in Option.get_registry(compmgr).items(): File "/usr/local/lib64/python2.5/site-packages/trac/config.py", line 487, in get_registry return dict(each for each in Option.registry.items() File "/usr/local/lib64/python2.5/site-packages/trac/config.py", line 488, in <genexpr> if compmgr.is_enabled(components[each[1]])) KeyError: <Option [account-manager] "account_changes_notify_addresses">
Attachments (0)
Change History (5)
comment:1 by , 15 years ago
Owner: | set to |
---|
comment:2 by , 15 years ago
Cc: | added |
---|
comment:3 by , 15 years ago
Milestone: | 0.12-multirepos → 0.12 |
---|
comment:4 by , 15 years ago
This is due to AccountManagerPlugin defining that particular option ([account-manager] account_changes_notify_addresses
) in a class that is not a Component
. When I wrote that code, I assumed this was a requirement, but this is not the case.
comment:5 by , 15 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed in [8804]. As we have no way of knowing if an Option
defined in a non-Component
class is enabled or not, it will always be shown. Of course, it would be better if AccountManagerPlugin defined that Option
in e.g. AccountChangeListener
, so that it can be hidden if the component is disabled.
Thanks for the bug report!
I'll look into this.