Test htsworkflow under several different django & python versions
[htsworkflow.git] / encode_submission / geo_gather.py
1 #!/usr/bin/env python
2 from __future__ import print_function, unicode_literals
3
4 from ConfigParser import SafeConfigParser
5 import fnmatch
6 from glob import glob
7 import json
8 import logging
9 import netrc
10 from optparse import OptionParser, OptionGroup
11 import os
12 from pprint import pprint, pformat
13 import shlex
14 from six.moves import StringIO
15 import stat
16 import sys
17 import time
18 import types
19 from zipfile import ZipFile
20
21 import RDF
22
23 if not 'DJANGO_SETTINGS_MODULE' in os.environ:
24     os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings'
25
26
27 from htsworkflow.util import api
28 from htsworkflow.util.rdfhelp import \
29      dafTermOntology, \
30      fromTypedNode, \
31      get_model, \
32      get_serializer, \
33      load_into_model, \
34      sparql_query, \
35      submissionOntology
36 from htsworkflow.submission.daf import get_submission_uri
37 from htsworkflow.submission.results import ResultMap
38 from htsworkflow.submission.geo import GEOSubmission
39 from htsworkflow.submission.condorfastq import CondorFastqExtract
40
41 logger = logging.getLogger(__name__)
42
43 def main(cmdline=None):
44     parser = make_parser()
45     opts, args = parser.parse_args(cmdline)
46     submission_uri = None
47
48     if opts.debug:
49         logging.basicConfig(level = logging.DEBUG )
50     elif opts.verbose:
51         logging.basicConfig(level = logging.INFO )
52     else:
53         logging.basicConfig(level = logging.WARNING )
54
55     apidata = api.make_auth_from_opts(opts, parser)
56
57     model = get_model(opts.model, opts.db_path)
58     mapper = None
59     if opts.name:
60         mapper = GEOSubmission(opts.name,  model, host=opts.host)
61         submission_uri = get_submission_uri(opts.name)
62
63
64     if opts.load_rdf is not None:
65         if submission_uri is None:
66             parser.error("Please specify the submission name")
67         load_into_model(model, 'turtle', opts.load_rdf, submission_uri)
68
69     results = ResultMap()
70     for a in args:
71         if os.path.exists(a):
72             results.add_results_from_file(a)
73         else:
74             logger.warn("File %s doesn't exist.", a)
75
76     if opts.make_tree_from is not None:
77         results.make_tree_from(opts.make_tree_from)
78
79     if opts.fastq:
80         logger.info("Building fastq extraction scripts")
81         flowcells = os.path.join(opts.sequence, 'flowcells')
82         extractor = CondorFastqExtract(opts.host, flowcells,
83                                        model=opts.model,
84                                        force=opts.force)
85         extractor.create_scripts(results)
86
87     if opts.scan_submission:
88         if opts.name is None:
89             parser.error("Please define a submission name")
90         mapper.scan_submission_dirs(results)
91
92     if opts.make_soft:
93         mapper.make_soft(results)
94
95     if opts.sparql:
96         sparql_query(model, opts.sparql)
97
98     if opts.print_rdf:
99         writer = get_serializer()
100         print(writer.serialize_model_to_string(model))
101
102
103 def make_parser():
104     parser = OptionParser()
105
106     model = OptionGroup(parser, 'model')
107     model.add_option('--name', help="Set submission name")
108     model.add_option('--db-path', default=None,
109                      help="set rdf database path")
110     model.add_option('--model', default=None,
111       help="Load model database")
112     model.add_option('--load-rdf', default=None,
113       help="load rdf statements into model")
114     model.add_option('--sparql', default=None, help="execute sparql query")
115     model.add_option('--print-rdf', action="store_true", default=False,
116       help="print ending model state")
117     parser.add_option_group(model)
118     # commands
119     commands = OptionGroup(parser, 'commands')
120     commands.add_option('--make-tree-from',
121                       help="create directories & link data files",
122                       default=None)
123     commands.add_option('--fastq', default=False, action="store_true",
124                         help="generate scripts for making fastq files")
125     commands.add_option('--scan-submission', default=False, action="store_true",
126                       help="Import metadata for submission into our model")
127     commands.add_option('--make-soft', help='make the soft file', default=False,
128                       action="store_true")
129
130     parser.add_option_group(commands)
131
132     parser.add_option('--force', default=False, action="store_true",
133                       help="Force regenerating fastqs")
134     parser.add_option('--daf', default=None, help='specify daf name')
135     parser.add_option('--library-url', default=None,
136                       help="specify an alternate source for library information")
137     # debugging
138     parser.add_option('--verbose', default=False, action="store_true",
139                       help='verbose logging')
140     parser.add_option('--debug', default=False, action="store_true",
141                       help='debug logging')
142
143     api.add_auth_options(parser)
144
145     return parser
146
147
148 if __name__ == "__main__":
149     main()