This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Add 'surgical editing' to ConfigParser
Type: enhancement Stage: patch review
Components: Library (Lib) Versions: Python 3.5
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: lukasz.langa Nosy List: ajaksu2, anadelonbrin, eric.araujo, fipaddict, jimjjewett, lukasz.langa, mathieui, mcepl, paul.moore, r.david.murray, scott.dial, thijs
Priority: normal Keywords: easy, patch

Created on 2006-01-20 11:12 by anadelonbrin, last changed 2022-04-11 14:56 by admin.

Files
File name Uploaded Description Edit
ConfigParser.diff anadelonbrin, 2006-01-20 11:12 ConfigParser.py diff with 21/01/06 SVN review
libcfgparser.diff anadelonbrin, 2006-01-20 11:13 libcfgparser.tex diff against Jan 06 SVN review
test_cfgparser.diff anadelonbrin, 2006-01-20 11:14 test_cfgparser.py diff against Jan 06 SVN review
Messages (14)
msg49350 - (view) Author: Tony Meyer (anadelonbrin) Date: 2006-01-20 11:12
See also:

[ 1399309 ] ConfigParser to save with order
[ 1371075 ] ConfigParser to accept a custom dict to
allow ordering

The attached patch adds a new method, update_file, to
RawConfigParser.  This method is similar to the
existing write method, but preserves blank lines,
comments, and ordering, as requested many times on
python-dev and python-list.  These are the three
requirements that Guido specified in January 2005.

IMO the attached patch is better than 1399309 because
it includes all the functionality (passing a pointer to
an empty file results in a sorted write() output), but
is completely backwards compatible as write() is
unchanged.    The addition of preserving comments is
also essential for many applications.

IMO the attached patch is better than 1371075 because
the latter really requires a custom class (e.g. the
third party one suggested) in order to be useful.  It
also doesn't address the issue of preserving comments.

The attached patch is essentially a tidied up version
of the one included with SpamBayes (in the
OptionClass.py module), which is used extensively
within SpamBayes (and has been for several years).

Also attached are additional unittests for the new
method, and a documentation patch.

Please let me know if there are recommended changes.

This patch does not address any of the additional
ConfigParser improvements that have been suggested at
various times.
msg49351 - (view) Author: Jim Jewett (jimjjewett) Date: 2006-01-20 15:11
Logged In: YES 
user_id=764593

Wanting to keep the whole thing (except defaultsection) in 
sorted order will probably be a common use case.

It sounds like you can do this by "updating" to an empty 
file, but it isn't the obvious solution.  Could you either 
add an option to sort the whole thing (so inserts may not be 
at the end) or an explicit mention in the docstring of how 
to get this?

msg49352 - (view) Author: Scott Dial (scott.dial) Date: 2006-06-08 07:15
Logged In: YES 
user_id=383208

Before I lose track of the updated patches I made.. They can
be found here:

http://scottdial.com/python-dev/ConfigParser.diff
http://scottdial.com/python-dev/test_cfgparser.diff

The notes I emailed Tony were:

* I have modified the OPTCRE matching to not just throw away
the whitespace after a [=:]. Second, I have modified the
opt.rstrip(), again so that the whitespace isn't just thrown
away. A new variable padded_vi then appears which is a
formatting-preserved version of vi.

* I have removed at least one erroneous write('\n'), and
changed the pattern for adding newlines to missing sections,
such that the newlines are added /before/ the section
heading (and only if there are lines appearing before).
These together solve the growing blank lines phenomena.

* I have modified the add_missing section to deal with
DEFAULTSECT appropriately. Which solves the
appearing/disappearing act that I had mentioned.

* I have updated the test's to match the new expected output. 

---

And in reponse to Jim's comment, such a feature is not in
the scope of the patch. The patch is to explicitly leave
things the way they are, so any sort of sorting would make
no sense.
msg49353 - (view) Author: Paul Moore (paul.moore) * (Python committer) Date: 2007-03-07 13:41
I've looked at the patches attached here. They look reasonable, and in isolation I would be happy for them to be accepted, although I have no personal use for the functionality.

However, patch 131075 (ConfigParser to accept a custom dict to allow ordering) has since been accepted, and in the light of that, this patch may no longer be appropriate. From the descriptions, and a review of the code, I am not clear how the two are related. The justification should be updated to reflect the fact that patch 131075 has been accepted - or if there is no longer sufficient justification for what may well be a second way to do the same thing, then this patch should be withdrawn.

I have looked at Scott Dial's updated patches, but I am not clear on what they add. There has obviously been some discussion which happened off the tracker - as a result I can't comment on the DEFAULTSECT issue. The whitespace stripping issue needs a clearer description. I don't see what is happening here. One or other of the patches is presumably mishandling leading or trailing whitespace in options, but I can't tell which. The "growing blank lines" fix sounds sensible.

Recommendation:

1. The OP should review the justification in the light of the acceptance of patch 1371075.
2. Scott should clarify the issues around the 2 areas I mentioned.
3. An updated patch should be submitted, either by the OP against this tracker, or by someone else (Scott, perhaps) under a new tracker item, pointing back to this one.

Otherwise, I would recommend rejection on the grounds that the functionality now appears to be available via the acceptance of 1371075 (albeit in a form that this patch claims is inferior).

Paul Moore
msg49354 - (view) Author: Tony Meyer (anadelonbrin) Date: 2007-03-18 03:13
I assume that Paul meant 1371075 and not 131075 was accepted.

1371075 didn't do what Guido wanted at the time this patch was opened (or have documentation or unit tests), but I guess opinion has changed over time.

There is incomplete overlap between that patch and this.  This patch is really about being able to modify a configuration file 'in place', without losing the ordering or (importantly) comments.  1371075 provides the first (if you write/find an appropriate ordered dict), but not the second.

However, it seems unlikely that merely preserving comments is enough to make this change worthwhile.  I have no problem with it being rejected or being subsumed into some other patch.
msg83891 - (view) Author: Daniel Diniz (ajaksu2) * (Python triager) Date: 2009-03-20 23:51
Anyone interested in updating this?
msg110440 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2010-07-16 13:49
As noone has shown any interest in this for over three years I suggest it is closed as rejected.  Note also that #1371075 has been accepted and the OP's comments on msg49354.
msg110442 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-07-16 13:55
I want to review and update the patches. I’ll probably have the time to do it in August/September.
msg110443 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-07-16 14:04
Thanks Brian, I’d forgotten I could assign to me. I feel bound now <wink>
msg113324 - (view) Author: Łukasz Langa (lukasz.langa) * (Python committer) Date: 2010-08-08 21:17
Éric, as this is one of the major features I'm implementing at the moment for the great configparser overhaul for Python 3.2, I hope you won't mind me taking this over :)
msg113328 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-08-08 21:31
Be my guest :) Thanks for your work. FYI, note that it seems more usual to ask first before unassigning someone.
msg149139 - (view) Author: Mathieu Pasquet (mathieui) * Date: 2011-12-10 02:13
What is the state of that feature, as of today?
msg220955 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2014-06-18 23:10
According to a review done at the PyCon 2014 sprints, comment and blank line preservation has not yet been implemented.
msg308153 - (view) Author: Fipaddict (fipaddict) Date: 2017-12-12 21:55
I would have liked for configparser to keep comments when my program re-write configuration file too.
Thanks
History
Date User Action Args
2022-04-11 14:56:15adminsetgithub: 42811
2018-03-05 12:02:23mceplsetnosy: + mcepl
2017-12-12 21:55:02fipaddictsetmessages: + msg308153
2017-12-10 21:27:16fipaddictsetnosy: + fipaddict
2014-06-18 23:10:25r.david.murraysetnosy: + r.david.murray
messages: + msg220955
2014-02-05 16:07:38berker.peksagsetversions: + Python 3.5, - Python 3.4
2014-02-03 19:10:49BreamoreBoysetnosy: - BreamoreBoy
2012-07-07 08:35:11lukasz.langasetversions: + Python 3.4, - Python 3.2
2011-12-10 02:13:34mathieuisetnosy: + mathieui
messages: + msg149139
2011-01-04 02:15:15thijssetnosy: + thijs
2010-08-08 21:31:00eric.araujosetmessages: + msg113328
2010-08-08 21:17:57lukasz.langasetassignee: eric.araujo -> lukasz.langa
messages: + msg113324
2010-08-03 10:57:54eric.araujosetnosy: + lukasz.langa
2010-07-16 14:04:43eric.araujosetmessages: + msg110443
versions: + Python 3.2, - Python 3.1, Python 2.7
2010-07-16 13:56:09brian.curtinsetassignee: eric.araujo
2010-07-16 13:55:08eric.araujosetstatus: pending -> open

messages: + msg110442
2010-07-16 13:49:18BreamoreBoysetstatus: open -> pending
nosy: + BreamoreBoy
messages: + msg110440

2010-03-07 04:12:00eric.araujosetnosy: + eric.araujo
2009-04-22 14:36:00ajaksu2setkeywords: + easy
2009-03-20 23:51:01ajaksu2setversions: + Python 3.1, Python 2.7, - Python 2.5
nosy: + ajaksu2

messages: + msg83891

type: enhancement
stage: patch review
2006-01-20 11:12:46anadelonbrincreate