in experimental/piranha_playground/rule_inference/piranha_agent.py [0:0]
def run_piranha(self, toml_dict) -> str:
"""
Runs the inferred rule graph by applying it to the source code using Piranha.
:param toml_dict: Inferred rules in TOML format
:type toml_dict: dict
:return: Refactored code as a result of the rule application
:rtype: str
"""
rules = toml_dict.get("rules", [])
if not rules:
raise PiranhaAgentError("TOML does not include any rule specifications.")
try:
raw_graph = RawRuleGraph.from_toml(toml_dict)
logger.debug(f"Raw graph: {raw_graph.to_toml()}")
res, success = run_piranha_with_timeout(
self.source_code, self.language, raw_graph, timeout=5
)
if not success:
if "QueryError" in res:
raise PiranhaAgentError(
f"One of the provided queries is not valid {res}. "
f"Do not use nodes you cannot see in the tree representation. "
f"Make sure you parenthesis are balanced."
)
raise PiranhaAgentError(f"Piranha failed to execute: {res}.")
return res
except multiprocessing.context.TimeoutError:
raise PiranhaAgentError(
"Piranha in infinite loop. Please add a filter or constraint the query. "
"Remember you can only constraint queries with #eq, #not-eq, #match. "
"Otherwise you need to use a [[rules.filters]] with contains or not_contains."
)