473,405 Members | 2,287 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,405 software developers and data experts.

ConfigParser

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
11 4854
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
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
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
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
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
Damn I made a mistake...
The translation IS needed (so sorry ;-(()

here a functional class:

Jul 18 '05 #7
"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
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
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
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
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 thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Greg Krohn | last post by:
I'm trying to subclass ConfigParser so I can use a custom __read method (the custom format doesn't conform to RFC 822) when needed. Needless to say, it's not working as expected. In the...
1
by: Martin Maney | last post by:
Summary: with batteries like these, get a longer extension cord? <transcript from interactive session> Python 2.2.1 (#1, Sep 7 2002, 14:34:30) on linux2 Type "help", "copyright",...
2
by: Roy H. Berger | last post by:
If I want to subclass ConfigParser and changed the optionxform method to not return things in lower case wouldn't I just need the following code in my subclasss module? from ConfigParser import...
6
by: Matthew Barnes | last post by:
I'm considering submitting a patch for Python 2.4 to allow environment variable expansion in ConfigParser files. The use cases for this should be obvious. I'd like to be able to specify something...
2
by: rzed | last post by:
I am working with PythonCard in one of my apps. For its purposes, it uses an .ini file that is passed to ConfigParser. For my app, I also need configuration information, but for various reasons,...
10
by: Terry Carroll | last post by:
It looks like ConfigParser will accept a list to be writing to the *.ini file; but when reading it back in, it treats it as a string. Example: ############################### import...
1
by: pipehappy | last post by:
Hello everyone: I came across the module ConfigParser and can use it correctly. import ConfigParser fp = open('test.cfg','w+') config = ConfigParser.ConfigParser() config.readfp(fp)...
4
by: Danil Dotsenko | last post by:
Wrote a little "user-friedly" wrapper for ConfigParser for a KDE's SuperKaramba widget. (http://www.kde-look.org/content/show.php?content=32185) I was using 2.4.x python docs as reference and...
4
by: Phoe6 | last post by:
Hi, I have a configfile, in fact, I am providing a configfile in the format: Name: Foo Author: Bar Testcases: tct123
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.