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