import string
class FormatPlaceholder:
def __init__(self, key):
self.key = key
def __format__(self, spec):
result = self.key
if spec:
result += ":" + spec
return "{" + result + "}"
class FormatDict(dict):
def __missing__(self, key):
return FormatPlaceholder(key)
s = '{foo} {bar} {baz:123xyz}'
formatter = string.Formatter()
mapping = FormatDict(foo='FOO')
print(formatter.vformat(s, (), mapping))
aW1wb3J0IHN0cmluZwoKY2xhc3MgRm9ybWF0UGxhY2Vob2xkZXI6CiAgICBkZWYgX19pbml0X18oc2VsZiwga2V5KToKICAgICAgICBzZWxmLmtleSA9IGtleQogICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlYyk6CiAgICAJcmVzdWx0ID0gc2VsZi5rZXkKICAgIAlpZiBzcGVjOgogICAgCQlyZXN1bHQgKz0gIjoiICsgc3BlYwogICAgCXJldHVybiAieyIgKyByZXN1bHQgKyAifSIKCmNsYXNzIEZvcm1hdERpY3QoZGljdCk6CiAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgICAgICByZXR1cm4gRm9ybWF0UGxhY2Vob2xkZXIoa2V5KQogICAgICAgIApzID0gJ3tmb299IHtiYXJ9IHtiYXo6MTIzeHl6fScKZm9ybWF0dGVyID0gc3RyaW5nLkZvcm1hdHRlcigpCm1hcHBpbmcgPSBGb3JtYXREaWN0KGZvbz0nRk9PJykKcHJpbnQoZm9ybWF0dGVyLnZmb3JtYXQocywgKCksIG1hcHBpbmcpKQ==