5 from configparser import SafeConfigParser
11 from optparse import OptionParser, OptionGroup
13 from pprint import pprint, pformat
15 from io import StringIO
20 import urllib.request, urllib.parse, urllib.error
21 import urllib.request, urllib.error, urllib.parse
23 from zipfile import ZipFile
27 if not 'DJANGO_SETTINGS_MODULE' in os.environ:
28 os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings'
30 from htsworkflow.util import api
31 from htsworkflow.util.rdfhelp import \
39 from htsworkflow.submission.daf import get_submission_uri
40 from htsworkflow.submission.submission import list_submissions
41 from htsworkflow.submission.results import ResultMap
42 from htsworkflow.submission.trackhub_submission import TrackHubSubmission
43 from htsworkflow.submission.condorfastq import CondorFastqExtract
45 logger = logging.getLogger(__name__)
47 INDENTED = " " + os.linesep
49 def main(cmdline=None):
50 parser = make_parser()
51 opts, args = parser.parse_args(cmdline)
55 logging.basicConfig(level = logging.DEBUG )
57 logging.basicConfig(level = logging.INFO )
59 logging.basicConfig(level = logging.WARNING )
61 apidata = api.make_auth_from_opts(opts, parser)
63 model = get_model(opts.model, opts.db_path)
65 submission_names = list(list_submissions(model))
67 if len(submission_names) == 0 and opts.name is None:
68 parser.error("Please name this submission")
69 elif opts.name and submission_names and opts.name not in submission_names:
70 parser.error("{} is not in this model. Choose from: {}{}".format(
73 INDENTED.join(submission_names)))
74 elif opts.name is None and len(submission_names) > 1:
75 parser.error("Please choose submission name from: {}{}".format(
77 INDENTED.join(submission_names)))
78 elif len(submission_names) == 1:
79 name = submission_names[0]
82 if opts.make_track_hub:
83 mapper = TrackHubSubmission(name,
85 baseurl=opts.make_track_hub,
86 baseupload=opts.track_hub_upload,
88 submission_uri = get_submission_uri(name)
91 if opts.load_rdf is not None:
92 if submission_uri is None:
93 parser.error("Please specify the submission name")
94 load_into_model(model, 'turtle', opts.load_rdf, submission_uri)
99 results.add_results_from_file(a)
101 logger.warn("File %s doesn't exist.", a)
103 if opts.make_link_tree_from is not None:
104 results.make_tree_from(opts.make_link_tree_from, link=True)
106 if opts.copy_tree_from is not None:
107 results.make_tree_from(opts.copy_tree_from, link=False)
110 logger.info("Building fastq extraction scripts")
111 flowcells = os.path.join(opts.sequence, 'flowcells')
112 extractor = CondorFastqExtract(opts.host, flowcells,
115 extractor.create_scripts(results)
117 if opts.scan_submission:
119 parser.error("Please define a submission name")
120 mapper.scan_submission_dirs(results)
122 if opts.make_track_hub:
123 trackdb = mapper.make_hub(results)
125 if opts.make_manifest:
126 make_manifest(mapper, results, opts.make_manifest)
129 sparql_query(model, opts.sparql)
132 writer = get_serializer()
133 print(writer.serialize_model_to_string(model))
136 def make_manifest(mapper, results, filename=None):
137 manifest = mapper.make_manifest(results)
139 if filename is None or filename == '-':
140 sys.stdout.write(manifest)
142 with open(filename, 'w') as mainifeststream:
143 mainifeststream.write(manifest)
146 parser = OptionParser()
148 model = OptionGroup(parser, 'model')
149 model.add_option('--name', help="Set submission name")
150 model.add_option('--db-path', default=None,
151 help="set rdf database path")
152 model.add_option('--model', default=None,
153 help="Load model database")
154 model.add_option('--load-rdf', default=None,
155 help="load rdf statements into model")
156 model.add_option('--sparql', default=None, help="execute sparql query")
157 model.add_option('--print-rdf', action="store_true", default=False,
158 help="print ending model state")
159 parser.add_option_group(model)
161 commands = OptionGroup(parser, 'commands')
162 commands.add_option('--make-link-tree-from',
163 help="create directories & link data files",
165 commands.add_option('--copy-tree-from',
166 help="create directories & copy data files",
168 commands.add_option('--fastq', default=False, action="store_true",
169 help="generate scripts for making fastq files")
170 commands.add_option('--scan-submission', default=False, action="store_true",
171 help="Import metadata for submission into our model")
172 commands.add_option('--make-track-hub', default=None,
173 help='web root that will host the trackhub.')
174 commands.add_option('--track-hub-upload', default=None,
175 help='where to upload track hub <host>:<path>')
176 commands.add_option('--make-manifest',
177 help='name the manifest file name or - for stdout to create it',
181 parser.add_option_group(commands)
183 parser.add_option('--force', default=False, action="store_true",
184 help="Force regenerating fastqs")
185 parser.add_option('--daf', default=None, help='specify daf name')
186 parser.add_option('--library-url', default=None,
187 help="specify an alternate source for library information")
189 parser.add_option('--verbose', default=False, action="store_true",
190 help='verbose logging')
191 parser.add_option('--debug', default=False, action="store_true",
192 help='debug logging')
194 api.add_auth_options(parser)
198 if __name__ == "__main__":