Title: Idle does not check user config for extention configuration
Type: enhancement Stage: test needed
Components: IDLE Versions: Python 3.11
Status: open Resolution:
Dependencies: Superseder:
Assigned To: terry.reedy Nosy List: CoolCat467, taleinat, terry.reedy
Priority: normal Keywords: patch

Created on 2021-10-03 21:42 by CoolCat467, last changed 2021-10-08 18:10 by terry.reedy.

Pull Requests
URL Status Linked Edit
PR 28713 open CoolCat467, 2021-10-03 21:44
Messages (4)
msg403112 - (view) Author: CoolCat467 (CoolCat467) * Date: 2021-10-03 21:42
I was trying to write an extension for Idle, and was noticing extension keys defined in ~/.idlerc weren't being used, so I looked into it and found that in idlelib.config.idleConf, `GetExtensionKeys`, `__GetRawExtensionKeys`, and `GetKeyBinding` would never check for user keys, always assuming default keys have everything. This is not always true. In a system with multiple users, you would not want to modify the default config file for a custom extension, as that is used for everyone.
msg403457 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2021-10-08 03:20
I am puzzled by your report. As explained in the top of idlelib/confix-extensions.def, the options for four features are still defined there for compatibility reasons and user changes to those option *are* stored in ~/.idlerc/config-extensions.cfg and read on startup.  At least on Windows with 3.9 and 3.11. I also tested changing options for test extension zzdummy and that works also.  For instance, click enable, exit dialog, exit IDLE, reload, edit something, select Format, and the z options are listed.  The default config is not changed.  What tests did you run?
msg403483 - (view) Author: CoolCat467 (CoolCat467) * Date: 2021-10-08 15:45
Yes, changing settings on ZzDummy works correctly, but this is because an entry for it exists in the default config file. The problem is when if you attempt to add a new extension through the user config file. When IDLE is looking for extensions to load, it only checks the default config file, not the user config file. So if I add a new extension entry to my ~/.idlerc/config-extensions.cfg file, "[lintcheck]\nenable = True", and have a module installed on my system called "lintcheck", with a class named "lintcheck". Because IDLE is only looking in the default config file for extensions to load, it never finds lintcheck and therefore it is never loaded. On the contrary, if it were in the system default config file, IDLE would find it and "lintcheck" would be loaded.
msg403487 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2021-10-08 18:10
The current configuration design is that user .idlerc config-x.cfg files contain changes from the idlelib config-x.def files.  A proposal to change this is an enhancement request rather than a bugfix request.  It will make the logic more complex, increase maintenance burden, and likely make changes to the configuration system harder.

If Python is installed for one user, any changes to config-extensions.def only apply to that one user, just as with additions to site-packages.  If Python is installed for all users, why shouldn't extensions be available to all, just as with additions to site-packages?  Assuming that extensions are by default not enabled, users will have to explicitly enable them, just as they have to explicitly import added packages.

On a system with non-admin users, such as in a classroom, I can imagine that the admin user(s) might not want non-admin users to be able to modify IDLE behavior.  I am reluctant to open this can of worms and would not do so by myself.
Date User Action Args
2021-10-08 18:10:46terry.reedysettype: behavior -> enhancement
stage: patch review -> test needed
messages: + msg403487
versions: + Python 3.11, - Python 3.9
2021-10-08 15:45:02CoolCat467setmessages: + msg403483
2021-10-08 03:20:38terry.reedysetmessages: + msg403457
2021-10-05 23:57:32CoolCat467setnosy: + terry.reedy, taleinat
2021-10-03 21:44:27CoolCat467setkeywords: + patch
stage: patch review
pull_requests: + pull_request27063
2021-10-03 21:42:53CoolCat467setnosy: - terry.reedy

versions: + Python 3.9
2021-10-03 21:42:22CoolCat467create