First version of DefaultDataFilter
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import ast
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Any, Generator
|
||||
|
||||
from core.Expando import Expando
|
||||
from core.utils import UnreferencedNamesVisitor
|
||||
from utils.Datahelper import DataHelper
|
||||
|
||||
|
||||
@@ -88,11 +90,21 @@ class DefaultDataPresenter(DataPresenter):
|
||||
|
||||
return Expando(data.to_dict(self.mappings))
|
||||
|
||||
|
||||
class DefaultDataFilter(DataFilter):
|
||||
def __init__(self, filter_expression: str):
|
||||
super().__init__()
|
||||
self.filter_expression = filter_expression
|
||||
self._ast_tree = ast.parse(filter_expression, "<user input>", 'eval')
|
||||
self._compiled = compile(self._ast_tree, "<string>", "eval")
|
||||
visitor = UnreferencedNamesVisitor()
|
||||
self._unreferenced_names = visitor.get_names(self._ast_tree)
|
||||
|
||||
"""Default data filter that returns True for all data items."""
|
||||
|
||||
def filter(self, data: Any) -> bool:
|
||||
return True
|
||||
my_locals = {name: data.get(name) for name in self._unreferenced_names if hasattr(data, name)}
|
||||
return eval(self._compiled, globals(), my_locals)
|
||||
|
||||
|
||||
class WorkflowEngine:
|
||||
|
||||
Reference in New Issue
Block a user