Spaces:
Sleeping
Sleeping
#! /usr/bin/env python3 | |
from argparse import ArgumentParser | |
from string import Template | |
def split(string, delimiter): | |
"""Split a string using delimiter. Supports escaping. | |
Args: | |
string (str): The string to split. | |
delimiter (str): The delimiter to split the string with. | |
Returns: | |
list: A list of strings. | |
""" | |
result = [] | |
current = "" | |
escape = False | |
for char in string: | |
if escape: | |
current += char | |
escape = False | |
elif char == delimiter: | |
result.append(current) | |
current = "" | |
elif char == "\\": | |
escape = True | |
else: | |
current += char | |
result.append(current) | |
return result | |
def main(file_path, substitutions, in_place): | |
with open(file_path) as f: | |
pbtxt = Template(f.read()) | |
sub_dict = { | |
"max_queue_size": 0, | |
'max_queue_delay_microseconds': 0, | |
} | |
for sub in split(substitutions, ","): | |
key, value = split(sub, ":") | |
sub_dict[key] = value | |
assert key in pbtxt.template, f"key '{key}' does not exist in the file {file_path}." | |
pbtxt = pbtxt.safe_substitute(sub_dict) | |
if in_place: | |
with open(file_path, "w") as f: | |
f.write(pbtxt) | |
else: | |
print(pbtxt) | |
if __name__ == "__main__": | |
parser = ArgumentParser() | |
parser.add_argument("file_path", help="path of the .pbtxt to modify") | |
parser.add_argument( | |
"substitutions", | |
help= | |
"substitutions to perform, in the format variable_name_1:value_1,variable_name_2:value_2..." | |
) | |
parser.add_argument("--in_place", | |
"-i", | |
action="store_true", | |
help="do the operation in-place") | |
args = parser.parse_args() | |
main(**vars(args)) | |