Add error logging to the HTTP POST workflow action.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -12,7 +12,8 @@ from common import (
|
|||||||
MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary,
|
MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary,
|
||||||
menu_setup, menu_sidebar, menu_tools
|
menu_setup, menu_sidebar, menu_tools
|
||||||
)
|
)
|
||||||
from common.classes import ModelAttribute
|
from common.classes import ErrorLogNamespace, ModelAttribute
|
||||||
|
from common.links import link_error_list
|
||||||
from common.widgets import two_state_template
|
from common.widgets import two_state_template
|
||||||
from mayan.celery import app
|
from mayan.celery import app
|
||||||
from navigation import SourceColumn
|
from navigation import SourceColumn
|
||||||
@@ -62,9 +63,8 @@ class DocumentStatesApp(MayanAppConfig):
|
|||||||
Document = apps.get_model(
|
Document = apps.get_model(
|
||||||
app_label='documents', model_name='Document'
|
app_label='documents', model_name='Document'
|
||||||
)
|
)
|
||||||
|
ErrorLogEntry = apps.get_model(
|
||||||
Document.add_to_class(
|
app_label='common', model_name='ErrorLogEntry'
|
||||||
'workflow', DocumentStateHelper.constructor
|
|
||||||
)
|
)
|
||||||
|
|
||||||
Workflow = self.get_model('Workflow')
|
Workflow = self.get_model('Workflow')
|
||||||
@@ -76,6 +76,12 @@ class DocumentStatesApp(MayanAppConfig):
|
|||||||
WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy')
|
WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy')
|
||||||
WorkflowTransition = self.get_model('WorkflowTransition')
|
WorkflowTransition = self.get_model('WorkflowTransition')
|
||||||
|
|
||||||
|
Document.add_to_class(
|
||||||
|
'workflow', DocumentStateHelper.constructor
|
||||||
|
)
|
||||||
|
|
||||||
|
ErrorLogEntry.objects.register(model=WorkflowStateAction)
|
||||||
|
|
||||||
WorkflowAction.initialize()
|
WorkflowAction.initialize()
|
||||||
|
|
||||||
ModelAttribute(
|
ModelAttribute(
|
||||||
@@ -258,6 +264,7 @@ class DocumentStatesApp(MayanAppConfig):
|
|||||||
menu_object.bind_links(
|
menu_object.bind_links(
|
||||||
links=(
|
links=(
|
||||||
link_setup_workflow_state_action_edit,
|
link_setup_workflow_state_action_edit,
|
||||||
|
link_error_list,
|
||||||
link_setup_workflow_state_action_delete,
|
link_setup_workflow_state_action_delete,
|
||||||
), sources=(WorkflowStateAction,)
|
), sources=(WorkflowStateAction,)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -454,10 +454,10 @@ class WorkflowInstanceLogEntry(models.Model):
|
|||||||
result = super(WorkflowInstanceLogEntry, self).save(*args, **kwargs)
|
result = super(WorkflowInstanceLogEntry, self).save(*args, **kwargs)
|
||||||
|
|
||||||
for action in self.transition.origin_state.exit_actions.all():
|
for action in self.transition.origin_state.exit_actions.all():
|
||||||
action.execute(context={'entry_log': self})
|
action.execute(context={'action': action, 'entry_log': self})
|
||||||
|
|
||||||
for action in self.transition.destination_state.entry_actions.all():
|
for action in self.transition.destination_state.entry_actions.all():
|
||||||
action.execute(context={'entry_log': self})
|
action.execute(context={'action': action, 'entry_log': self})
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
@@ -65,20 +65,38 @@ class HTTPPostAction(WorkflowAction):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
url = Template(self.url).render(
|
try:
|
||||||
context=Context(context)
|
url = Template(self.url).render(
|
||||||
)
|
context=Context(context)
|
||||||
|
)
|
||||||
|
except Exception as exception:
|
||||||
|
context['action'].error_logs.create(
|
||||||
|
result='URL template error: {}'.format(exception)
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
logger.debug('URL template result: %s', url)
|
logger.debug('URL template result: %s', url)
|
||||||
|
|
||||||
result = Template(self.payload or '{}').render(
|
try:
|
||||||
context=Context(context)
|
result = Template(self.payload or '{}').render(
|
||||||
)
|
context=Context(context)
|
||||||
|
)
|
||||||
|
except Exception as exception:
|
||||||
|
context['action'].error_logs.create(
|
||||||
|
result='Payload template error: {}'.format(exception)
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
logger.debug('payload template result: %s', result)
|
logger.debug('payload template result: %s', result)
|
||||||
|
|
||||||
payload = json.loads(result)
|
try:
|
||||||
|
payload = json.loads(result, strict=False)
|
||||||
|
except Exception as exception:
|
||||||
|
context['action'].error_logs.create(
|
||||||
|
result='Payload JSON error: {}'.format(exception)
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
logger.debug('payload json result: %s', payload)
|
logger.debug('payload json result: %s', payload)
|
||||||
|
|
||||||
response = requests.post(url=url, data=payload)
|
requests.post(url=url, data=payload)
|
||||||
|
|||||||
Reference in New Issue
Block a user