Mercurial > repos > iuc > jbrowse
comparison jbrowse.py @ 40:17359b808b01 draft
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse commit 2f072c4183a0d1221fb9d81909aeeafb2dbda892"
| author | iuc |
|---|---|
| date | Fri, 21 Aug 2020 04:42:41 -0400 |
| parents | 9de82b4963e6 |
| children | 8774b28235bb |
comparison
equal
deleted
inserted
replaced
| 39:fd5dbf0f732e | 40:17359b808b01 |
|---|---|
| 321 ) | 321 ) |
| 322 metadata['tool_tool'] = '<a target="_blank" href="{galaxy}/datasets/{encoded_id}/show_params">{tool_id}</a>'.format( | 322 metadata['tool_tool'] = '<a target="_blank" href="{galaxy}/datasets/{encoded_id}/show_params">{tool_id}</a>'.format( |
| 323 galaxy=GALAXY_INFRASTRUCTURE_URL, | 323 galaxy=GALAXY_INFRASTRUCTURE_URL, |
| 324 encoded_id=metadata['dataset_id'], | 324 encoded_id=metadata['dataset_id'], |
| 325 tool_id=metadata['tool_tool_id'], | 325 tool_id=metadata['tool_tool_id'], |
| 326 tool_version=metadata['tool_tool_version'], | 326 # tool_version=metadata['tool_tool_version'], |
| 327 ) | 327 ) |
| 328 return metadata | 328 return metadata |
| 329 | 329 |
| 330 | 330 |
| 331 class JbrowseConnector(object): | 331 class JbrowseConnector(object): |
| 332 | 332 |
| 333 def __init__(self, jbrowse, outdir, genomes, standalone=False, gencode=1): | 333 def __init__(self, jbrowse, outdir, genomes, standalone=None, gencode=1): |
| 334 self.cs = ColorScaling() | 334 self.cs = ColorScaling() |
| 335 self.jbrowse = jbrowse | 335 self.jbrowse = jbrowse |
| 336 self.outdir = outdir | 336 self.outdir = outdir |
| 337 self.genome_paths = genomes | 337 self.genome_paths = genomes |
| 338 self.standalone = standalone | 338 self.standalone = standalone |
| 339 self.gencode = gencode | 339 self.gencode = gencode |
| 340 self.tracksToIndex = [] | 340 self.tracksToIndex = [] |
| 341 | 341 |
| 342 if standalone: | 342 if standalone == "complete": |
| 343 self.clone_jbrowse(self.jbrowse, self.outdir) | 343 self.clone_jbrowse(self.jbrowse, self.outdir) |
| 344 elif standalone == "minimal": | |
| 345 self.clone_jbrowse(self.jbrowse, self.outdir, minimal=True) | |
| 344 else: | 346 else: |
| 345 try: | 347 try: |
| 346 os.makedirs(self.outdir) | 348 os.makedirs(self.outdir) |
| 347 except OSError: | 349 except OSError: |
| 348 # Ignore if the folder exists | 350 # Ignore if the folder exists |
| 389 log.error('cd %s && %s', self.outdir, command) | 391 log.error('cd %s && %s', self.outdir, command) |
| 390 log.error(output) | 392 log.error(output) |
| 391 log.error(err) | 393 log.error(err) |
| 392 raise RuntimeError("Command failed with exit code %s" % (retcode)) | 394 raise RuntimeError("Command failed with exit code %s" % (retcode)) |
| 393 | 395 |
| 396 def subprocess_check_output(self, command): | |
| 397 log.debug('cd %s && %s', self.outdir, ' '.join(command)) | |
| 398 return subprocess.check_output(command, cwd=self.outdir) | |
| 399 | |
| 394 def _jbrowse_bin(self, command): | 400 def _jbrowse_bin(self, command): |
| 395 return os.path.realpath(os.path.join(self.jbrowse, 'bin', command)) | 401 return os.path.realpath(os.path.join(self.jbrowse, 'bin', command)) |
| 396 | 402 |
| 397 def process_genomes(self): | 403 def process_genomes(self): |
| 398 for genome_node in self.genome_paths: | 404 for genome_node in self.genome_paths: |
| 499 if blastOpts.get('index', 'false') == 'true': | 505 if blastOpts.get('index', 'false') == 'true': |
| 500 self.tracksToIndex.append("%s" % trackData['label']) | 506 self.tracksToIndex.append("%s" % trackData['label']) |
| 501 | 507 |
| 502 def add_bigwig(self, data, trackData, wiggleOpts, **kwargs): | 508 def add_bigwig(self, data, trackData, wiggleOpts, **kwargs): |
| 503 dest = os.path.join('data', 'raw', trackData['label'] + '.bw') | 509 dest = os.path.join('data', 'raw', trackData['label'] + '.bw') |
| 504 cmd = ['ln', '-s', data, dest] | 510 cmd = ['cp', data, dest] |
| 505 self.subprocess_check_call(cmd) | 511 self.subprocess_check_call(cmd) |
| 506 | 512 |
| 507 url = os.path.join('raw', trackData['label'] + '.bw') | 513 url = os.path.join('raw', trackData['label'] + '.bw') |
| 508 trackData.update({ | 514 trackData.update({ |
| 509 "urlTemplate": url, | 515 "urlTemplate": url, |
| 1067 } | 1073 } |
| 1068 }) | 1074 }) |
| 1069 with open(os.path.join(self.outdir, 'data', 'trackList2.json'), 'w') as handle: | 1075 with open(os.path.join(self.outdir, 'data', 'trackList2.json'), 'w') as handle: |
| 1070 json.dump(trackListJson, handle) | 1076 json.dump(trackListJson, handle) |
| 1071 | 1077 |
| 1072 def clone_jbrowse(self, jbrowse_dir, destination): | 1078 def clone_jbrowse(self, jbrowse_dir, destination, minimal=False): |
| 1073 """Clone a JBrowse directory into a destination directory. | 1079 """Clone a JBrowse directory into a destination directory. |
| 1074 """ | 1080 """ |
| 1075 # JBrowse seems to have included some bad symlinks, cp ignores bad symlinks | 1081 if minimal: |
| 1076 # unlike copytree | 1082 # Should be the absolute minimum required for JBrowse to function. |
| 1077 cmd = ['cp', '-r', os.path.join(jbrowse_dir, '.'), destination] | 1083 interesting = [ |
| 1078 log.debug(' '.join(cmd)) | 1084 'dist', 'img', 'index.html', 'jbrowse.conf', 'jbrowse_conf.json', 'webpack.config.js' |
| 1079 subprocess.check_call(cmd) | 1085 ] |
| 1086 for i in interesting: | |
| 1087 cmd = ['cp', '-r', os.path.join(jbrowse_dir, i), destination] | |
| 1088 self.subprocess_check_call(cmd) | |
| 1089 else: | |
| 1090 # JBrowse seems to have included some bad symlinks, cp ignores bad symlinks | |
| 1091 # unlike copytree | |
| 1092 cmd = ['cp', '-r', os.path.join(jbrowse_dir, '.'), destination] | |
| 1093 self.subprocess_check_call(cmd) | |
| 1094 | |
| 1080 cmd = ['mkdir', '-p', os.path.join(destination, 'data', 'raw')] | 1095 cmd = ['mkdir', '-p', os.path.join(destination, 'data', 'raw')] |
| 1081 log.debug(' '.join(cmd)) | 1096 self.subprocess_check_call(cmd) |
| 1082 subprocess.check_call(cmd) | |
| 1083 | 1097 |
| 1084 # http://unix.stackexchange.com/a/38691/22785 | 1098 # http://unix.stackexchange.com/a/38691/22785 |
| 1085 # JBrowse releases come with some broken symlinks | 1099 # JBrowse releases come with some broken symlinks |
| 1086 cmd = ['find', destination, '-type', 'l', '-xtype', 'l'] | 1100 cmd = ['find', destination, '-type', 'l', '-xtype', 'l'] |
| 1087 log.debug(' '.join(cmd)) | 1101 symlinks = self.subprocess_check_output(cmd) |
| 1088 symlinks = subprocess.check_output(cmd) | 1102 |
| 1089 for i in symlinks: | 1103 for i in symlinks: |
| 1090 try: | 1104 try: |
| 1091 os.unlink(i) | 1105 os.unlink(i) |
| 1092 except OSError: | 1106 except OSError: |
| 1093 pass | 1107 pass |
| 1097 parser = argparse.ArgumentParser(description="", epilog="") | 1111 parser = argparse.ArgumentParser(description="", epilog="") |
| 1098 parser.add_argument('xml', type=argparse.FileType('r'), help='Track Configuration') | 1112 parser.add_argument('xml', type=argparse.FileType('r'), help='Track Configuration') |
| 1099 | 1113 |
| 1100 parser.add_argument('--jbrowse', help='Folder containing a jbrowse release') | 1114 parser.add_argument('--jbrowse', help='Folder containing a jbrowse release') |
| 1101 parser.add_argument('--outdir', help='Output directory', default='out') | 1115 parser.add_argument('--outdir', help='Output directory', default='out') |
| 1102 parser.add_argument('--standalone', help='Standalone mode includes a copy of JBrowse', action='store_true') | 1116 parser.add_argument('--standalone', choices=['complete', 'minimal', 'data'], help='Standalone mode includes a copy of JBrowse') |
| 1103 parser.add_argument('--version', '-V', action='version', version="%(prog)s 0.8.0") | 1117 parser.add_argument('--version', '-V', action='version', version="%(prog)s 0.8.0") |
| 1104 args = parser.parse_args() | 1118 args = parser.parse_args() |
| 1105 | 1119 |
| 1106 tree = ET.parse(args.xml.name) | 1120 tree = ET.parse(args.xml.name) |
| 1107 root = tree.getroot() | 1121 root = tree.getroot() |
