En Fri, 15 May 2009 12:35:09 -0300, <pyt...@bdurham.com> escribió:

Using Python 2.6 or higher: Is there a way to configure
string.Template() to ignore the case of matched identifiers?
In other words, given the following Template string and
dictionary where all keys are lowercase, is there a way to have
my identifiers expanded based on their lowercase values?
import string
values = dict( name='John Doe', phone='999-555-1212' )
output = string.Template( 'My name is $NAME and my phone is
$Phone.' ).safe_substitute( values )

If you can guarantee the identifiers are all lowercase inside the dictionary:

class lowercase_dict(dict):
    def __getitem__(self, name):
        return dict.__getitem__(self, name.lower())

import string
values = lowercase_dict( name='John Doe', phone='999-555-1212' )
output = string.Template( 'My name is $NAME and my phone is $Phone.' ).safe_substitute( values )

py> output
'My name is John Doe and my phone is 999-555-1212.'

If you cannot guarantee that, subclass string.Template:

class lowercase_template(string.Template):
  def safe_substitute(self, mapping=None, **kws):
    if mapping is None:
      mapping = {}
    m = lowercase_dict((k.lower(),v) for k,v in mapping.items())
    m.update(lowercase_dict((k.lower(),v) for k,v in kws.items()))
    return string.Template.safe_substitute(self, m)

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to