comparison ms_wiff_loader.py @ 0:5bc64a2d5f91 draft default tip

Uploaded
author galaxyp
date Tue, 10 Mar 2015 18:26:36 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:5bc64a2d5f91
1 #!/usr/bin/env python
2 import optparse
3 import os
4 import sys
5 import tempfile
6 import shutil
7 import subprocess
8 import re
9 import logging
10 import urllib2
11 from urlparse import urlparse
12
13
14 assert sys.version_info[:2] >= (2, 6)
15
16 log = logging.getLogger(__name__)
17
18 CHUNK_SIZE = 2**20 #1mb
19
20 def stop_err(msg):
21 sys.stderr.write("%s\n" % msg)
22 sys.exit()
23
24 def download_from_url( url, output_dir, basename=None, ext=None ):
25 o = urlparse(url)
26 src_parts = os.path.basename(o.path).split('.',1)
27 file_name = "%s.%s" % ( basename if basename else src_parts[0], ext if ext else src_parts[1] )
28 file_path = os.path.join(output_dir,file_name)
29 reader = urllib2.urlopen( url )
30 writer = open(file_path,'wb')
31 while True:
32 data = reader.read( CHUNK_SIZE )
33 if data:
34 writer.write( data )
35 else:
36 break
37 writer.close()
38 reader.close()
39 return file_path
40
41 def __main__():
42 parser = optparse.OptionParser()
43 parser.add_option( '-a', '--archive', dest='archive', default=None, help='URL to archive containing: <name>.wiff file <name>.wiff.scan <name>.wiff.mtd files' )
44 parser.add_option( '-w', '--wiff', dest='wiff', default=None, help='URL to <name>.wiff file' )
45 parser.add_option( '-s', '--scan', dest='scan', default=None, help='URL to <name>.wiff.scan file' )
46 parser.add_option( '-m', '--mtd', dest='mtd', default=None, help='URL to <name>.wiff.mtd file' )
47 parser.add_option( '-n', '--name', dest='name', default=None, help='base name for files' )
48 parser.add_option( '-o', '--output_dir', dest='output_dir', default=None, help='dir to copy files into' )
49 parser.add_option( '-f', '--output_file', dest='output_file', default=None, help='Galaxy dataset file' )
50 (options, args) = parser.parse_args()
51
52 if not (options.archive or options.wiff):
53 stop_err("No wiff input file specified")
54 output_dir = os.getcwd()
55 if options.output_dir:
56 output_dir = options.output_dir
57 if not os.path.exists( output_dir ):
58 os.makedirs(output_dir)
59 basename = options.name
60 rval = ['<html><head><title>Wiff Composite Dataset %s</title></head><body><p/>' % (basename if basename else '')]
61 rval.append('This composite dataset is composed of the following files:<p/><ul>')
62 if options.wiff:
63 file_path = download_from_url (options.wiff, output_dir, basename=basename, ext='wiff')
64 rel_path = os.path.basename(file_path)
65 os.symlink( rel_path, os.path.join(output_dir,'wiff'))
66 rval.append( '<li><a href="%s" type="application/octet-stream">%s</a></li>' % ( rel_path, rel_path ) )
67 print >> sys.stdout, "wiff: %s" % options.wiff
68 if options.scan:
69 file_path = download_from_url (options.scan, output_dir, basename=basename, ext='wiff.scan')
70 rel_path = os.path.basename(file_path)
71 os.symlink( rel_path, os.path.join(output_dir,'wiff_scan'))
72 rval.append( '<li><a href="%s" type="application/octet-stream">%s</a></li>' % ( rel_path, rel_path ) )
73 print >> sys.stdout, "scan: %s" % options.scan
74 if options.mtd:
75 file_path = download_from_url (options.mtd, output_dir, basename=basename, ext='wiff.mtd')
76 rel_path = os.path.basename(file_path)
77 os.symlink( rel_path, os.path.join(output_dir,'wiff_mtd'))
78 rval.append( '<li><a href="%s" type="application/octet-stream">%s</a></li>' % ( rel_path, rel_path ) )
79 print >> sys.stdout, "mtd: %s" % options.mtd
80 if options.output_file:
81 rval.append( '</ul></div></body></html>' )
82 f = open(options.output_file,'a')
83 f.write("\n".join( rval ))
84 f.close()
85
86 if __name__ == '__main__':
87 __main__()