mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-1198569: Allow string.Template braced pattern to be different (#3288)
* bpo-1198569: Allow the braced pattern to be different ``string.Template`` subclasses can optionally define ``braceidpattern`` if they want to specify different placeholder patterns inside and outside the braces. If None (the default) it falls back to ``idpattern``.
This commit is contained in:
parent
f9f17346d7
commit
ba4279683f
4 changed files with 45 additions and 4 deletions
|
@ -282,6 +282,30 @@ class TestTemplate(unittest.TestCase):
|
|||
s = PathPattern('$bag.foo.who likes to eat a bag of $bag.what')
|
||||
self.assertEqual(s.substitute(m), 'tim likes to eat a bag of ham')
|
||||
|
||||
def test_idpattern_override_inside_outside(self):
|
||||
# bpo-1198569: Allow the regexp inside and outside braces to be
|
||||
# different when deriving from Template.
|
||||
class MyPattern(Template):
|
||||
idpattern = r'[a-z]+'
|
||||
braceidpattern = r'[A-Z]+'
|
||||
flags = 0
|
||||
m = dict(foo='foo', BAR='BAR')
|
||||
s = MyPattern('$foo ${BAR}')
|
||||
self.assertEqual(s.substitute(m), 'foo BAR')
|
||||
|
||||
def test_idpattern_override_inside_outside_invalid_unbraced(self):
|
||||
# bpo-1198569: Allow the regexp inside and outside braces to be
|
||||
# different when deriving from Template.
|
||||
class MyPattern(Template):
|
||||
idpattern = r'[a-z]+'
|
||||
braceidpattern = r'[A-Z]+'
|
||||
flags = 0
|
||||
m = dict(foo='foo', BAR='BAR')
|
||||
s = MyPattern('$FOO')
|
||||
self.assertRaises(ValueError, s.substitute, m)
|
||||
s = MyPattern('${bar}')
|
||||
self.assertRaises(ValueError, s.substitute, m)
|
||||
|
||||
def test_pattern_override(self):
|
||||
class MyPattern(Template):
|
||||
pattern = r"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue