This is a KBase SDK app that can be used within other apps to generate output reports that describe the results of running an app.
Install in your own KBase SDK app with:
$ kb-sdk install KBaseReport
Initialize the client using the callback_url
from your MyModuleImpl.py
class:
from KBaseReport.KBaseReportClient import KBaseReport
...
report_client = KBaseReport(self.callback_url)
Use the method report_client.create_extended_report(params)
to create a report object along with the following parameters, passed as a dictionary:
message
: (optional string) basic result message to show in the reportreport_object_name
: (optional string) a name to give the workspace object that stores the report.workspace_id
: (optional integer) id of your workspace. Preferred overworkspace_name
as it's immutable. Required ifworkspace_name
is absent.workspace_name
: (optional string) string name of your workspace. Requried ifworkspace_id
is absent.direct_html
: (optional string) raw HTML to show in the reporttemplate
: (optional dictionary) a dictionary in the form{'template_file': '/path/to/tmpl', 'template_data_json': "json_data_structure"}
specifying the location of a template file and the data to be rendered in the template. For more information, please see the KBase Templates Repo.objects_created
: (optional list of WorkspaceObject) data objects that were created as a result of running your app, such as assemblies or genomeswarnings
: (optional list of strings) any warnings messages generated from running the appfile_links
: (optional list of dicts) files to attach to the report (see the valid key/vals below)html_links
: (optional list of dicts) HTML files to attach and display in the report (see the additional information below)direct_html_link_index
: (optional integer) index inhtml_links
that you want to use as the main/default report viewhtml_window_height
: (optional float) fixed pixel height of your report viewsummary_window_height
: (optional float) fixed pixel height of the summary within your report
Example usage:
report = report_client.create_extended_report({
'direct_html_link_index': 0,
'html_links': [html_file],
'report_object_name': report_name,
'workspace_name': workspace_name
})
The file_links
and html_links
params can have the following keys:
shock_id
: (required string) Shock ID for a file. Not required ifpath
is present.path
: (required string) Full file path for a file (in scratch). Not required ifshock_id
is present.name
: (required string) name of the filedescription
: (optional string) Readable description of the filetemplate
: (optional dictionary) A dictionary with keystemplate_file
(required) andtemplate_data_json
(optional), specifying a template and accompanying data to be rendered to generate an output file.
For the path
parameter, this can either point to a single file or a directory. If it points to a directory, then it will be zipped and uploaded for you.
If you pass in a directory as your path
for HTML reports, you can include additional files in that directory, such as images or PDFs. You can link to those files from your main HTML page by using relative links.
For more information on using templates, please see the KBase Templates Repo.
Important: Be sure to set the name of your main HTML file (eg.
index.html
) to the'name'
key in yourhtml_links
dictionary.
For example, to generate an HTML report:
html_dir = {
'path': html_dir_path,
'name': 'index.html', # MUST match the filename of your main html page
'description': 'My HTML report'
}
report = report_client.create_extended_report({
'html_links': [html_dir],
'direct_html_link_index': 0,
'report_object_name': report_name,
'workspace_name': workspace_name
})
The KBaseReport app can also be used for rendering one or multiple templates, written in Template Toolkit syntax. Please see the KBase Templates Repo for more information and for examples of existing KBase templates.
# render a single template
# output is in the form {'path': '/path/to/outfile'}
output_file_data = report_client.render_template({
'template_file': os.path.join(scratch_dir, 'templates', 'index.tt'),
'output_file': os.path.join(scratch_dir, 'html', 'index.html'),
'template_data_json': json.dumps({'this': 'that', 'the': 'other'}),
})[0]
# render a list of templates
# output is in the form [{'path': '/path/to/outfile'}, {'path': '/path/to/file_2'}, ... ]
more_output_files = report_client.render_templates([
{
'template_file': os.path.join(scratch_dir, 'templates', 'gene_info.tt',
'output_file': os.path.join(scratch_dir, 'html', gene_data['gene_name'] + '.html',
'template_data_json': json.dumps(gene_data),
},
{
'template_file': os.path.join(scratch_dir, 'templates', 'protein_info.tt',
'output_file': os.path.join(scratch_dir, 'html', 'proteins.html',
'template_data_json': json.dumps(protein_data),
},
}])[0]