Repository 'jbrowse2'
hg clone https://toolshed.g2.bx.psu.edu/repos/fubar/jbrowse2

Changeset 73:3b2815efa5d9 (2024-04-01)
Previous changeset 72:2bdb748df098 (2024-03-30) Next changeset 74:13ede71c3a4b (2024-04-01)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit b361309b05a861da9b64e1324157a8c32767e0bf
modified:
jbrowse2.py
jbrowse2.xml
added:
config.json
b
diff -r 2bdb748df098 -r 3b2815efa5d9 config.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/config.json Mon Apr 01 03:41:42 2024 +0000
[
@@ -0,0 +1,9 @@
+{
+  "assemblies": [],
+  "configuration": {},
+  "connections": [],
+  "defaultSession": {
+    "name": "New Session"
+  },
+  "tracks": []
+}
\ No newline at end of file
b
diff -r 2bdb748df098 -r 3b2815efa5d9 jbrowse2.py
--- a/jbrowse2.py Sat Mar 30 22:33:29 2024 +0000
+++ b/jbrowse2.py Mon Apr 01 03:41:42 2024 +0000
[
b'@@ -8,6 +8,7 @@\n import os\n import re\n import shutil\n+import ssl\n import struct\n import subprocess\n import tempfile\n@@ -39,6 +40,32 @@\n }\n \n \n+INDEX_TEMPLATE = """<!doctype html>\n+<html lang="en" style="height:100%">\n+<head>\n+<meta charset="utf-8"/>\n+<link rel="shortcut icon" href="./favicon.ico"/>\n+<meta name="viewport" content="width=device-width,initial-scale=1"/>\n+<meta name="theme-color" content="#000000"/>\n+<meta name="description" content="A fast and flexible genome browser"/>\n+<link rel="manifest" href="./manifest.json"/>\n+<title>JBrowse</title>\n+</script>\n+</head>\n+<body style="overscroll-behavior:none; height:100%; margin: 0;">\n+<iframe\n+  id="jbframe"\n+  title="JBrowse2"\n+  frameborder="0"\n+  width="100%"\n+  height="100%"\n+  src=\'index_noview.html?config=config.json__SESSION_SPEC__\'>\n+</iframe>\n+</body>\n+</html>\n+"""\n+\n+\n class ColorScaling(object):\n \n     COLOR_FUNCTION_TEMPLATE = """\n@@ -376,6 +403,9 @@\n     def __init__(self, outdir, jbrowse2path):\n         self.assemblies = []  # these require more than a few line diff.\n         self.assmeta = {}\n+        self.ass_first_contigs = (\n+            []\n+        )  # for default session - these are read as first line of the assembly .fai\n         self.giURL = GALAXY_INFRASTRUCTURE_URL\n         self.outdir = outdir\n         self.jbrowse2path = jbrowse2path\n@@ -451,6 +481,22 @@\n         }\n         return wstyle\n \n+    def urllib_get_2018():\n+        # Using a protected member like this is not any more fragile\n+        # than extending the class and using it. I would use it.\n+        url = "https://localhost:6667/my-endpoint"\n+        ssl._create_default_https_context = ssl._create_unverified_context\n+        with urllib.request.urlopen(url=url) as f:\n+            print(f.read().decode("utf-8"))\n+\n+    def urllib_get_2022():\n+        # Finally! Able to use the publice API. Happy happy!\n+        url = "https://localhost:6667/my-endpoint"\n+        scontext = ssl.SSLContext(ssl.PROTOCOL_TLS)\n+        scontext.verify_mode = ssl.VerifyMode.CERT_NONE\n+        with urllib.request.urlopen(url=url, context=scontext) as f:\n+            print(f.read().decode("utf-8"))\n+\n     def process_genomes(self, genomes):\n         assembly = []\n         assmeta = []\n@@ -469,8 +515,9 @@\n                 fapath = genome_node["path"]\n                 if not useuri:\n                     fapath = os.path.realpath(fapath)\n-                assem = self.make_assembly(fapath, genome_name, useuri)\n+                assem, first_contig = self.make_assembly(fapath, genome_name, useuri)\n                 assembly.append(assem)\n+                self.ass_first_contigs.append(first_contig)\n                 if len(genome_names) == 0:\n                     this_genome["genome_name"] = genome_name  # first one for all tracks\n                     genome_names.append(genome_name)\n@@ -491,7 +538,12 @@\n                                 this_genome["genome_firstcontig"] = fl\n                     else:\n                         try:\n-                            fl = urllib.request.urlopen(fapath + ".fai").readline()\n+                            scontext = ssl.SSLContext(ssl.PROTOCOL_TLS)\n+                            scontext.verify_mode = ssl.VerifyMode.CERT_NONE\n+                            with urllib.request.urlopen(\n+                                url=fapath + ".fai", context=scontext\n+                            ) as f:\n+                                fl = f.readline()\n                         except Exception:\n                             fl = None\n                         if fl:  # is first row of the text fai so the first contig name\n@@ -506,6 +558,9 @@\n         return this_genome["genome_name"]\n \n     def make_assembly(self, fapath, gname, useuri):\n+        """added code to grab the first contig name and length for broken default session from Anthony and Helena\'s code\n+        that poor Bjoern is trying to figure out.\n+        """\n         if useuri:\n             faname = fapath\n             adapter = {\n@@ -514'..b'           os.path.join(self.outdir, "index.html"),\n+            os.path.join(self.outdir, "index_noview.html"),\n+        )\n+\n+        with open(os.path.join(self.outdir, "index.html"), "w") as nind:\n+            nind.write(new_index)\n+        logging.debug(\n+            "#### add_defsession gnome=%s refname=%s\\nsession_spec=%s\\nnew_index=%s"\n+            % (gnome, refName, sess, new_index)\n+        )\n+\n     def add_general_configuration(self, data):\n         """\n         Add some general configuration to the config.json file\n@@ -1426,7 +1557,7 @@\n         with open(config_path, "w") as config_file:\n             json.dump(self.config_json, config_file, indent=2)\n \n-    def clone_jbrowse(self, realclone=True):\n+    def clone_jbrowse(self, realclone=False):\n         """Clone a JBrowse directory into a destination directory. This also works in Biocontainer testing now\n         Leave as True between version updates on temporary tools - requires manual conda trigger :(\n         """\n@@ -1480,14 +1611,7 @@\n \n     jc = JbrowseConnector(outdir=args.outdir, jbrowse2path=args.jbrowse2path)\n \n-    default_session_data = {\n-        "visibility": {\n-            "default_on": [],\n-            "default_off": [],\n-        },\n-        "style": {},\n-        "style_labels": {},\n-    }\n+    default_session_data = {}\n \n     for ass in root.findall("assembly"):\n         genomes = [\n@@ -1500,7 +1624,16 @@\n             for x in ass.findall("metadata/genomes/genome")\n         ]\n         assref_name = jc.process_genomes(genomes)\n-\n+        if not default_session_data.get(assref_name, None):\n+            default_session_data[assref_name] = {\n+                "tracks": [],\n+                "style": {},\n+                "style_labels": {},\n+                "visibility": {\n+                    "default_on": [],\n+                    "default_off": [],\n+                },\n+            }\n         for track in ass.find("tracks"):\n             track_conf = {}\n             track_conf["trackfiles"] = []\n@@ -1577,21 +1710,22 @@\n                     vis = track.attrib.get("visibility", "default_off")\n                     if not vis:\n                         vis = "default_off"\n-                    default_session_data["visibility"][vis].append(key)\n+                    default_session_data[assref_name]["visibility"][vis].append(key)\n                 if track.find("options/style"):\n-                    default_session_data["style"][key] = {\n+                    default_session_data[assref_name]["style"][key] = {\n                         item.tag: parse_style_conf(item)\n                         for item in track.find("options/style")\n                     }\n                 else:\n-                    default_session_data["style"][key] = {}\n-                    logging.debug("@@@@ no options/style found for %s" % (key))\n+                    default_session_data[assref_name]["style"][key] = {}\n+                    logging.debug("no options/style found for %s" % (key))\n \n                 if track.find("options/style_labels"):\n-                    default_session_data["style_labels"][key] = {\n+                    default_session_data[assref_name]["style_labels"][key] = {\n                         item.tag: parse_style_conf(item)\n                         for item in track.find("options/style_labels")\n                     }\n+                default_session_data[assref_name]["tracks"].append(key)\n     default_session_data["defaultLocation"] = root.find(\n         "metadata/general/defaultLocation"\n     ).text\n@@ -1616,7 +1750,8 @@\n     assconf = jc.config_json.get("assemblies", [])\n     assconf += jc.assemblies\n     jc.config_json["assemblies"] = assconf\n-    logging.debug("&&&assemblies=%s, gnames=%s" % (assconf, jc.genome_names))\n+    logging.debug("assemblies=%s, gnames=%s" % (assconf, jc.genome_names))\n     jc.write_config()\n     jc.add_default_session(default_session_data)\n+    jc.add_defsess_to_index(default_session_data)\n     # jc.text_index() not sure what broke here.\n'
b
diff -r 2bdb748df098 -r 3b2815efa5d9 jbrowse2.xml
--- a/jbrowse2.xml Sat Mar 30 22:33:29 2024 +0000
+++ b/jbrowse2.xml Mon Apr 01 03:41:42 2024 +0000
b
@@ -1,4 +1,4 @@
- <tool id="jbrowse2" name="JBrowse2" version="@TOOL_VERSION@+@WRAPPER_VERSION@_8" profile="22.05">
+ <tool id="jbrowse2" name="JBrowse2" version="@TOOL_VERSION@+@WRAPPER_VERSION@_10" profile="22.05">
     <description>genome browser</description>
     <macros>
         <import>macros.xml</import>