Пример #1
0
 def substitute(self, *args, **kws):
     from datastructures import MergeDict as _multimap
     if len(args) > 1:
         raise TypeError('Too many positional arguments')
     if not args:
         mapping = kws
     elif kws:
         mapping = _multimap(kws, args[0])
     else:
         mapping = args[0]
     # Helper function for .sub()
     def convert(mo):
         # Check the most common path first.
         named = mo.group('named') or mo.group('braced')
         if named is not None:
             val = mapping[named]
             # We use this idiom instead of str() because the latter will
             # fail if val is a Unicode containing non-ASCII characters.
             return '%s' % (val,)
         if mo.group('escaped') is not None:
             return self.delimiter
         if mo.group('invalid') is not None:
             self._invalid(mo)
         raise ValueError('Unrecognized named group in pattern',
                          self.pattern)
     return self.pattern.sub(convert, self.template)
Пример #2
0
 def safe_substitute(self, *args, **kws):
     from datastructures import MergeDict as _multimap
     if len(args) > 1:
         raise TypeError('Too many positional arguments')
     if not args:
         mapping = kws
     elif kws:
         mapping = _multimap(kws, args[0])
     else:
         mapping = args[0]
     # Helper function for .sub()
     def convert(mo):
         named = mo.group('named')
         if named is not None:
             try:
                 # We use this idiom instead of str() because the latter
                 # will fail if val is a Unicode containing non-ASCII
                 return '%s' % (mapping[named],)
             except KeyError:
                 return self.delimiter + named
         braced = mo.group('braced')
         if braced is not None:
             try:
                 return '%s' % (mapping[braced],)
             except KeyError:
                 return self.delimiter + '{' + braced + '}'
         if mo.group('escaped') is not None:
             return self.delimiter
         if mo.group('invalid') is not None:
             return self.delimiter
         raise ValueError('Unrecognized named group in pattern',
                          self.pattern)
     return self.pattern.sub(convert, self.template)