5 from ConfigParser import SafeConfigParser
11 from optparse import OptionParser, OptionGroup
13 from pprint import pprint, pformat
15 from StringIO import StringIO
23 from zipfile import ZipFile
27 from htsworkflow.util import api
28 from htsworkflow.util.rdfhelp import \
36 from htsworkflow.submission.daf import get_submission_uri
37 from htsworkflow.submission.submission import list_submissions
38 from htsworkflow.submission.results import ResultMap
39 from htsworkflow.submission.trackhub_submission import TrackHubSubmission
40 from htsworkflow.submission.condorfastq import CondorFastqExtract
42 logger = logging.getLogger(__name__)
44 INDENTED = " " + os.linesep
47 if not 'DJANGO_SETTINGS_MODULE' in os.environ:
48 os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings.local'
50 def main(cmdline=None):
51 parser = make_parser()
52 opts, args = parser.parse_args(cmdline)
55 from django.conf import settings
58 settings.LOGGING['loggers']['level'] = 'DEBUG'
60 settings.LOGGING['loggers']['level'] = 'INFO'
62 model = get_model(opts.model, opts.db_path)
64 submission_names = list(list_submissions(model))
66 if len(submission_names) == 0 and opts.name is None:
67 parser.error("Please name this submission")
68 elif opts.name and submission_names and opts.name not in submission_names:
69 parser.error("{} is not in this model. Choose from: {}{}".format(
72 INDENTED.join(submission_names)))
73 elif opts.name is None and len(submission_names) > 1:
74 parser.error("Please choose submission name from: {}{}".format(
76 INDENTED.join(submission_names)))
77 elif len(submission_names) == 1:
78 name = submission_names[0]
81 submission_uri = get_submission_uri(name)
82 logger.info('Submission URI: %s', name)
84 logger.debug('No name, unable to create submission ur')
87 if opts.make_track_hub:
88 mapper = TrackHubSubmission(name,
90 baseurl=opts.make_track_hub,
91 baseupload=opts.track_hub_upload,
94 if opts.load_rdf is not None:
95 if submission_uri is None:
96 parser.error("Please specify the submission name")
97 load_into_model(model, 'turtle', opts.load_rdf, submission_uri)
101 if os.path.exists(a):
102 results.add_results_from_file(a)
104 logger.warn("File %s doesn't exist.", a)
106 if opts.make_link_tree_from is not None:
107 results.make_tree_from(opts.make_link_tree_from, link=True)
109 if opts.copy_tree_from is not None:
110 results.make_tree_from(opts.copy_tree_from, link=False)
113 logger.info("Building fastq extraction scripts")
114 flowcells = os.path.join(opts.sequence, 'flowcells')
115 extractor = CondorFastqExtract(opts.host, flowcells,
117 compression=opts.compression,
119 extractor.create_scripts(results)
121 if opts.scan_submission:
123 parser.error("Please define a submission name")
125 parser.error("Scan submission needs --make-track-hub=public-url")
126 mapper.scan_submission_dirs(results)
128 if opts.make_track_hub:
129 trackdb = mapper.make_hub(results)
131 if opts.make_manifest:
132 make_manifest(mapper, results, opts.make_manifest)
135 sparql_query(model, opts.sparql)
138 writer = get_serializer()
139 print writer.serialize_model_to_string(model)
142 def make_manifest(mapper, results, filename=None):
143 manifest = mapper.make_manifest(results)
145 if filename is None or filename == '-':
146 sys.stdout.write(manifest)
148 with open(filename, 'w') as mainifeststream:
149 mainifeststream.write(manifest)
153 parser = OptionParser()
155 model = OptionGroup(parser, 'model')
156 model.add_option('--name', help="Set submission name")
157 model.add_option('--db-path', default=None,
158 help="set rdf database path")
159 model.add_option('--model', default=None,
160 help="Load model database")
161 model.add_option('--load-rdf', default=None,
162 help="load rdf statements into model")
163 model.add_option('--sparql', default=None, help="execute sparql query")
164 model.add_option('--print-rdf', action="store_true", default=False,
165 help="print ending model state")
166 parser.add_option_group(model)
168 commands = OptionGroup(parser, 'commands')
169 commands.add_option('--make-link-tree-from',
170 help="create directories & link data files",
172 commands.add_option('--copy-tree-from',
173 help="create directories & copy data files",
175 commands.add_option('--fastq', default=False, action="store_true",
176 help="generate scripts for making fastq files")
177 commands.add_option('--scan-submission', default=False, action="store_true",
178 help="Import metadata for submission into our model")
179 commands.add_option('--make-track-hub', default=None,
180 help='web root that will host the trackhub.')
181 commands.add_option('--track-hub-upload', default=None,
182 help='where to upload track hub <host>:<path>')
183 commands.add_option('--make-manifest',
184 help='name the manifest file name or - for stdout to create it',
187 parser.add_option_group(commands)
189 parser.add_option('--force', default=False, action="store_true",
190 help="Force regenerating fastqs")
191 parser.add_option('--compression', default=None, type='choice',
193 help='select compression type for fastq files')
194 parser.add_option('--daf', default=None, help='specify daf name')
195 parser.add_option('--library-url', default=None,
196 help="specify an alternate source for library information")
198 parser.add_option('--verbose', default=False, action="store_true",
199 help='verbose logging')
200 parser.add_option('--debug', default=False, action="store_true",
201 help='debug logging')
203 api.add_auth_options(parser)
207 if __name__ == "__main__":