0
|
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__()
|