When we encounter a name error running a script, look in the task data and see if there is a variable with a similar name.
If a variable with a similar name exists, add it to the ApiError as a hint
This commit is contained in:
parent
fafa79a07d
commit
db44882733
|
@ -30,6 +30,8 @@ from crc.services.file_service import FileService
|
||||||
from crc import app
|
from crc import app
|
||||||
from crc.services.user_service import UserService
|
from crc.services.user_service import UserService
|
||||||
|
|
||||||
|
from difflib import SequenceMatcher
|
||||||
|
|
||||||
class CustomBpmnScriptEngine(BpmnScriptEngine):
|
class CustomBpmnScriptEngine(BpmnScriptEngine):
|
||||||
"""This is a custom script processor that can be easily injected into Spiff Workflow.
|
"""This is a custom script processor that can be easily injected into Spiff Workflow.
|
||||||
It will execute python code read in from the bpmn. It will also make any scripts in the
|
It will execute python code read in from the bpmn. It will also make any scripts in the
|
||||||
|
@ -64,9 +66,21 @@ class CustomBpmnScriptEngine(BpmnScriptEngine):
|
||||||
f'please correct the following:'
|
f'please correct the following:'
|
||||||
f' {script}, {e.msg}')
|
f' {script}, {e.msg}')
|
||||||
except NameError as e:
|
except NameError as e:
|
||||||
raise ApiError('name_error',
|
def get_most_similar(task_data, name_error):
|
||||||
f'something you are referencing does not exist:'
|
bad_variable = str(name_error)[6:-16]
|
||||||
f' {script}, {e}')
|
highest_ratio = 0
|
||||||
|
most_similar = None
|
||||||
|
for item in task_data:
|
||||||
|
ratio = SequenceMatcher(None, item, bad_variable).ratio()
|
||||||
|
if ratio > highest_ratio:
|
||||||
|
most_similar = item
|
||||||
|
highest_ratio = ratio
|
||||||
|
return most_similar, int(highest_ratio*100)
|
||||||
|
most_similar, highest_ratio = get_most_similar(data, e)
|
||||||
|
error_message = f'something you are referencing does not exist: {script}, {e}.'
|
||||||
|
if highest_ratio > 50:
|
||||||
|
error_message += f' Did you mean \'{most_similar}\'?'
|
||||||
|
raise ApiError('name_error', error_message)
|
||||||
|
|
||||||
|
|
||||||
def evaluate_expression(self, task, expression):
|
def evaluate_expression(self, task, expression):
|
||||||
|
|
Loading…
Reference in New Issue