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.condorfastq import CondorFastqExtract
40 from htsworkflow.submission.aws_submission import AWSSubmission
41 logger = logging.getLogger(__name__)
43 INDENTED = " " + os.linesep
46 if not 'DJANGO_SETTINGS_MODULE' in os.environ:
47 os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings.local'
49 def main(cmdline=None):
50 parser = make_parser()
51 opts, args = parser.parse_args(cmdline)
54 from django.conf import settings
57 settings.LOGGING['loggers']['htsworkflow']['level'] = 'DEBUG'
59 settings.LOGGING['loggers']['htsworkflow']['level'] = 'INFO'
63 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', submission_uri)
84 mapper = AWSSubmission(name, model, encode_host=opts.encoded, lims_host=opts.host)
86 if opts.load_rdf is not None:
87 if submission_uri is None:
88 parser.error("Please specify the submission name")
89 load_into_model(model, 'turtle', opts.load_rdf, submission_uri)
94 results.add_results_from_file(a)
96 logger.warn("File %s doesn't exist.", a)
98 if opts.make_link_tree_from is not None:
99 results.make_tree_from(opts.make_link_tree_from, link=True)
101 if opts.copy_tree_from is not None:
102 results.make_tree_from(opts.copy_tree_from, link=False)
105 logger.info("Building fastq extraction scripts")
106 flowcells = os.path.join(opts.sequence, 'flowcells')
107 extractor = CondorFastqExtract(opts.host, flowcells,
109 compression=opts.compression,
111 extractor.create_scripts(results)
113 if opts.scan_submission:
115 parser.error("Please define a submission name")
116 mapper.scan_submission_dirs(results)
119 mapper.upload(results, opts.dry_run)
122 sparql_query(model, opts.sparql)
125 writer = get_serializer()
126 print writer.serialize_model_to_string(model)
130 parser = OptionParser()
132 model = OptionGroup(parser, 'model')
133 model.add_option('--name', help="Set submission name")
134 model.add_option('--db-path', default=None,
135 help="set rdf database path")
136 model.add_option('--model', default=None,
137 help="Load model database")
138 model.add_option('--load-rdf', default=None,
139 help="load rdf statements into model")
140 model.add_option('--sparql', default=None, help="execute sparql query")
141 model.add_option('--print-rdf', action="store_true", default=False,
142 help="print ending model state")
143 parser.add_option_group(model)
145 commands = OptionGroup(parser, 'commands')
146 commands.add_option('--make-link-tree-from',
147 help="create directories & link data files",
149 commands.add_option('--copy-tree-from',
150 help="create directories & copy data files",
152 commands.add_option('--fastq', default=False, action="store_true",
153 help="generate scripts for making fastq files")
154 commands.add_option('--scan-submission', default=False, action="store_true",
155 help="cache md5 sums")
156 commands.add_option('--upload', default=False, action="store_true",
159 parser.add_option_group(commands)
161 parser.add_option('--force', default=False, action="store_true",
162 help="Force regenerating fastqs")
163 parser.add_option('--compression', default=None, type='choice',
165 help='select compression type for fastq files')
166 parser.add_option('--library-url', default=None,
167 help="specify an alternate source for library information")
168 parser.add_option('--encoded', default='www.encodeproject.org',
169 help='base url for talking to encode server')
170 parser.add_option('--dry-run', default=False, action='store_true',
171 help='avoid making changes to encoded')
173 parser.add_option('--verbose', default=False, action="store_true",
174 help='verbose logging')
175 parser.add_option('--debug', default=False, action="store_true",
176 help='debug logging')
178 api.add_auth_options(parser)
182 if __name__ == "__main__":