Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def highcharts_scatter_plot (plotdata, pconfig=None):
"""
Build the HTML needed for a HighCharts scatter plot. Should be
called by scatter.plot(), which properly formats input data.
"""
if pconfig is None:
pconfig = {}
# Get the plot ID
if pconfig.get('id') is None:
pconfig['id'] = 'mqc_hcplot_'+''.join(random.sample(letters, 10))
# Sanitise plot ID and check for duplicates
pconfig['id'] = report.save_htmlid(pconfig['id'])
# Build the HTML for the page
html = '<div class="mqc_hcplot_plotgroup">'
# Buttons to cycle through different datasets
if len(plotdata) > 1:
html += '<div class="btn-group hc_switch_group">\n'
for k, p in enumerate(plotdata):
active = 'active' if k == 0 else ''
try:
name = pconfig['data_labels'][k]['name']
except:
name = k+1
try:
ylab = 'data-ylab="{}"'.format(pconfig['data_labels'][k]['ylab'])
except:</div></div>
def make_table (dt):
"""
Build the HTML needed for a MultiQC table.
:param data: MultiQC datatable object
"""
table_id = dt.pconfig.get('id', 'table_{}'.format(''.join(random.sample(letters, 4))) )
table_id = report.save_htmlid(table_id)
t_headers = OrderedDict()
t_modal_headers = OrderedDict()
t_rows = OrderedDict()
dt.raw_vals = defaultdict(lambda: dict())
empty_cells = dict()
hidden_cols = 1
table_title = dt.pconfig.get('table_title')
if table_title is None:
table_title = table_id.replace("_", " ").title()
for idx, k, header in dt.get_headers_in_order():
rid = header['rid']
# Build the table header cell
shared_key = ''
def matplotlib_bargraph (plotdata, plotsamples, pconfig=None):
"""
Plot a bargraph with Matplot lib and return a HTML string. Either embeds a base64
encoded image within HTML or writes the plot and links to it. Should be called by
plot_bargraph, which properly formats the input data.
"""
if pconfig is None:
pconfig = {}
# Plot group ID
if pconfig.get('id') is None:
pconfig['id'] = 'mqc_mplplot_'+''.join(random.sample(letters, 10))
# Sanitise plot ID and check for duplicates
pconfig['id'] = report.save_htmlid(pconfig['id'])
# Individual plot IDs
pids = []
for k in range(len(plotdata)):
try:
name = pconfig['data_labels'][k]
except:
name = k+1
pid = 'mqc_{}_{}'.format(pconfig['id'], name)
pid = report.save_htmlid(pid, skiplint=True)
pids.append(pid)
html = '<p class="text-info"><small><span aria-hidden="true" class="glyphicon glyphicon-picture"></span> ' + \
'Flat image plot. Toolbox functions such as highlighting / hiding samples will not work ' + \
'(see the <a href="http://multiqc.info/docs/#flat--interactive-plots">docs</a>).</small></p>'
html += '<div id="{}" class="mqc_mplplot_plotgroup">'.format(pconfig['id'])</div>
# Plot group ID
if pconfig.get('id') is None:
pconfig['id'] = 'mqc_mplplot_'+''.join(random.sample(letters, 10))
# Sanitise plot ID and check for duplicates
pconfig['id'] = report.save_htmlid(pconfig['id'])
# Individual plot IDs
pids = []
for k in range(len(plotdata)):
try:
name = pconfig['data_labels'][k]['name']
except:
name = k+1
pid = 'mqc_{}_{}'.format(pconfig['id'], name)
pid = report.save_htmlid(pid, skiplint=True)
pids.append(pid)
html = '<p class="text-info"><small><span aria-hidden="true" class="glyphicon glyphicon-picture"></span> ' + \
'Flat image plot. Toolbox functions such as highlighting / hiding samples will not work ' + \
'(see the <a href="http://multiqc.info/docs/#flat--interactive-plots">docs</a>).</small></p>'
html += '<div id="{}" class="mqc_mplplot_plotgroup">'.format(pconfig['id'])
# Same defaults as HighCharts for consistency
default_colors = ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', '#8085e9',
'#f15c80', '#e4d354', '#2b908f', '#f45b5b', '#91e8e1']
# Buttons to cycle through different datasets
if len(plotdata) > 1 and not config.simple_output:
html += '<div class="btn-group mpl_switch_group mqc_mplplot_bargraph_switchds">\n'
for k, p in enumerate(plotdata):
pid = pids[k]</div></div>
# Plot group ID
if pconfig.get('id') is None:
pconfig['id'] = 'mqc_mplplot_'+''.join(random.sample(letters, 10))
# Sanitise plot ID and check for duplicates
pconfig['id'] = report.save_htmlid(pconfig['id'])
# Individual plot IDs
pids = []
for k in range(len(plotdata)):
try:
name = pconfig['data_labels'][k]
except:
name = k+1
pid = 'mqc_{}_{}'.format(pconfig['id'], name)
pid = report.save_htmlid(pid, skiplint=True)
pids.append(pid)
html = '<p class="text-info"><small><span aria-hidden="true" class="glyphicon glyphicon-picture"></span> ' + \
'Flat image plot. Toolbox functions such as highlighting / hiding samples will not work ' + \
'(see the <a href="http://multiqc.info/docs/#flat--interactive-plots">docs</a>).</small></p>'
html += '<div id="{}" class="mqc_mplplot_plotgroup">'.format(pconfig['id'])
# Same defaults as HighCharts for consistency
default_colors = ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', '#8085e9',
'#f15c80', '#e4d354', '#2b908f', '#f45b5b', '#91e8e1']
# Counts / Percentages Switch
if pconfig.get('cpswitch') is not False and not config.simple_output:
if pconfig.get('cpswitch_c_active', True) is True:
c_active = 'active'
p_active = ''</div>
def __init__(self, name='base', anchor='base', target=None, href=None, info=None, comment=None, extra=None,
autoformat=True, autoformat_type='markdown'):
# Custom options from user config that can overwrite base module values
mod_cust_config = getattr(self, 'mod_cust_config', {})
self.name = mod_cust_config.get('name', name)
self.anchor = report.save_htmlid( mod_cust_config.get('anchor', anchor) )
target = mod_cust_config.get('target', target)
href = mod_cust_config.get('href', href)
info = mod_cust_config.get('info', info)
self.comment = mod_cust_config.get('comment', comment)
extra = mod_cust_config.get('extra', extra)
# Specific module level config to overwrite (e.g. config.bcftools, config.fastqc)
config.update({anchor: mod_cust_config.get('custom_config', {})})
# See if we have a user comment in the config
if self.anchor in config.section_comments:
self.comment = config.section_comments[self.anchor]
if info is None:
info = ''
if extra is None:
extra = ''
def highcharts_bargraph (plotdata, plotsamples=None, pconfig=None):
"""
Build the HTML needed for a HighCharts bar graph. Should be
called by plot_bargraph, which properly formats input data.
"""
if pconfig is None:
pconfig = {}
if pconfig.get('id') is None:
pconfig['id'] = 'mqc_hcplot_'+''.join(random.sample(letters, 10))
# Sanitise plot ID and check for duplicates
pconfig['id'] = report.save_htmlid(pconfig['id'])
html = '<div class="mqc_hcplot_plotgroup">'
# Counts / Percentages / Log Switches
if pconfig.get('cpswitch') is not False or pconfig.get('logswitch') is True:
if pconfig.get('cpswitch_c_active', True) is True:
c_active = 'active'
p_active = ''
l_active = ''
elif pconfig.get('logswitch_active') is True:
c_active = ''
p_active = ''
l_active = 'active'
else:
c_active = ''
p_active = 'active'</div>
plugin_hooks.mqc_trigger('after_modules')
# Remove empty data sections from the General Stats table
empty_keys = [i for i, d in enumerate(report.general_stats_data[:]) if len(d) == 0]
empty_keys.sort(reverse=True)
for i in empty_keys:
del report.general_stats_data[i]
del report.general_stats_headers[i]
# Add general-stats IDs to table row headers
for idx, h in enumerate(report.general_stats_headers):
for k in h.keys():
if 'rid' not in h[k]:
h[k]['rid'] = re.sub(r'\W+', '_', k).strip().strip('_')
ns_html = re.sub(r'\W+', '_', h[k]['namespace']).strip().strip('_').lower()
report.general_stats_headers[idx][k]['rid'] = report.save_htmlid('mqc-generalstats-{}-{}'.format(ns_html, h[k]['rid']))
# Generate the General Statistics HTML & write to file
if len(report.general_stats_data) > 0:
pconfig = {
'id': 'general_stats_table',
'table_title': 'General Statistics',
'save_file': True,
'raw_data_fn':'multiqc_general_stats'
}
report.general_stats_html = table.plot(report.general_stats_data, report.general_stats_headers, pconfig)
else:
config.skip_generalstats = True
# Write the report sources to disk
if config.data_dir is not None:
report.data_sources_tofile()
# Compress the report plot JSON data