-
Notifications
You must be signed in to change notification settings - Fork 83
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1327 from mvdbeek/mount_test_data_dir_ro
Mount test data dir read-only in docker
- Loading branch information
Showing
18 changed files
with
585 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
#!/usr/bin/env python | ||
# Dan Blankenberg | ||
from __future__ import print_function | ||
|
||
import json | ||
import optparse | ||
import os | ||
import subprocess | ||
import sys | ||
|
||
DEFAULT_DATA_TABLE_NAMES = ["bowtie2_indexes"] | ||
|
||
|
||
def get_id_name(params, dbkey, fasta_description=None): | ||
# TODO: ensure sequence_id is unique and does not already appear in location file | ||
sequence_id = params["param_dict"]["sequence_id"] | ||
if not sequence_id: | ||
sequence_id = dbkey | ||
|
||
sequence_name = params["param_dict"]["sequence_name"] | ||
if not sequence_name: | ||
sequence_name = fasta_description | ||
if not sequence_name: | ||
sequence_name = dbkey | ||
return sequence_id, sequence_name | ||
|
||
|
||
def build_bowtie2_index( | ||
data_manager_dict, | ||
fasta_filename, | ||
params, | ||
target_directory, | ||
dbkey, | ||
sequence_id, | ||
sequence_name, | ||
data_table_names=DEFAULT_DATA_TABLE_NAMES, | ||
): | ||
# TODO: allow multiple FASTA input files | ||
fasta_base_name = os.path.split(fasta_filename)[-1] | ||
sym_linked_fasta_filename = os.path.join(target_directory, fasta_base_name) | ||
os.symlink(fasta_filename, sym_linked_fasta_filename) | ||
args = ["bowtie2-build", sym_linked_fasta_filename, sequence_id] | ||
threads = os.environ.get("GALAXY_SLOTS") | ||
if threads: | ||
args.extend(["--threads", threads]) | ||
proc = subprocess.Popen(args=args, shell=False, cwd=target_directory) | ||
return_code = proc.wait() | ||
if return_code: | ||
print("Error building index.", file=sys.stderr) | ||
sys.exit(return_code) | ||
data_table_entry = dict(value=sequence_id, dbkey=dbkey, name=sequence_name, path=sequence_id) | ||
for data_table_name in data_table_names: | ||
_add_data_table_entry(data_manager_dict, data_table_name, data_table_entry) | ||
|
||
|
||
def _add_data_table_entry(data_manager_dict, data_table_name, data_table_entry): | ||
data_manager_dict["data_tables"] = data_manager_dict.get("data_tables", {}) | ||
data_manager_dict["data_tables"][data_table_name] = data_manager_dict["data_tables"].get(data_table_name, []) | ||
data_manager_dict["data_tables"][data_table_name].append(data_table_entry) | ||
return data_manager_dict | ||
|
||
|
||
def main(): | ||
parser = optparse.OptionParser() | ||
parser.add_option( | ||
"-f", | ||
"--fasta_filename", | ||
dest="fasta_filename", | ||
action="store", | ||
type="string", | ||
default=None, | ||
help="fasta_filename", | ||
) | ||
parser.add_option( | ||
"-d", "--fasta_dbkey", dest="fasta_dbkey", action="store", type="string", default=None, help="fasta_dbkey" | ||
) | ||
parser.add_option( | ||
"-t", | ||
"--fasta_description", | ||
dest="fasta_description", | ||
action="store", | ||
type="string", | ||
default=None, | ||
help="fasta_description", | ||
) | ||
parser.add_option( | ||
"-n", | ||
"--data_table_name", | ||
dest="data_table_name", | ||
action="append", | ||
type="string", | ||
default=None, | ||
help="data_table_name", | ||
) | ||
(options, args) = parser.parse_args() | ||
|
||
filename = args[0] | ||
|
||
with open(filename) as fh: | ||
params = json.load(fh) | ||
target_directory = params["output_data"][0]["extra_files_path"] | ||
os.mkdir(target_directory) | ||
data_manager_dict = {} | ||
|
||
dbkey = options.fasta_dbkey | ||
|
||
if dbkey in [None, "", "?"]: | ||
raise Exception('"%s" is not a valid dbkey. You must specify a valid dbkey.' % (dbkey)) | ||
|
||
sequence_id, sequence_name = get_id_name(params, dbkey=dbkey, fasta_description=options.fasta_description) | ||
|
||
# build the index | ||
build_bowtie2_index( | ||
data_manager_dict, | ||
options.fasta_filename, | ||
params, | ||
target_directory, | ||
dbkey, | ||
sequence_id, | ||
sequence_name, | ||
data_table_names=options.data_table_name or DEFAULT_DATA_TABLE_NAMES, | ||
) | ||
|
||
# save info to json file | ||
with open(filename, "w") as fh: | ||
json.dump(data_manager_dict, fh, sort_keys=True) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
1 change: 1 addition & 0 deletions
1
...ata/data_manager/data_manager_bowtie2_index_builder/data_manager/bowtie2_index_builder.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../bowtie2_index_builder.py |
40 changes: 40 additions & 0 deletions
40
...ta/data_manager/data_manager_bowtie2_index_builder/data_manager/bowtie2_index_builder.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<tool id="bowtie2_index_builder_data_manager" name="Bowtie2 index" tool_type="manage_data" version="@WRAPPER_VERSION@+galaxy0" profile="18.09"> | ||
<description>builder</description> | ||
<requirements> | ||
<requirement type="package" version="@WRAPPER_VERSION@">bowtie2</requirement> | ||
</requirements> | ||
<macros> | ||
<token name="@WRAPPER_VERSION@">2.4.4</token> | ||
</macros> | ||
<command detect_errors="exit_code"><![CDATA[ | ||
python '$__tool_directory__/bowtie2_index_builder.py' | ||
'${out_file}' | ||
--fasta_filename '${all_fasta_source.fields.path}' | ||
--fasta_dbkey '${all_fasta_source.fields.dbkey}' | ||
--fasta_description '${all_fasta_source.fields.name}' | ||
--data_table_name bowtie2_indexes ${tophat2} | ||
]]></command> | ||
<inputs> | ||
<param name="all_fasta_source" type="select" label="Source FASTA Sequence"> | ||
<options from_data_table="all_fasta"/> | ||
</param> | ||
<param name="sequence_name" type="text" value="" label="Name of sequence" /> | ||
<param name="sequence_id" type="text" value="" label="ID for sequence" /> | ||
<param name="tophat2" type="boolean" truevalue="--data_table_name tophat2_indexes" falsevalue="" checked="True" label="Also make available for TopHat" help="Adds values to tophat2_indexes tool data table" /> | ||
</inputs> | ||
<outputs> | ||
<data name="out_file" format="data_manager_json"/> | ||
</outputs> | ||
<tests> | ||
<test> | ||
<param name="all_fasta_source" value="phiX174"/> | ||
<output name="out_file" value="bowtie2_data_manager.json"/> | ||
</test> | ||
</tests> | ||
|
||
<help> | ||
.. class:: infomark | ||
|
||
**Notice:** If you leave name, description, or id blank, it will be generated automatically. | ||
</help> | ||
</tool> |
35 changes: 35 additions & 0 deletions
35
tests/data/data_manager/data_manager_bowtie2_index_builder/data_manager_conf.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
<?xml version="1.0"?> | ||
<data_managers> | ||
|
||
<data_manager tool_file="data_manager/bowtie2_index_builder.xml" id="bowtie2_index_builder" version="2.2.6"> | ||
<data_table name="bowtie2_indexes"> | ||
<output> | ||
<column name="value" /> | ||
<column name="dbkey" /> | ||
<column name="name" /> | ||
<column name="path" output_ref="out_file" > | ||
<move type="directory" relativize_symlinks="True"> | ||
<!-- <source>${path}</source>--> <!-- out_file.extra_files_path is used as base by default --> <!-- if no source, eg for type=directory, then refers to base --> | ||
<target base="${GALAXY_DATA_MANAGER_DATA_PATH}">${dbkey}/bowtie2_index/${value}</target> | ||
</move> | ||
<value_translation>${GALAXY_DATA_MANAGER_DATA_PATH}/${dbkey}/bowtie2_index/${value}/${path}</value_translation> | ||
<value_translation type="function">abspath</value_translation> | ||
</column> | ||
</output> | ||
</data_table> | ||
|
||
<data_table name="tophat2_indexes"> | ||
<output> | ||
<column name="value" /> | ||
<column name="dbkey" /> | ||
<column name="name" /> | ||
<column name="path" output_ref="out_file" > | ||
<!-- no move, always happens as part of bowtie2 and uses that path --> | ||
<value_translation>${GALAXY_DATA_MANAGER_DATA_PATH}/${dbkey}/bowtie2_index/${value}/${path}</value_translation> | ||
<value_translation type="function">abspath</value_translation> | ||
</column> | ||
</output> | ||
</data_table> | ||
</data_manager> | ||
|
||
</data_managers> |
Oops, something went wrong.