- for line in len_text.split("\n"):
- lst = line.strip().rsplit(None, 1) # Splits at the last whitespace in the line
- if not lst or len(lst) < 2:
- lines_skipped += 1
- continue
- chrom, length = lst[0], lst[1]
- try:
- length = int(length)
- except ValueError:
- lines_skipped += 1
- continue
- counter += 1
- f.write("%s\t%s\n" % (chrom, length))
- f.close()
- dbkeys[key] = { "name": name, "len": new_len.id, "count": counter }
+ dataset_id = trans.security.decode_id( dataset_id )
+ dbkeys[key] = { "name": name, "fasta": dataset_id }
+ # Save builds.
+ # TODO: use database table to save builds.
user.preferences['dbkeys'] = to_json_string(dbkeys)
trans.sa_session.flush()
+
+ #
+ # Display custom builds page.
+ #
+
+ # Add chrom/contig count to dbkeys dict.
+ updated = False
+ for key, attributes in dbkeys.items():
+ if 'count' in attributes:
+ # Already have count, so do nothing.
+ continue
+
+ # Get len file.
+ fasta_dataset = trans.app.model.HistoryDatasetAssociation.get( attributes[ 'fasta' ] )
+ len_dataset = fasta_dataset.get_converted_dataset( trans, "len" )
+ # HACK: need to request dataset again b/c get_converted_dataset()
+ # doesn't return dataset (as it probably should).
+ len_dataset = fasta_dataset.get_converted_dataset( trans, "len" )
+ if len_dataset.state == trans.app.model.Job.states.ERROR:
+ # Can't use len dataset.
+ continue
+
+ # Get chrom count file.
+ # NOTE: this conversion doesn't work well with set_metadata_externally=False
+ # because the conversion occurs before metadata can be set; the
+ # dataset is marked as deleted and a subsequent conversion is run.
+ chrom_count_dataset = len_dataset.get_converted_dataset( trans, "linecount" )
+ if not chrom_count_dataset or chrom_count_dataset.state != trans.app.model.Job.states.OK:
+ # No valid linecount dataset.
+ continue
+ else:
+ # Set chrom count.
+ chrom_count = int( open( chrom_count_dataset.file_name ).readline() )
+ attributes[ 'count' ] = chrom_count
+ updated = True
+
+ if updated:
+ user.preferences['dbkeys'] = to_json_string(dbkeys)
+ trans.sa_session.flush()
+
+
+ # Potential genome data for custom builds is limited to fasta datasets in current history for now.
+ fasta_hdas = trans.sa_session.query( model.HistoryDatasetAssociation ) \
+ .filter_by( history=trans.history, extension="fasta", deleted=False ) \
+ .order_by( model.HistoryDatasetAssociation.hid.desc() )
+
return trans.fill_template( 'user/dbkeys.mako',
user=user,
dbkeys=dbkeys,
message=message,
installed_len_files=self.installed_len_files,
lines_skipped=lines_skipped,
+ fasta_hdas=fasta_hdas,
use_panels=kwds.get( 'use_panels', None ) )
@web.expose
@web.require_login()
diff --git a/templates/user/dbkeys.mako b/templates/user/dbkeys.mako
index 86b145f7743..bd07f350d71 100644
--- a/templates/user/dbkeys.mako
+++ b/templates/user/dbkeys.mako
@@ -103,6 +103,8 @@
##
% if 'count' in dct:
${dct['count']}
+ % else:
+ working
% endif
|
@@ -133,10 +135,12 @@
-
-
-
-
+
+
diff --git a/tools/fasta_tools/fasta_compute_length.py b/tools/fasta_tools/fasta_compute_length.py
index 3b055e3d5ba..57a257bb7df 100644
--- a/tools/fasta_tools/fasta_compute_length.py
+++ b/tools/fasta_tools/fasta_compute_length.py
@@ -1,47 +1,9 @@
#!/usr/bin/env python
"""
-Input: fasta, int
-Output: tabular
-Return titles with lengths of corresponding seq
+Uses fasta_to_len converter code.
"""
-import sys, os
+import sys
+from galaxy.datatypes.converters.fasta_to_len import compute_fasta_length
-assert sys.version_info[:2] >= ( 2, 4 )
-
-def __main__():
-
- infile = sys.argv[1]
- out = open( sys.argv[2], 'w')
- keep_first_char = int( sys.argv[3] )
-
- fasta_title = ''
- seq_len = 0
-
- # number of char to keep in the title
- if keep_first_char == 0:
- keep_first_char = None
- else:
- keep_first_char += 1
-
- first_entry = True
-
- for line in open( infile ):
- line = line.strip()
- if not line or line.startswith( '#' ):
- continue
- if line[0] == '>':
- if first_entry == False:
- out.write( "%s\t%d\n" % ( fasta_title[ 1:keep_first_char ], seq_len ) )
- else:
- first_entry = False
- fasta_title = line
- seq_len = 0
- else:
- seq_len += len(line)
-
- # last fasta-entry
- out.write( "%s\t%d\n" % ( fasta_title[ 1:keep_first_char ], seq_len ) )
- out.close()
-
-if __name__ == "__main__" : __main__()
\ No newline at end of file
+compute_fasta_length( sys.argv[1], sys.argv[2], sys.argv[3])
\ No newline at end of file