4 from __future__ import print_function, unicode_literals
6 from ConfigParser import SafeConfigParser
12 from optparse import OptionParser, OptionGroup
14 from pprint import pprint, pformat
16 from six.moves import StringIO
21 from zipfile import ZipFile
25 from htsworkflow.util import api
26 from htsworkflow.util.rdfhelp import \
34 from htsworkflow.submission.daf import get_submission_uri
35 from htsworkflow.submission.submission import list_submissions
36 from htsworkflow.submission.results import ResultMap
37 from htsworkflow.submission.trackhub_submission import TrackHubSubmission
38 from htsworkflow.submission.condorfastq import CondorFastqExtract
40 logger = logging.getLogger(__name__)
42 INDENTED = " " + os.linesep
45 if not 'DJANGO_SETTINGS_MODULE' in os.environ:
46 os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings.local'
48 def main(cmdline=None):
49 parser = make_parser()
50 opts, args = parser.parse_args(cmdline)
53 from django.conf import settings
56 settings.LOGGING['loggers']['level'] = 'DEBUG'
58 settings.LOGGING['loggers']['level'] = 'INFO'
60 model = get_model(opts.model, opts.db_path)
62 submission_names = list(list_submissions(model))
64 if len(submission_names) == 0 and opts.name is None:
65 parser.error("Please name this submission")
66 elif opts.name and submission_names and opts.name not in submission_names:
67 parser.error("{} is not in this model. Choose from: {}{}".format(
70 INDENTED.join(submission_names)))
71 elif opts.name is None and len(submission_names) > 1:
72 parser.error("Please choose submission name from: {}{}".format(
74 INDENTED.join(submission_names)))
75 elif len(submission_names) == 1:
76 name = submission_names[0]
79 submission_uri = get_submission_uri(name)
80 logger.info('Submission URI: %s', name)
82 logger.debug('No name, unable to create submission ur')
85 if opts.make_track_hub:
86 mapper = TrackHubSubmission(name,
88 baseurl=opts.make_track_hub,
89 baseupload=opts.track_hub_upload,
92 if opts.load_rdf is not None:
93 if submission_uri is None:
94 parser.error("Please specify the submission name")
95 load_into_model(model, 'turtle', opts.load_rdf, submission_uri)
100 results.add_results_from_file(a)
102 logger.warn("File %s doesn't exist.", a)
104 if opts.make_link_tree_from is not None:
105 results.make_tree_from(opts.make_link_tree_from, link=True)
107 if opts.copy_tree_from is not None:
108 results.make_tree_from(opts.copy_tree_from, link=False)
111 logger.info("Building fastq extraction scripts")
112 flowcells = os.path.join(opts.sequence, 'flowcells')
113 extractor = CondorFastqExtract(opts.host, flowcells,
115 compression=opts.compression,
117 extractor.create_scripts(results)
119 if opts.scan_submission:
121 parser.error("Please define a submission name")
123 parser.error("Scan submission needs --make-track-hub=public-url")
124 mapper.scan_submission_dirs(results)
126 if opts.make_track_hub:
127 trackdb = mapper.make_hub(results)
129 if opts.make_manifest:
130 make_manifest(mapper, results, opts.make_manifest)
133 sparql_query(model, opts.sparql)
136 writer = get_serializer()
137 print(writer.serialize_model_to_string(model))
140 def make_manifest(mapper, results, filename=None):
141 manifest = mapper.make_manifest(results)
143 if filename is None or filename == '-':
144 sys.stdout.write(manifest)
146 with open(filename, 'w') as mainifeststream:
147 mainifeststream.write(manifest)
151 parser = OptionParser()
153 model = OptionGroup(parser, 'model')
154 model.add_option('--name', help="Set submission name")
155 model.add_option('--db-path', default=None,
156 help="set rdf database path")
157 model.add_option('--model', default=None,
158 help="Load model database")
159 model.add_option('--load-rdf', default=None,
160 help="load rdf statements into model")
161 model.add_option('--sparql', default=None, help="execute sparql query")
162 model.add_option('--print-rdf', action="store_true", default=False,
163 help="print ending model state")
164 parser.add_option_group(model)
166 commands = OptionGroup(parser, 'commands')
167 commands.add_option('--make-link-tree-from',
168 help="create directories & link data files",
170 commands.add_option('--copy-tree-from',
171 help="create directories & copy data files",
173 commands.add_option('--fastq', default=False, action="store_true",
174 help="generate scripts for making fastq files")
175 commands.add_option('--scan-submission', default=False, action="store_true",
176 help="Import metadata for submission into our model")
177 commands.add_option('--make-track-hub', default=None,
178 help='web root that will host the trackhub.')
179 commands.add_option('--track-hub-upload', default=None,
180 help='where to upload track hub <host>:<path>')
181 commands.add_option('--make-manifest',
182 help='name the manifest file name or - for stdout to create it',
185 parser.add_option_group(commands)
187 parser.add_option('--force', default=False, action="store_true",
188 help="Force regenerating fastqs")
189 parser.add_option('--compression', default=None, type='choice',
191 help='select compression type for fastq files')
192 parser.add_option('--daf', default=None, help='specify daf name')
193 parser.add_option('--library-url', default=None,
194 help="specify an alternate source for library information")
196 parser.add_option('--verbose', default=False, action="store_true",
197 help='verbose logging')
198 parser.add_option('--debug', default=False, action="store_true",
199 help='debug logging')
201 api.add_auth_options(parser)
205 if __name__ == "__main__":