feat(content processor): update processing method

This commit is contained in:
Haoyu Xu
2021-12-31 20:56:19 -05:00
parent 8345741c04
commit 0876ad1351
5 changed files with 100 additions and 83 deletions

View File

@@ -7,9 +7,6 @@ class ContentProcessor:
self.config = config["operators"][operator_name]
self.file_to_process = [key for key, value in self.config.items() if key.startswith("_") is False]
self.settings = self.config
self.evalable = [
"__get_version"
]
self.__process_value()
def process(self, file_path):
@@ -17,8 +14,8 @@ class ContentProcessor:
with open(file_path, "r") as f:
content = f.read()
if file_path.name in self.file_to_process:
content = Formatter(content, "{# ", " #}")
return content.format(**self.settings[file_path.name])
content = Matcher(content, "${format:", "}", self.settings)
return content.format(file_path.name)
else:
return content
@@ -36,32 +33,54 @@ class ContentProcessor:
def __process_value(self):
for item_key, item_value in self.settings.items():
for key, value in item_value.items():
replace_value = value
# if value in evalable
if value in self.evalable:
if value == "__get_version":
replace_value = self.__get_version()
else:
raise Exception("Unsupported function name: {}".format(value))
matcher = Matcher(value, "${", "}", self.settings)
if matcher.match():
replace_value = matcher.process()
else:
replace_value = value
self.settings[item_key][key] = replace_value
# copy dict value _operator_settings.js to {id}_settings.js
settings_filename = "{}_settings.js".format(self.settings["index.html"]["id"])
self.settings[settings_filename] = self.settings["_operator_settings.js"]
self.file_to_process.append(settings_filename)
def __get_version(self):
class Evalable:
def get_version():
with open(pathlib.Path.cwd().joinpath("Version"), "r") as f:
version = f.read()
return version
class Formatter:
def __init__(self, content, start, end):
self.content = content
class Matcher:
def __init__(self, content, start, end, settings):
self.start = start
self.end = end
self.content = str(content)
self.settings = settings
def match(self):
return self.content.startswith(self.start) and self.content.endswith(self.end)
def format(self, **kwargs):
for key, value in kwargs.items():
def process(self):
type = self.content.replace(self.start, "").replace(self.end, "").split(":")[0]
name = self.content.replace(self.start, "").replace(self.end, "").split(":")[1]
if type == "func":
try:
replace_value = eval("Evalable." + name)
except Exception as e:
raise e
elif type == "var":
replace_value = self.settings
for var in name.split("->"):
try:
replace_value = replace_value[var]
except Exception as e:
raise e
else:
raise Exception("Unsupported type: {}".format(type))
return replace_value
def format(self, filename):
for key, value in self.settings[filename].items():
identifier = self.start + key + self.end
self.content = self.content.replace(identifier, str(value))
return self.content
return self.content