By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
439,986 Members | 1,583 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,986 IT Pros & Developers. It's quick & easy.

ConfigParser

P: n/a
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &, [ and ] ?


Thanks Manlio Perillo
Jul 18 '05 #1
Share this Question
Share on Google+
11 Replies


P: n/a
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo


just subclass from ConfigParser and add the functionality youself

somthing like:
=== cut here ===
from ConfigParser import ConfigParser
class MyConfigParser(ConfigParser):
def get(self, section, option, raw=False, vars=None): # override
the get() method of super
"""get(section, option, [raw=False], [vars=None]) --> String"""
repl = [('&lbrack;','['),
('&rbrack;',']'),
] # extent as
much as U like
t = ConfigParser.get(self, section, option, raw, vars) # call the
get of super
for x,y in repl: t=t.replace(x,y) # do the
replace stuff
return t

if __name__=="__main__":
"""test"""
import os
open('test.$$$','w').write('[test]\nopt1=Hello&lbrack;Ivo
Woltring&rbrack;\n')
ini = MyConfigParser()
ini.read('test.$$$')
print ini.get('test', 'opt1')
os.unlink('test.$$$')
=== End Cut ===

you can ofcourse do this in reverse for the write function so as not
to have to write the &lbrack; etc. yourself.

Cheerz,
Ivo Woltring
Jul 18 '05 #2

P: n/a
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo

Next try with attachment MyConfigParser.py
Just save and run to see
Cheerz,
Ivo.
Jul 18 '05 #3

P: n/a
On Wed, 10 Nov 2004 15:39:42 +0100, Ivo Woltring <Py****@IvoNet.nl>
wrote:
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo


just subclass from ConfigParser and add the functionality youself

Actually I have written two functions:

def escape(data):
"""Escape &, [ and ] a string of data.
"""
data = data.replace("&", "&amp;")
data = data.replace("[", "&lbrack;")
data = data.replace("]", "&rbrack;")

return data

def unescape(data):
"""Unescape &amp;, &lt;, and &gt; in a string of data.
"""
data = data.replace("&lbrack;", "[")
data = data.replace("&rbrack;", "]")

# must do ampersand last
return data.replace("&amp;", "&")
Maybe also '\n' to &nl; translation should be performed.


Thanks and regards Manlio Perillo
Jul 18 '05 #4

P: n/a
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo


By the way I did some testing because i have a similar thing going on
right now. I found out that

[section]
option = [Ivo Woltring]

is valid and does not have to be translated to
[section]
option = &lbrack;Ivo Woltring&rbrack;

to work.
so my current class is a bit unnessesary:

#
# IniFile extents the ConfigParser with my own functions
#
__author__ = "Ivo Woltring"
__version__ = "01.00"
__copyright__ = "Copyright (c) 2004 Ivo Woltring"
__license__ = "Python"

from ConfigParser import *

class IniFile(ConfigParser):
"""IniFile
Is an extention on the ConfigParser class.
It overrulles the write method so it can write directly to a file
provided as
a parameter. The whole filehandling is done by the IniFile.write(fp)
method.
"""
def __init__(self, defaults=None):
ConfigParser.__init__(self, defaults) # supers init
self.replace = [('&lbrack;','['),
('&rbrack;',']'),
]

def write(self,fp):
"""write(filename) --> written file"""
try:
f = open(fp,'w')
except IOError:
raise IOError
#ConfigParser.write(self,f)
self._write(f)
f.close()

def _replace(self, txt ,reverse=False):
"""Replace the self.replace stuff"""
for source, target in self.replace:
if reverse: txt=txt.replace(target, source)
else: txt=txt.replace(source, target)
return txt

def get(self, section, option, raw=False, vars=None): # override
the get() method of super
"""get(section, option, [raw=False], [vars=None]) --> String
this get() is an extention on the origional ConfigParser.get()
This one translates html style '&lbrack;' to '[' etc.
"""
if raw:
return ConfigParser.get(self, section, option, raw, vars) # call
the get of super
return self._replace(ConfigParser.get(self, section, option, raw,
vars))

def _write(self, fp):
"""Write an .ini-format representation of the configuration
state."""
if self._defaults:
fp.write("[%s]\n" % DEFAULTSECT)
for (key, value) in self._defaults.items():
fp.write("%s = %s\n" %
(key, self._replace(str(value).replace('\n',
'\n\t'), reverse=True)))
fp.write("\n")
for section in self._sections:
fp.write("[%s]\n" % section)
for (key, value) in self._sections[section].items():
if key != "__name__":
fp.write("%s = %s\n" %
(key,
self._replace(str(value).replace('\n', '\n\t'), reverse=True)))
fp.write("\n")

if __name__=="__main__":
import sys,os
p = IniFile()
p.add_section('section')
p.set('section','option','[Ivo Woltring]')
p.write(os.path.splitext(sys.argv[0])[0]+'.ini')
print p.get('section','option')
print p.get('section','option', raw=True)
raw_input('Press enter to continue...')
have fun... I do,

Cheerz, Ivo.

Jul 18 '05 #5

P: n/a
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo


another discovery:

the get() DOES translate &lbrack; etc back to '[' etc, so it seameth
to me that the whole question is mute ;-))

Ivo.
Jul 18 '05 #6

P: n/a
Damn I made a mistake...
The translation IS needed (so sorry ;-(()

here a functional class:

Jul 18 '05 #7

P: n/a
"Ivo Woltring" <Py****@IvoNet.nl> wrote in message
news:35********************************@4ax.com...
<snip>
...the whole question is mute ;-))

Ivo.


The word you are looking for is "moot", not "mute" - this is actually a
common word misuse (known as a "malapropism") even for native English
speakers. :)

Pedantical-ly yours,
-- Paul
Jul 18 '05 #8

P: n/a
On Wed, 10 Nov 2004 21:04:55 +0100, Ivo Woltring <Py****@IvoNet.nl>
wrote:
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo


By the way I did some testing because i have a similar thing going on
right now. I found out that

[section]
option = [Ivo Woltring]

is valid and does not have to be translated to
[section]
option = &lbrack;Ivo Woltring&rbrack;


Yes, I have discovered this too.
But my problem is with section names.

Thanks and regards Manlio Perillo
Jul 18 '05 #9

P: n/a
On Wed, 10 Nov 2004 21:09:39 +0100, Ivo Woltring <Py****@IvoNet.nl>
wrote:
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo


another discovery:

the get() DOES translate &lbrack; etc back to '[' etc, so it seameth
to me that the whole question is mute ;-))

What version are you using?
In Python 2.3.3 get does not handles &lbrack; (or I did not understand
what you are saying).

Thanks and regards Manlio Perillo
Jul 18 '05 #10

P: n/a
On Wed, 10 Nov 2004 21:18:20 GMT, "Paul McGuire"
<pt***@austin.rr._bogus_.com> wrote:
"Ivo Woltring" <Py****@IvoNet.nl> wrote in message
news:35********************************@4ax.com.. .
<snip>
...the whole question is mute ;-))

Ivo.


The word you are looking for is "moot", not "mute" - this is actually a
common word misuse (known as a "malapropism") even for native English
speakers. :)

Pedantical-ly yours,
-- Paul


Thanks for the English lesson. I am not a native English though. I'm
Dutch.

Jul 18 '05 #11

P: n/a
On Wed, 10 Nov 2004 22:37:50 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
On Wed, 10 Nov 2004 21:09:39 +0100, Ivo Woltring <Py****@IvoNet.nl>
wrote:
On Wed, 10 Nov 2004 10:39:27 GMT, Manlio Perillo
<NO******************@libero.it> wrote:
Regards.

Since sections in CongiParser files are delimited by [ and ], why
there is not an escape (and unescape) function for escaping
&, [, and ] characters to &amp;, &lbrack; and &rbrack; ?


Thanks Manlio Perillo


another discovery:

the get() DOES translate &lbrack; etc back to '[' etc, so it seameth
to me that the whole question is mute ;-))

What version are you using?
In Python 2.3.3 get does not handles &lbrack; (or I did not understand
what you are saying).

Thanks and regards Manlio Perillo


You are absolutely right. My 'bad'. I made a mistake in my test.
I posted a correction yesterday, but my attachements don't seem to get
thru.

below my current class:

http://ivonet.nl/cgi-bin/py2html.py?FileID=11

Be patient my connection is not all that fast.
cheerz,
Ivo

Jul 18 '05 #12

This discussion thread is closed

Replies have been disabled for this discussion.