59 if isinstance(node, ast.Constant)
and isinstance(node.value, (int, float)):
62 if isinstance(node, ast.BinOp):
63 return operators[type(node.op)](
_eval(node.left),
_eval(node.right))
65 if isinstance(node, ast.UnaryOp):
66 return operators[type(node.op)](
_eval(node.operand))
82 p = mp_fork.Process(target=handler, args=(que, func, args), kwargs=kwargs)
84 p.join(timeout=timeout)
90 logger.debug(
"terminate function after timeout is exceeded")
101 if search.search_query.pageno > 1:
104 query = search.search_query.query
110 query = query.replace(
"x",
"*").replace(
":",
"/")
113 ui_locale = babel.Locale.parse(request.preferences.get_value(
'locale'), sep=
'-')
116 def _decimal(match: re.Match) -> str:
117 val = match.string[match.start() : match.end()]
118 val = babel.numbers.parse_decimal(val, ui_locale, numbering_system=
"latn")
121 decimal = ui_locale.number_symbols[
"latn"][
"decimal"]
122 group = ui_locale.number_symbols[
"latn"][
"group"]
123 query = re.sub(f
"[0-9]+[{decimal}|{group}][0-9]+[{decimal}|{group}]?[0-9]?", _decimal, query)
126 if any(str.isalpha(c)
for c
in query):
130 query_py_formatted = query.replace(
"^",
"**")
133 res =
timeout_func(0.05, _eval_expr, query_py_formatted)
134 if res
is None or res ==
"":
137 res = babel.numbers.format_decimal(res, locale=ui_locale)
138 results.add(results.types.Answer(answer=f
"{search.search_query.query} = {res}"))