Repository 'antismash'
hg clone https://toolshed.g2.bx.psu.edu/repos/bgruening/antismash

Changeset 5:bc88856eddab (2022-07-05)
Previous changeset 4:e78e25d3b4bd (2022-05-31)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/antismash commit dc45770442ff516d6f3733e4bdb284be3163de67
modified:
antismash.xml
macros.xml
added:
harmonize2antismash.py
test-data/harmonize.json
test-data/index.4.html
test-data/index.5.html
test-data/sideload.json
b
diff -r e78e25d3b4bd -r bc88856eddab antismash.xml
--- a/antismash.xml Tue May 31 14:04:07 2022 +0000
+++ b/antismash.xml Tue Jul 05 10:37:38 2022 +0000
[
@@ -23,6 +23,13 @@
             ln -s $genefinding_gff3 annotation.gff3 &&
         #end if
 
+        #if $sideload.file
+            #if $sideload.format == 'harmonize'
+                python '$__tool_directory__/harmonize2antismash.py' '$sideload.file' sideload.json &&
+            #else
+                ln -s '$sideload.file' sideload.json &&
+            #end if
+        #end if
 
         ## create html folder
         mkdir -p '$htmloutputfolder' &&
@@ -62,6 +69,10 @@
             --rre-cutoff $advanced_options.rre_cutoff
             --rre-minlength $advanced_options.rre_minlength
 
+            #if $sideload.file
+                --sideload 'sideload.json'
+            #end if
+
             input_tempfile.$file_extension &&
 
         ## copy all content to html folder
@@ -149,6 +160,14 @@
             <param argument="--rre-minlength" type="integer" min="0" max="100" value="50" label="RRE minlength" help="Minimum amino acid length of RRE domains. Default: 50" />
         </section>
 
+        <section name="sideload" title="Sideloading" help="Sideloading allows you to load external datasets into AntiSMASH">
+            <param argument="--sideload" name="file" type="data" format="json" optional="true" label="sideload json file" help="Sideload json file to add to your report" />
+            <param name="format" type="select" label="Sideload Format">
+                <option value="harmonize">hAMRonize summarize JSON</option>
+                <option value="native">AntiSMASH JSON</option>
+            </param>
+        </section>
+        
         <param name="outputs" type="select" multiple="true" label="Outputs">
             <option value="html" selected="True">HTML file</option>
             <option value="all">All results</option>
@@ -236,6 +255,23 @@
         </output>
     </test>
  
+        <test expect_num_outputs="1">
+            <param name="infile" value="sequence.fasta"/>
+            <section name="sideload">
+                <param name="format" value="native"/>
+                <param name="file" value="sideload.json"/>
+            </section>
+            <output name="html" file="index.4.html"/>
+        </test>
+
+        <test expect_num_outputs="1">
+            <param name="infile" value="sequence.fasta"/>
+            <section name="sideload">
+                <param name="format" value="harmonize"/>
+                <param name="file" value="harmonize.json"/>
+            </section>
+            <output name="html" file="index.5.html"/>
+        </test>
     </tests>
     <help>
 <![CDATA[
b
diff -r e78e25d3b4bd -r bc88856eddab harmonize2antismash.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/harmonize2antismash.py Tue Jul 05 10:37:38 2022 +0000
[
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+import json
+import sys
+
+
+output = {
+    "tool": {
+        "name": "hAMRonize",
+        "version": "?",
+        "description": "Tool for combining results",
+        "configuration": {
+            "verbose": "true", "multisetting": ["first", "second"]
+        },
+    },
+    "records": [],
+}
+
+with open(sys.argv[1], "r") as handle:
+    records = json.load(handle)
+
+    for i in records:
+        start = i["input_gene_start"]
+        end = i["input_gene_stop"]
+        label = i["gene_name"]
+        seqid = i["input_sequence_id"]
+
+        score = i["sequence_identity"]
+        if start <= end:
+            fstart = start - 1
+            fend = end
+        else:
+            fstart = end - 1
+            fend = start
+
+        record = {
+            "name": seqid,
+            "subregions": [
+                {
+                    "start": fstart,
+                    "end": fend,
+                    "label": label,
+                    "details": {"score": str(score)},
+                }
+            ],
+        }
+        output["records"].append(record)
+
+
+with open(sys.argv[2], "w") as handle:
+    json.dump(output, handle, indent=2)
b
diff -r e78e25d3b4bd -r bc88856eddab macros.xml
--- a/macros.xml Tue May 31 14:04:07 2022 +0000
+++ b/macros.xml Tue Jul 05 10:37:38 2022 +0000
b
@@ -1,6 +1,6 @@
 <macros>
     <token name="@TOOL_VERSION@">6.1.1</token>
-    <token name="@VERSION_SUFFIX@">0</token>
+    <token name="@VERSION_SUFFIX@">1</token>
     <xml name="requirements">
         <requirements>
             <requirement type="package" version="@TOOL_VERSION@">antismash</requirement>
b
diff -r e78e25d3b4bd -r bc88856eddab test-data/harmonize.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/harmonize.json Tue Jul 05 10:37:38 2022 +0000
[
@@ -0,0 +1,64 @@
+[
+  {
+    "input_file_name": "ARBH01000003.1",
+    "gene_symbol": "mecA_6",
+    "gene_name": "mecA",
+    "reference_database_id": "resfinder",
+    "reference_database_version": 1,
+    "reference_accession": "BX571856",
+    "analysis_software_name": "abricate",
+    "analysis_software_version": 0.5,
+    "sequence_identity": 100,
+    "input_sequence_id": "ARBH01000003.1",
+    "input_protein_start": null,
+    "input_protein_stop": null,
+    "input_gene_start": 2,
+    "input_gene_stop": 3500,
+    "reference_protein_start": null,
+    "reference_protein_stop": null,
+    "reference_gene_start": null,
+    "reference_gene_stop": null,
+    "strand_orientation": "-",
+    "coverage_depth": null,
+    "coverage_percentage": 100,
+    "coverage_ratio": null,
+    "reference_gene_length": null,
+    "reference_protein_length": null,
+    "input_gene_length": null,
+    "input_protein_length": null,
+    "drug_class": "Amoxicillin;Amoxicillin+Clavulanic_acid;Ampicillin;Ampicillin+Clavulanic_acid;Cefepime;Cefixime;Cefotaxime;Cefoxitin;Ceftazidime;Ertapenem;Imipenem;Meropenem;Piperacillin;Piperacillin+Tazobactam",
+    "antimicrobial_agent": null,
+    "resistance_mechanism": null
+  },
+  {
+    "input_file_name": "ARBH01000003.1",
+    "gene_symbol": "mecA",
+    "gene_name": "mecA",
+    "reference_database_id": "resfinder",
+    "reference_database_version": 1,
+    "reference_accession": "BX571856",
+    "analysis_software_name": "staramr",
+    "analysis_software_version": 0.5,
+    "sequence_identity": 100,
+    "input_sequence_id": "ARBH01000003.1",
+    "input_protein_start": null,
+    "input_protein_stop": null,
+    "input_gene_start": 2,
+    "input_gene_stop": 3500,
+    "reference_protein_start": null,
+    "reference_protein_stop": null,
+    "reference_gene_start": null,
+    "reference_gene_stop": null,
+    "strand_orientation": null,
+    "coverage_depth": null,
+    "coverage_percentage": 100,
+    "coverage_ratio": 1,
+    "reference_gene_length": null,
+    "reference_protein_length": null,
+    "input_gene_length": null,
+    "input_protein_length": null,
+    "drug_class": "unknown[mecA_6_BX571856]",
+    "antimicrobial_agent": null,
+    "resistance_mechanism": null
+  }
+]
b
diff -r e78e25d3b4bd -r bc88856eddab test-data/index.4.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/index.4.html Tue Jul 05 10:37:38 2022 +0000
[
b'@@ -0,0 +1,459 @@\n+\n+<!doctype html>\n+<html lang="en">\n+<head>\n+  <meta charset="utf-8" />\n+  <title>input_tempfile - 1 region(s) - antiSMASH results</title>\n+  <style>img {width: 20px; height: 20px;}</style>\n+  <link rel="stylesheet" type="text/css" href="css/bacteria.css">\n+  <meta property="og:title" content="input_tempfile - 1 record(s) - 1 region(s)" />\n+  <meta property="og:description" content="">\n+  <meta property="og:image" content="https://antismash.secondarymetabolites.org/images/bacteria_logo.png" />\n+  <meta property="og:image:alt" content="antiSMASH logo" />\n+  <meta property="og:image:width" content="600" />\n+  <meta property="og:image:height" content="600" />\n+  <meta property="og:url" content="https://antismash.secondarymetabolites.org/upload/input_tempfile/index.html" />\n+  <meta property="og:type" content="website" />\n+  <meta name="twitter:card" content="summary" />\n+  <meta name="twitter:site" content="@antismash_dev" />\n+</head>\n+\n+<body>\n+  <div id="header">\n+      <nav>\n+    <div class="main-link">\n+     <div>\n+        <a href="https://antismash.secondarymetabolites.org/">\n+          <img src="images/bacteria_antismash_logo.svg" alt="antiSMASH logo" style="width:40px;height:unset;">\n+        </a>\n+       </div>\n+       <div>\n+        <a href="https://antismash.secondarymetabolites.org/">\n+          antiSMASH version 6.1.1\n+        </a>\n+      </div>\n+    </div>\n+    <div class="custom-description"></div>\n+    <div class="ancillary-links">\n+      <div class="ancillary-link dropdown-menu" id="download-dropdown"><a href="#" id="download-dropdown-link"><img src="images/download.svg" alt="download"> &nbsp; Download</a>\n+        <ul class="dropdown-options">\n+        \n+        <li><a href="input_tempfile.zip">Download all results</a></li>\n+        \n+          <li><a href="input_tempfile.gbk">Download GenBank summary file</a></li>\n+        \n+        </ul>\n+      </div>\n+      <div class="ancillary-link"><a href="https://antismash.secondarymetabolites.org/#!/about"><img src="images/about.svg" alt="about"> &nbsp; About</a></div>\n+      <div class="ancillary-link"><a href="https://docs.antismash.secondarymetabolites.org/"><img src="images/help.svg" alt="help"> &nbsp; Help</a></div>\n+      <div class="ancillary-link"><a href="https://antismash.secondarymetabolites.org/#!/contact"><img src="images/contact.svg" alt="contact"> &nbsp; Contact</a></div>\n+    </div>\n+  </nav>\n+    <div id="buttons">\n+      <span id="region-type">Select genomic region:</span>\n+      <div id="regionbuttons">\n+        <div class="arrow-left" id="prev-region"></div>\n+        <div class="regbutton" style="min-width: inherit;"><a href="#">Overview</a></div>\n+        <div style="display: flex; flex-wrap: wrap">\n+        \n+          \n+            <div class="regbutton hybrid r1c1">\n+              <a href="#r1c1">1.1</a>\n+            </div>\n+          \n+        \n+        </div>\n+        <div id="last-regbutton"><div class="arrow-right" id="next-region"></div></div>\n+      </div>\n+    </div>\n+  </div>\n+\n+  <!-- overview page -->\n+  \n+  <div class="page" id="overview">\n+   \n+   \n+     <h3>Identified secondary metabolite regions using strictness &#39;relaxed&#39;<span id="truncated"></span></h3>\n+   \n+   <div class="overview-layout">\n+    <div id="record-tables">\n+     <div id="single-record-tables">\n+     <div class="record-overview-header">\n+        <strong>ARBH01000003.1</strong>\n+        <div class="download-container">\n+          <div class="download-icon-inverse download-svg" data-tag="record-minimap-1" data-filename="ARBH01000003.1_overview.svg">\n+          </div>\n+        </div>\n+      </div>\n+      <div class="record-overview-details">\n+        <svg id="record-minimap-1" class="record-overview-svg" height="1" width="1"></svg>\n+        <table class="region-table">\n+ <thead>\n+  <tr>\n+   <th>Region</th>\n+   <th>Type</th>\n+   <th>From</th>\n+   <th>To</th>\n+   <th colspan="2">Most similar known cluster</th>\n+   <th>Similarity</th>\n+  </tr>\n+ <'..b'load-svg" data-tag="r1c1-details-svg" data-filename="ARBH01000003.1_r1c1_nrps_pks.svg">\n+        </div>\n+      </div>\n+    </div>\n+    <div class="nrps-pks-domain-buttons">\n+      <div class="domains-selected-only switch-container"><span class="switch-desc">Selected features only</span> <label class="switch">  <input class="domains-selected-only" type="checkbox">  <span class="slider"></span> </label></div>\n+      <div class="show-module-domains switch-container"><span class="switch-desc">Show module domains</span> <label class="switch">  <input class="show-module-domains" type="checkbox">  <span class="slider"></span> </label></div>\n+    </div>\n+    <div class="details-svg" id="r1c1-details-svg"></div>\n+</div>\n+    </div>\n+     \n+    \n+     \n+    <div class="body-details-section r1c1-knownclusterblast">\n+      <div class = "knownclusterblast">\n+    <div class="heading">\n+      <span>Similar known gene clusters</span>\n+      <div class="help-container"> <div class="help-icon" data-id="cb-known-help-3"></div> <span class="help-tooltip" id="cb-known-help-3">Shows clusters from the MiBIG database that are similar to the current region. Genes marked with the same colour are interrelated. White genes have no relationship.<br>Click on reference genes to show details of similarities to genes within the current region.<br>Click on an accession to open that entry in the MiBIG database.</span></div>\n+    </div>\n+  \n+  <div>\n+    <p>No matches found.</p>\n+  </div>\n+  \n+</div>\n+    </div>\n+     \n+    <div class="body-details-section r1c1-subclusterblast">\n+      <div class = "subclusterblast">\n+    <div class="heading">\n+      <span>Similar subclusters</span>\n+      <div class="help-container"> <div class="help-icon" data-id="cb-sub-help-4"></div> <span class="help-tooltip" id="cb-sub-help-4">Shows sub-cluster units that are similar to the current region. Genes marked with the same colour are interrelated. White genes have no relationship.<br>Click on reference genes to show details of similarities to genes within the current region.</span></div>\n+    </div>\n+  \n+  <div>\n+    <p>No matches found.</p>\n+  </div>\n+  \n+</div>\n+    </div>\n+     \n+    \n+     \n+    \n+  </div>\n+\n+  <div class="sidepanel">\n+    <div class="sidepanel-details-headers">\n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+    </div>\n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+  </div>\n+\n+ </div>\n+\n+</div>\n+\n+\n+  <footer class="footer">\n+    <div class="container">\n+      <div>\n+        <img src="images/bacteria_antismash_logo.svg" style="height:90px;width:unset;">\n+      </div>\n+      <div class="cite-me">\n+        If you have found antiSMASH useful, please <a href="https://antismash.secondarymetabolites.org/#!/about">cite us</a>.\n+      </div>\n+      <div>\n+        <img src="images/bacteria_antismash_icon.svg" style="height:100px;width:unset;">\n+      </div>\n+    </div>\n+  </footer>\n+\n+  <script src="js/jquery.js"></script>\n+  <script src="js/antismash.js"></script>\n+  <script src="regions.js"></script>\n+  <script>\n+    $(document).ready(function() {\n+        viewer["start"](all_regions, details_data, resultsData, recordData);\n+    })\n+  </script>\n+\n+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">\n+ <defs>\n+  <filter id="inset-shadow">\n+   <feOffset dx="-2" dy="-2"></feOffset>\n+   <feGaussianBlur result="offset-blur" stdDeviation="2"></feGaussianBlur>\n+   <feComposite operator="out" in="SourceGraphic" in2="offset-blur" result="inverse"></feComposite>\n+   <feFlood flood-color="black" result="color" flood-opacity="1"></feFlood>\n+   <feComposite operator="in" in="color" in2="inverse" result="shadow"></feComposite>\n+   <feComponentTransfer in="shadow" result="shadow">\n+    <feFuncA type="linear" slope=".95"></feFuncA>\n+   </feComponentTransfer>\n+   <feComposite operator="over" in="shadow" in2="SourceGraphic"></feComposite>\n+  </filter>\n+ </defs>\n+</svg>\n+</body>\n+</html>\n\\ No newline at end of file\n'
b
diff -r e78e25d3b4bd -r bc88856eddab test-data/index.5.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/index.5.html Tue Jul 05 10:37:38 2022 +0000
[
b'@@ -0,0 +1,459 @@\n+\n+<!doctype html>\n+<html lang="en">\n+<head>\n+  <meta charset="utf-8" />\n+  <title>input_tempfile - 1 region(s) - antiSMASH results</title>\n+  <style>img {width: 20px; height: 20px;}</style>\n+  <link rel="stylesheet" type="text/css" href="css/bacteria.css">\n+  <meta property="og:title" content="input_tempfile - 1 record(s) - 1 region(s)" />\n+  <meta property="og:description" content="">\n+  <meta property="og:image" content="https://antismash.secondarymetabolites.org/images/bacteria_logo.png" />\n+  <meta property="og:image:alt" content="antiSMASH logo" />\n+  <meta property="og:image:width" content="600" />\n+  <meta property="og:image:height" content="600" />\n+  <meta property="og:url" content="https://antismash.secondarymetabolites.org/upload/input_tempfile/index.html" />\n+  <meta property="og:type" content="website" />\n+  <meta name="twitter:card" content="summary" />\n+  <meta name="twitter:site" content="@antismash_dev" />\n+</head>\n+\n+<body>\n+  <div id="header">\n+      <nav>\n+    <div class="main-link">\n+     <div>\n+        <a href="https://antismash.secondarymetabolites.org/">\n+          <img src="images/bacteria_antismash_logo.svg" alt="antiSMASH logo" style="width:40px;height:unset;">\n+        </a>\n+       </div>\n+       <div>\n+        <a href="https://antismash.secondarymetabolites.org/">\n+          antiSMASH version 6.1.1\n+        </a>\n+      </div>\n+    </div>\n+    <div class="custom-description"></div>\n+    <div class="ancillary-links">\n+      <div class="ancillary-link dropdown-menu" id="download-dropdown"><a href="#" id="download-dropdown-link"><img src="images/download.svg" alt="download"> &nbsp; Download</a>\n+        <ul class="dropdown-options">\n+        \n+        <li><a href="input_tempfile.zip">Download all results</a></li>\n+        \n+          <li><a href="input_tempfile.gbk">Download GenBank summary file</a></li>\n+        \n+        </ul>\n+      </div>\n+      <div class="ancillary-link"><a href="https://antismash.secondarymetabolites.org/#!/about"><img src="images/about.svg" alt="about"> &nbsp; About</a></div>\n+      <div class="ancillary-link"><a href="https://docs.antismash.secondarymetabolites.org/"><img src="images/help.svg" alt="help"> &nbsp; Help</a></div>\n+      <div class="ancillary-link"><a href="https://antismash.secondarymetabolites.org/#!/contact"><img src="images/contact.svg" alt="contact"> &nbsp; Contact</a></div>\n+    </div>\n+  </nav>\n+    <div id="buttons">\n+      <span id="region-type">Select genomic region:</span>\n+      <div id="regionbuttons">\n+        <div class="arrow-left" id="prev-region"></div>\n+        <div class="regbutton" style="min-width: inherit;"><a href="#">Overview</a></div>\n+        <div style="display: flex; flex-wrap: wrap">\n+        \n+          \n+            <div class="regbutton PKS T1PKS r1c1">\n+              <a href="#r1c1">1.1</a>\n+            </div>\n+          \n+        \n+        </div>\n+        <div id="last-regbutton"><div class="arrow-right" id="next-region"></div></div>\n+      </div>\n+    </div>\n+  </div>\n+\n+  <!-- overview page -->\n+  \n+  <div class="page" id="overview">\n+   \n+   \n+     <h3>Identified secondary metabolite regions using strictness &#39;relaxed&#39;<span id="truncated"></span></h3>\n+   \n+   <div class="overview-layout">\n+    <div id="record-tables">\n+     <div id="single-record-tables">\n+     <div class="record-overview-header">\n+        <strong>ARBH01000003.1</strong>\n+        <div class="download-container">\n+          <div class="download-icon-inverse download-svg" data-tag="record-minimap-1" data-filename="ARBH01000003.1_overview.svg">\n+          </div>\n+        </div>\n+      </div>\n+      <div class="record-overview-details">\n+        <svg id="record-minimap-1" class="record-overview-svg" height="1" width="1"></svg>\n+        <table class="region-table">\n+ <thead>\n+  <tr>\n+   <th>Region</th>\n+   <th>Type</th>\n+   <th>From</th>\n+   <th>To</th>\n+   <th colspan="2">Most similar known cluster</th>\n+   <th>Similarity</th>\n+  </tr>\n'..b'load-svg" data-tag="r1c1-details-svg" data-filename="ARBH01000003.1_r1c1_nrps_pks.svg">\n+        </div>\n+      </div>\n+    </div>\n+    <div class="nrps-pks-domain-buttons">\n+      <div class="domains-selected-only switch-container"><span class="switch-desc">Selected features only</span> <label class="switch">  <input class="domains-selected-only" type="checkbox">  <span class="slider"></span> </label></div>\n+      <div class="show-module-domains switch-container"><span class="switch-desc">Show module domains</span> <label class="switch">  <input class="show-module-domains" type="checkbox">  <span class="slider"></span> </label></div>\n+    </div>\n+    <div class="details-svg" id="r1c1-details-svg"></div>\n+</div>\n+    </div>\n+     \n+    \n+     \n+    <div class="body-details-section r1c1-knownclusterblast">\n+      <div class = "knownclusterblast">\n+    <div class="heading">\n+      <span>Similar known gene clusters</span>\n+      <div class="help-container"> <div class="help-icon" data-id="cb-known-help-3"></div> <span class="help-tooltip" id="cb-known-help-3">Shows clusters from the MiBIG database that are similar to the current region. Genes marked with the same colour are interrelated. White genes have no relationship.<br>Click on reference genes to show details of similarities to genes within the current region.<br>Click on an accession to open that entry in the MiBIG database.</span></div>\n+    </div>\n+  \n+  <div>\n+    <p>No matches found.</p>\n+  </div>\n+  \n+</div>\n+    </div>\n+     \n+    <div class="body-details-section r1c1-subclusterblast">\n+      <div class = "subclusterblast">\n+    <div class="heading">\n+      <span>Similar subclusters</span>\n+      <div class="help-container"> <div class="help-icon" data-id="cb-sub-help-4"></div> <span class="help-tooltip" id="cb-sub-help-4">Shows sub-cluster units that are similar to the current region. Genes marked with the same colour are interrelated. White genes have no relationship.<br>Click on reference genes to show details of similarities to genes within the current region.</span></div>\n+    </div>\n+  \n+  <div>\n+    <p>No matches found.</p>\n+  </div>\n+  \n+</div>\n+    </div>\n+     \n+    \n+     \n+    \n+  </div>\n+\n+  <div class="sidepanel">\n+    <div class="sidepanel-details-headers">\n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+    </div>\n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+     \n+    \n+  </div>\n+\n+ </div>\n+\n+</div>\n+\n+\n+  <footer class="footer">\n+    <div class="container">\n+      <div>\n+        <img src="images/bacteria_antismash_logo.svg" style="height:90px;width:unset;">\n+      </div>\n+      <div class="cite-me">\n+        If you have found antiSMASH useful, please <a href="https://antismash.secondarymetabolites.org/#!/about">cite us</a>.\n+      </div>\n+      <div>\n+        <img src="images/bacteria_antismash_icon.svg" style="height:100px;width:unset;">\n+      </div>\n+    </div>\n+  </footer>\n+\n+  <script src="js/jquery.js"></script>\n+  <script src="js/antismash.js"></script>\n+  <script src="regions.js"></script>\n+  <script>\n+    $(document).ready(function() {\n+        viewer["start"](all_regions, details_data, resultsData, recordData);\n+    })\n+  </script>\n+\n+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">\n+ <defs>\n+  <filter id="inset-shadow">\n+   <feOffset dx="-2" dy="-2"></feOffset>\n+   <feGaussianBlur result="offset-blur" stdDeviation="2"></feGaussianBlur>\n+   <feComposite operator="out" in="SourceGraphic" in2="offset-blur" result="inverse"></feComposite>\n+   <feFlood flood-color="black" result="color" flood-opacity="1"></feFlood>\n+   <feComposite operator="in" in="color" in2="inverse" result="shadow"></feComposite>\n+   <feComponentTransfer in="shadow" result="shadow">\n+    <feFuncA type="linear" slope=".95"></feFuncA>\n+   </feComponentTransfer>\n+   <feComposite operator="over" in="shadow" in2="SourceGraphic"></feComposite>\n+  </filter>\n+ </defs>\n+</svg>\n+</body>\n+</html>\n\\ No newline at end of file\n'
b
diff -r e78e25d3b4bd -r bc88856eddab test-data/sideload.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/sideload.json Tue Jul 05 10:37:38 2022 +0000
[
@@ -0,0 +1,40 @@
+{
+  "tool": {
+    "name": "Example tool",
+    "version": "1.2.3",
+    "description": "Example of external result sideloading in antiSMASH",
+    "configuration": {
+      "verbose": "true",
+      "multisetting": [
+        "first",
+        "second"
+      ]
+    }
+  },
+  "records": [
+    {
+      "name": "ARBH01000003.1",
+      "subregions": [
+        {
+          "start": 2,
+          "end": 3500,
+          "label": "dhpg biosynthesis",
+          "details": {
+            "score": "6.5"
+          }
+        }
+      ],
+      "protoclusters": [
+        {
+          "core_start": 2,
+          "core_end": 3500,
+          "product": "bht",
+          "details": {
+            "score": "6.5",
+            "some_option_name": "no"
+          }
+        }
+      ]
+    }
+  ]
+}