[issue46307] string.Template should allow inspection of identifiers

2022-01-09 Thread Ben Kehoe
Ben Kehoe added the comment: That doesn’t really seem like a Pythonic way of extracting that information? Nor does it seem like it would be an obvious trick for the average developer to come up with. A method that provides the information directly seems useful

[issue46307] string.Template should allow inspection of identifiers

2022-01-09 Thread Ben Kehoe
Ben Kehoe added the comment: The point is to be able to programmatically determine what is needed for a successful substitute() call. A basic use case for this is better error messages; calling substitute() with an incomplete mapping will tell you only the first missing identifier it encounters

[issue46307] string.Template should allow inspection of identifiers

2022-01-09 Thread Ben Kehoe
Ben Kehoe added the comment: Having slept on it, I realized that if I was presenting interactive prompts for a template, I would expect the prompts to be in order that the identifiers appear in the template. Accordingly, I've updated the PR to maintain ord

[issue46307] string.Template should allow inspection of identifiers

2022-01-08 Thread Ben Kehoe
Ben Kehoe added the comment: I opened a PR. By default, it raises an exception if there's an invalid identifier; there's a keyword argument raise_on_invalid to control that. The implementation I have adds them to a set first, which means the order is not guaranteed. I'm of

[issue46307] string.Template should allow inspection of identifiers

2022-01-08 Thread Ben Kehoe
Change by Ben Kehoe : -- keywords: +patch pull_requests: +28698 stage: -> patch review pull_request: https://github.com/python/cpython/pull/30493 ___ Python tracker <https://bugs.python.org/issu

[issue46307] string.Template should allow inspection of identifiers

2022-01-08 Thread Ben Kehoe
Ben Kehoe added the comment: Happy to make a PR! In my mind I had been thinking it would be the get_identifiers() method with the implementation above, returning a list. As for __iter__, I'm less clear on what that would look like: t = string.Template(...) for identifier in t: #

[issue46307] string.Template should allow inspection of identifiers

2022-01-08 Thread Ben Kehoe
New submission from Ben Kehoe : Currently, the only thing that can be done with a string.Template instance and a mapping is either attempt to substitute with substitute() and catch a KeyError if some identifier has not been provided in the mapping, or substitute with safe_substitute() and