# HG changeset patch # User fubar # Date 1719101637 0 # Node ID 9e3f69d9fed1d273c0084e58f9ee959839a2c037 # Parent dc3fe98e7b37e15cc63e1a0989c9919549ec3a51 planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit a1537aea75fc902d0e38c0b7c698830a939648b1-dirty diff -r dc3fe98e7b37 -r 9e3f69d9fed1 __pycache__/jbrowse2.cpython-312.pyc Binary file __pycache__/jbrowse2.cpython-312.pyc has changed diff -r dc3fe98e7b37 -r 9e3f69d9fed1 jbrowse2.py --- a/jbrowse2.py Sat Jun 22 06:17:01 2024 +0000 +++ b/jbrowse2.py Sun Jun 23 00:13:57 2024 +0000 @@ -2,6 +2,7 @@ import argparse import binascii +import copy import datetime # import hashlib import json @@ -679,8 +680,8 @@ ], "adapter": {"type": "HicAdapter", "hicLocation": {"uri": uri}}, } - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def add_maf(self, data, trackData): """ @@ -753,8 +754,8 @@ } style_json = self._prepare_track_style(trackDict) trackDict["style"] = style_json - self.tracksToAdd[gname].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[gname].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) if self.config_json.get("plugins", None): self.config_json["plugins"].append(mafPlugin[0]) else: @@ -827,8 +828,8 @@ } style_json = self._prepare_track_style(trackDict) trackDict["style"] = style_json - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def add_bam(self, data, trackData, bam_indexes=None, **kwargs): tId = trackData["label"] @@ -884,8 +885,8 @@ } style_json = self._prepare_track_style(trackDict) trackDict["style"] = style_json - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def add_cram(self, data, trackData, cram_indexes=None, **kwargs): tId = trackData["label"] @@ -950,8 +951,8 @@ } style_json = self._prepare_track_style(trackDict) trackDict["style"] = style_json - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def add_vcf(self, data, trackData): tId = trackData["label"] @@ -1000,8 +1001,8 @@ } style_json = self._prepare_track_style(trackDict) trackDict["style"] = style_json - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def _sort_gff(self, data, dest): # Only index if not already done @@ -1063,8 +1064,8 @@ } style_json = self._prepare_track_style(trackDict) trackDict["style"] = style_json - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def add_bed(self, data, ext, trackData): tId = trackData["label"] @@ -1112,8 +1113,8 @@ } style_json = self._prepare_track_style(trackDict) trackDict["style"] = style_json - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def add_paf(self, data, trackData, pafOpts, **kwargs): tname = trackData["name"] @@ -1147,10 +1148,10 @@ if gname not in self.genome_names: # ignore if already there - eg for duplicates among pafs. asstrack, first_contig = self.make_assembly(gpath, gname, useuri) - self.genome_names.append(gname) + self.genome_names.append(copy.copy(gname)) self.tracksToAdd[gname] = [] - self.assemblies.append(asstrack) - self.ass_first_contigs.append(first_contig) + self.assemblies.append(copy.copy(asstrack)) + self.ass_first_contigs.append(copy.copy(first_contig)) trackDict = { "type": "SyntenyTrack", "trackId": tId, @@ -1194,8 +1195,8 @@ "displayId": "%s-LinearBasicDisplay" % tId, } trackDict["style"] = style_json - self.tracksToAdd[trackData["assemblyNames"]].append(trackDict) - self.trackIdlist.append(tId) + self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) + self.trackIdlist.append(copy.copy(tId)) def process_annotations(self, track): category = track["category"].replace("__pd__date__pd__", TODAY) @@ -1311,6 +1312,7 @@ else: logging.warning("Do not know how to handle %s", dataset_ext) # Return non-human label for use in other fields + logging.debug("### processanno ext=%s trackstoadd = %s" % (dataset_ext, self.tracksToAdd)) yield outputTrackConfig["label"] def add_default_session(self, default_data): @@ -1338,16 +1340,23 @@ tId = track_conf["trackId"] if tId in default_data[gnome]["visibility"]["default_on"]: track_types[tId] = track_conf["type"] - style_data = default_data[gnome]["style"].get(tId, None) + style_data = default_data[gnome]["style"].get(tId, {}) if not style_data: logging.debug( - "### No style data for %s in available default data %s" + "No style data for %s in available default data %s" % (tId, default_data) ) - style_data = {"type": "LinearBasicDisplay"} - if "displays" in track_conf: - disp = track_conf["displays"][0]["type"] - style_data["type"] = disp + else: + logging.debug( + "style data for %s = %s" + % (tId, style_data) + ) + + if style_data.get('type',None): + style_data["type"] = "LinearBasicDisplay" + if "displays" in track_conf: + disp = track_conf["displays"][0]["type"] + style_data["type"] = disp if track_conf.get("style_labels", None): # TODO fix this: it should probably go in a renderer block (SvgFeatureRenderer) but still does not work # TODO move this to per track displays? @@ -1551,8 +1560,9 @@ def parse_style_conf(item): if item.text.lower() in ["false", "true", "yes", "no"]: return item.text.lower in ("yes", "true") - else: - return item.text + elif item.text.isdigit(): + return int(item.text) + return item.text if __name__ == "__main__": @@ -1632,28 +1642,27 @@ ) ) else: - if trackfiles: - metadata = metadata_from_node(x.find("metadata")) - track_conf["dataset_id"] = metadata.get( - "dataset_id", "None" + metadata = metadata_from_node(x.find("metadata")) + track_conf["dataset_id"] = metadata.get( + "dataset_id", "None" + ) + if x.attrib["useuri"].lower() == "yes": + tfa = ( + x.attrib["path"], + x.attrib["ext"], + x.attrib["useuri"], + track_conf["label"], + metadata, ) - if x.attrib["useuri"].lower() == "yes": - tfa = ( - x.attrib["path"], - x.attrib["ext"], - x.attrib["useuri"], - track_conf["label"], - metadata, - ) - else: - tfa = ( - os.path.realpath(x.attrib["path"]), - x.attrib["ext"], - x.attrib["useuri"], - track_conf["label"], - metadata, - ) - track_conf["trackfiles"].append(tfa) + else: + tfa = ( + os.path.realpath(x.attrib["path"]), + x.attrib["ext"], + x.attrib["useuri"], + track_conf["label"], + metadata, + ) + track_conf["trackfiles"].append(tfa) if is_multi_bigwig: metadata = metadata_from_node(x.find("metadata")) @@ -1670,7 +1679,6 @@ track_conf["category"] = track.attrib["cat"] track_conf["format"] = track.attrib["format"] track_conf["conf"] = etree_to_dict(track.find("options")) - logging keys = jc.process_annotations(track_conf) if keys: for key in keys: @@ -1684,11 +1692,10 @@ if trak["trackId"] == key: stile = trak.get("style", {}) if track.find("options/style"): - supdate = { - item.tag: parse_style_conf(item) - for item in track.find("options/style") - } - stile.update(supdate) + for item in track.find("options/style"): + if item.text: + stile[item.tag] = parse_style_conf(item) + logging.debug("stile=%s" % stile) default_session_data[primaryGenome]["style"][key] = stile if track.find("options/style_labels"): default_session_data[primaryGenome]["style_labels"][key] = { @@ -1714,6 +1721,7 @@ "font_size": root.find("metadata/general/font_size").text, } jc.add_general_configuration(general_data) + jc.add_default_session(default_session_data) trackconf = jc.config_json.get("tracks", []) for gnome in jc.genome_names: gtracks = jc.tracksToAdd[gnome] @@ -1739,7 +1747,6 @@ ) ) jc.write_config() - jc.add_default_session(default_session_data) # note that this can be left in the config.json but has NO EFFECT if add_defsess_to_index is called. # jc.add_defsess_to_index(default_session_data) # jc.text_index() not sure what broke here.