Skip to content

Commit

Permalink
Merge branch 'development' of https://github.com/danielhrisca/asammdf
Browse files Browse the repository at this point in the history
…into dev/latest
  • Loading branch information
F-Bk committed Oct 10, 2024
2 parents 6693d1c + 9454229 commit 5c9807e
Showing 1 changed file with 29 additions and 9 deletions.
38 changes: 29 additions & 9 deletions src/asammdf/gui/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from .dialogs.messagebox import MessageBox

_BUILTINS = dict(collections.__builtins__)
for key in ("breakpoint", "compile", "eval", "exec", "input", "open", "__import__"):
for key in ("breakpoint", "compile", "eval", "exec", "input", "open"):
del _BUILTINS[key]

for module in (bisect, collections, itertools, random, struct, math, pd, np):
Expand Down Expand Up @@ -155,6 +155,10 @@
VARIABLE_GET_DATA = re.compile(r"get_data\s*\(\s*\"(?P<var>[^\"]+)")
C_FUNCTION = re.compile(r"\s+(?P<function>\S+)\s*\(\s*struct\s+DATA\s+\*data\s*\)")
FUNC_NAME = re.compile(r"def\s+(?P<name>\S+)\s*\(")
IMPORT = re.compile(r"^\s*import\s+")
IMPORT_INNER = re.compile(r";\s*import\s+")
FROM_IMPORT = re.compile(r"^\s*from\s+\S+\s+import\s+")
FROM_INNER_IMPORT = re.compile(r";\s*from\s+\S+\s+import\s+")


def excepthook(exc_type, exc_value, tracebackobj):
Expand Down Expand Up @@ -505,13 +509,13 @@ def compute_signal(

_globals = generate_python_function_globals()

trace = generate_python_variables(global_variables, _globals)
trace = generate_python_variables(global_variables, in_globals=_globals)

if trace:
raise Exception(trace)

for function_name, definition in functions.items():
_func, _trace = generate_python_function(definition, _globals)
_func, _trace = generate_python_function(definition, in_globals=_globals)

if function_name == description["function"]:
func, trace = _func, _trace
Expand Down Expand Up @@ -1169,6 +1173,14 @@ def draw_color_icon(color):
return QtGui.QIcon(pix)


def contains_imports(string):
for line in string.splitlines():
if IMPORT.match(line) or FROM_IMPORT.match(line) or IMPORT_INNER.search(line) or FROM_INNER_IMPORT.search(line):
return True

return False


def generate_python_variables(definition: str, in_globals: Union[dict, None] = None) -> Union[str, None]:
trace = None

Expand All @@ -1178,13 +1190,18 @@ def generate_python_variables(definition: str, in_globals: Union[dict, None] = N
elif in_globals and not isinstance(in_globals, dict):
trace = "'in_globals' must be a dict"
else:
definition = definition.replace("\t", " ")

_globals = in_globals or generate_python_function_globals()
if contains_imports(definition):
trace = "Cannot use import statements in the definition"
else:

try:
exec(definition, _globals)
except:
trace = format_exc()
_globals = in_globals or generate_python_function_globals()

try:
exec(definition, _globals)
except:
trace = format_exc()

return trace

Expand Down Expand Up @@ -1216,6 +1233,10 @@ def generate_python_function(definition: str, in_globals: Union[dict, None] = No

definition = definition.replace("\t", " ")

if contains_imports(definition):
trace = "Cannot use import statements in the definition"
return func, trace

_globals = in_globals or generate_python_function_globals()

if not definition:
Expand Down Expand Up @@ -1290,7 +1311,6 @@ def check_generated_function(func, trace, function_source, silent, parent=None):
except:
sample_by_sample = False
trace = f"Sample by sample: {format_exc()}"
print(f"Sample by sample {kwargs=}: {format_exc()}")
else:
if not isinstance(res, (int, float)):
sample_by_sample = False
Expand Down

0 comments on commit 5c9807e

Please sign in to comment.