forked from GithubBackups/healthchecks
Add "Shell Commands" integration. Fixes #302
This commit is contained in:
parent
8d81ea8f9d
commit
91c93b6a95
38
hc/lib/string.py
Normal file
38
hc/lib/string.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
def replace(template, ctx):
|
||||||
|
"""Replace placeholders with their values and return the result.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
>>> replace("$NAME is down", {"$NAME": "foo"})
|
||||||
|
foo is down
|
||||||
|
|
||||||
|
This function explicitly ignores "variable variables".
|
||||||
|
In this example, placeholder's value itself contains a placeholder:
|
||||||
|
|
||||||
|
>>> replace("Hello $FOO", {"$FOO": "$BAR", "$BAR": "World"})
|
||||||
|
Wrong: Hello World
|
||||||
|
Correct: Hello $BAR
|
||||||
|
|
||||||
|
>>> replace("Hello $$FOO", {"$FOO": "BAR", "$BAR": "World"})
|
||||||
|
Wrong: Hello World
|
||||||
|
Correct: Hello $BAR
|
||||||
|
|
||||||
|
In other words, this function only replaces placeholders that appear
|
||||||
|
in the original template. It ignores any placeholders that "emerge"
|
||||||
|
during string substitutions. This is done mainly to avoid unexpected
|
||||||
|
behavior when check names or tags contain dollar signs.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
parts = template.split("$")
|
||||||
|
|
||||||
|
result = [parts.pop(0)]
|
||||||
|
for part in parts:
|
||||||
|
part = "$" + part
|
||||||
|
for placeholder, value in ctx.items():
|
||||||
|
if part.startswith(placeholder):
|
||||||
|
part = part.replace(placeholder, value, 1)
|
||||||
|
break
|
||||||
|
result.append(part)
|
||||||
|
|
||||||
|
return "".join(result)
|
Loading…
x
Reference in New Issue
Block a user