On Thu, 2003-10-23 at 00:16, Guido van Rossum wrote: > There have been many proposals in this area, even a PEP (PEP 215, > which I don't like that much, despite its use of $). And PEP 292, which I probably should update. I should mention that $string substitutions are optional in Mailman 2.1, but they will be the only way to do it in Mailman 3. I've played a lot with various implementations of this idea, and below is the one I've currently settled on. Not all of the semantics may be perfect for core Python (i.e. never throw a KeyError), but this is all doable in modern Python, and for user-exposed templates, gets a +1000 in my book. >>> s = dstring('${person} lives in $where and owes me $$${amount}') >>> d = safedict(person='Guido', where='California', amount='1,000,000') >>> print s % d Guido lives in California and owes me $1,000,000 >>> d = safedict(person='Tim', amount=.13) >>> print s % d Tim lives in ${where} and owes me $0.13 -Barry import re # Search for $$, $identifier, or ${identifier} dre = re.compile(r'(\${2})|\$([_a-z]\w*)|\${([_a-z]\w*)}', re.IGNORECASE) EMPTYSTRING = '' class dstring(unicode): def __new__(cls, ustr): ustr = ustr.replace('%', '%%') parts = dre.split(ustr) for i in range(1, len(parts), 4): if parts[i] is not None: parts[i] = '$' elif parts[i+1] is not None: parts[i+1] = '%(' + parts[i+1] + ')s' else: parts[i+2] = '%(' + parts[i+2] + ')s' return unicode.__new__(cls, EMPTYSTRING.join(filter(None, parts))) class safedict(dict): """Dictionary which returns a default value for unknown keys.""" def __getitem__(self, key): try: return super(safedict, self).__getitem__(key) except KeyError: return '${%s}' % key -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 307 bytes Desc: This is a digitally signed message part Url : http://mail.python.org/pipermail/python-dev/attachments/20031023/2684c83b/attachment.bin
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4