Source code for node_conditional_error

# This file is part of Sympathy for Data.
# Copyright (c) 2016, Combine Control Systems AB
#
# SYMPATHY FOR DATA COMMERCIAL LICENSE
# You should have received a link to the License with Sympathy for Data.
from sympathy.api import node as synode
from sympathy.api.nodeconfig import Port, Ports, Tag, Tags
from sympathy.api.exceptions import SyNodeError, sywarn
from sylib import util


ERROR_LEVEL = ['Error', 'Warning', 'Output']


[docs] class ConditionalError(synode.Node): """ Raise an error if the supplied predicate function returns True. See https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions for a description of lambda functions. Have a look at the :ref:`Data type APIs<datatypeapis>` to see what methods and attributes are available on the data type that you are working with. """ name = 'Conditional error/warning' author = 'Magnus Sandén' icon = '' description = "Raise an error if a predicate is True." nodeid = 'org.sysess.sympathy.data.table.conditionalerror' icon = 'error.svg' tags = Tags(Tag.Development.Test) inputs = Ports([Port.Custom('<a>', 'Input', name='in')]) outputs = Ports([Port.Custom('<a>', 'Output', name='out')]) parameters = synode.parameters() parameters.set_string( 'predicate', label='Predicate function:', value='lambda arg: True', description='Error message is printed if this function returns True.', editor=synode.editors.code_editor()) parameters.set_string( 'error_msg', label='Error message:', value='Error!', description='Error message to display to the user.') parameters.set_list( 'error_type', label='Severity:', list=ERROR_LEVEL, value=[0], description='The level "Error" stops flow execution.', editor=synode.editors.combo_editor()) def execute(self, node_context): predicate_str = node_context.parameters['predicate'].value error_type = node_context.parameters['error_type'].selected error_msg = node_context.parameters['error_msg'].value in_table = node_context.input['in'] out_table = node_context.output['out'] # Evaluate predicate function if util.base_eval(predicate_str)(in_table): if error_type == 'Error': raise SyNodeError(error_msg) elif error_type == 'Warning': sywarn(error_msg) elif error_type == 'Output': print(error_msg) else: raise ValueError('Unknown error_type') # Output is equal to input out_table.source(in_table)