ConfigParser

M

Manlio Perillo

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
 
I

Ivo Woltring

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

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 = [('[','['),
(']',']'),
] # 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[Ivo
Woltring]\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 [ etc. yourself.

Cheerz,
Ivo Woltring
 
I

Ivo Woltring

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


Next try with attachment MyConfigParser.py
Just save and run to see
Cheerz,
Ivo.
 
M

Manlio Perillo

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

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("&", "&")
data = data.replace("[", "[")
data = data.replace("]", "]")

return data

def unescape(data):
"""Unescape &, <, and > in a string of data.
"""
data = data.replace("[", "[")
data = data.replace("]", "]")

# must do ampersand last
return data.replace("&", "&")


Maybe also '\n' to &nl; translation should be performed.




Thanks and regards Manlio Perillo
 
I

Ivo Woltring

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

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 = [Ivo Woltring]

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 = [('[','['),
(']',']'),
]

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 '[' 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.
 
I

Ivo Woltring

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

another discovery:

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

Ivo.
 
I

Ivo Woltring

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

here a functional class:
 
P

Paul McGuire

Ivo Woltring said:
<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
 
M

Manlio Perillo

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
 
M

Manlio Perillo

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
 
I

Ivo Woltring

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.
 
I

Ivo Woltring

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top