Warning

This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.tools.error_reports.plugins.json

"""The module describes the ``json`` error plugin."""

import json
import logging
import os
import tempfile

from galaxy.util import string_as_bool
from . import ErrorPlugin

log = logging.getLogger(__name__)


[docs]class JsonPlugin(ErrorPlugin): """Write error report to a JSON file. """ plugin_type = "json"
[docs] def __init__(self, **kwargs): self.app = kwargs['app'] self.verbose = string_as_bool(kwargs.get('verbose', False)) self.redact_user_details_in_bugreport = self.app.config.redact_user_details_in_bugreport self.user_submission = string_as_bool(kwargs.get('user_submission', False)) self.report_directory = kwargs.get("directory", tempfile.gettempdir()) if not os.path.exists(self.report_directory): os.makedirs(self.report_directory)
[docs] def submit_report(self, dataset, job, tool, **kwargs): """Write the report to a json file. """ path = os.path.join(self.report_directory, str(dataset.id)) with open(path, 'w') as handle: data = { 'info': job.info, 'id': job.id, 'command_line': job.command_line, 'destination_id': job.destination_id, 'stderr': job.stderr, 'traceback': job.traceback, 'exit_code': job.exit_code, 'stdout': job.stdout, 'handler': job.handler, 'tool_version': job.tool_version, 'tool_xml': str(tool.config_file) if tool else None } if self.redact_user_details_in_bugreport: data['user'] = { 'id': job.get_user().id } else: data['user'] = job.get_user().to_dict() if 'email' in kwargs: data['email'] = kwargs['email'] if 'message' in kwargs: data['message'] = kwargs['message'] json.dump(data, handle, indent=2) return (f'Wrote error report to {path}', 'success')
__all__ = ('JsonPlugin', )