Using percent signs with SafeConfigParser
Peter Otten
__peter__ at web.de
Sun Apr 12 03:57:48 EDT 2009
MRAB wrote:
> Márcio Faustino wrote:
> > On 11 Abr, 20:06, Peter Otten <__pete... at web.de> wrote:
> >> I think you are right. Please file a bug report .
> >
> > I will.
> >
> >> IMO this doesn't fix the problem because
> >>
> >> (1) it allows "%%%" which is also incorrect
> >
> > You're right, how about this one "(?<!%)%(?:%%)*(?!%)"?
> >
> Instead of checking for a 'bad' value, why not check for a 'good' one?
>
> Change:
>
> _badpercent_re = re.compile(r"%[^%]|%$")
>
> to:
>
> _goodpercent_re = re.compile(r"(?:%%|[^%])*$")
>
> and then:
>
> m = self._badpercent_re.search(tmp_value)
> if m:
>
> to:
>
> m = self._goodpercent_re.match(tmp_value)
> if not m:
Configparser also knows a construct "%(whatever)s" which works like Python's
string formatting and takes "whatever" from the "DEFAULT" section of the
config file.
I like your approach, but I think the regex should be
_goodpercent_re = re.compile(r"^(?:%%|%\([^)]+\)s|[^%])*$"
or similar -- what is currently allowed within the parens seems to be an
implementation accident...
Peter
More information about the Python-list
mailing list