annotate uploadzip.py @ 4:fdd4776a434f draft

Uploaded
author davidvanzessen
date Thu, 09 Apr 2015 04:08:05 -0400
parents 6f24bce6817e
children a2f200121dda
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
1 #!/usr/bin/env python
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
2 #Processes uploads from the user.
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
3
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
4 # WARNING: Changes in this tool (particularly as related to parsing) may need
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
5 # to be reflected in galaxy.web.controllers.tool_runner and galaxy.tools
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
6
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
7 import urllib, sys, os, gzip, tempfile, shutil, re, gzip, zipfile, codecs, binascii
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
8 from galaxy import eggs
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
9 # need to import model before sniff to resolve a circular import dependency
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
10 import galaxy.model
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
11 from galaxy.datatypes.checkers import *
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
12 from galaxy.datatypes import sniff
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
13 from galaxy.datatypes.binary import *
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
14 from galaxy.datatypes.images import Pdf
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
15 from galaxy.datatypes.registry import Registry
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
16 from galaxy import util
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
17 from galaxy.datatypes.util.image_util import *
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
18 from galaxy.util.json import *
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
19
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
20 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
21 import Image as PIL
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
22 except ImportError:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
23 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
24 from PIL import Image as PIL
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
25 except:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
26 PIL = None
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
27
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
28 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
29 import bz2
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
30 except:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
31 bz2 = None
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
32
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
33 assert sys.version_info[:2] >= ( 2, 4 )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
34
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
35 def stop_err( msg, ret=1 ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
36 sys.stderr.write( msg )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
37 sys.exit( ret )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
38 def file_err( msg, dataset, json_file ):
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
39 json_file.write( dumps( dict( type = 'dataset',
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
40 ext = 'data',
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
41 dataset_id = dataset.dataset_id,
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
42 stderr = msg ) ) + "\n" )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
43 # never remove a server-side upload
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
44 if dataset.type in ( 'server_dir', 'path_paste' ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
45 return
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
46 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
47 os.remove( dataset.path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
48 except:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
49 pass
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
50 def safe_dict(d):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
51 """
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
52 Recursively clone json structure with UTF-8 dictionary keys
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
53 http://mellowmachines.com/blog/2009/06/exploding-dictionary-with-unicode-keys-as-python-arguments/
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
54 """
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
55 if isinstance(d, dict):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
56 return dict([(k.encode('utf-8'), safe_dict(v)) for k,v in d.iteritems()])
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
57 elif isinstance(d, list):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
58 return [safe_dict(x) for x in d]
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
59 else:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
60 return d
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
61 def parse_outputs( args ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
62 rval = {}
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
63 for arg in args:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
64 id, files_path, path = arg.split( ':', 2 )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
65 rval[int( id )] = ( path, files_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
66 return rval
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
67 def add_file( dataset, registry, json_file, output_path ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
68 data_type = None
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
69 line_count = None
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
70 converted_path = None
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
71 stdout = None
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
72 link_data_only = dataset.get( 'link_data_only', 'copy_files' )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
73 in_place = dataset.get( 'in_place', True )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
74
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
75 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
76 ext = dataset.file_type
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
77 except AttributeError:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
78 file_err( 'Unable to process uploaded file, missing file_type parameter.', dataset, json_file )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
79 return
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
80
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
81 if dataset.type == 'url':
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
82 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
83 page = urllib.urlopen( dataset.path ) #page will be .close()ed by sniff methods
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
84 temp_name, dataset.is_multi_byte = sniff.stream_to_file( page, prefix='url_paste', source_encoding=util.get_charset_from_http_headers( page.headers ) )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
85 except Exception, e:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
86 file_err( 'Unable to fetch %s\n%s' % ( dataset.path, str( e ) ), dataset, json_file )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
87 return
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
88 dataset.path = temp_name
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
89 # See if we have an empty file
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
90 if not os.path.exists( dataset.path ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
91 file_err( 'Uploaded temporary file (%s) does not exist.' % dataset.path, dataset, json_file )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
92 return
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
93 if not os.path.getsize( dataset.path ) > 0:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
94 file_err( 'The uploaded file is empty', dataset, json_file )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
95 return
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
96 if not dataset.type == 'url':
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
97 # Already set is_multi_byte above if type == 'url'
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
98 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
99 dataset.is_multi_byte = util.is_multi_byte( codecs.open( dataset.path, 'r', 'utf-8' ).read( 100 ) )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
100 except UnicodeDecodeError, e:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
101 dataset.is_multi_byte = False
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
102 # Is dataset an image?
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
103 image = check_image( dataset.path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
104 if image:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
105 if not PIL:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
106 image = None
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
107 # get_image_ext() returns None if nor a supported Image type
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
108 ext = get_image_ext( dataset.path, image )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
109 data_type = ext
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
110 # Is dataset content multi-byte?
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
111 elif dataset.is_multi_byte:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
112 data_type = 'multi-byte char'
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
113 ext = sniff.guess_ext( dataset.path, is_multi_byte=True )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
114 # Is dataset content supported sniffable binary?
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
115 else:
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
116 # FIXME: This ignores the declared sniff order in datatype_conf.xml
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
117 # resulting in improper behavior
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
118 type_info = Binary.is_sniffable_binary( dataset.path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
119 if type_info:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
120 data_type = type_info[0]
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
121 ext = type_info[1]
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
122 data_type = 'compressed archive' #upload zip file modification
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
123 if not data_type:
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
124 root_datatype = registry.get_datatype_by_extension( dataset.file_type )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
125 if getattr( root_datatype, 'compressed', False ):
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
126 data_type = 'compressed archive'
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
127 ext = dataset.file_type
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
128 else:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
129 # See if we have a gzipped file, which, if it passes our restrictions, we'll uncompress
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
130 is_gzipped, is_valid = check_gzip( dataset.path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
131 if is_gzipped and not is_valid:
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
132 file_err( 'The gzipped uploaded file contains inappropriate content', dataset, json_file )
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
133 return
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
134 elif is_gzipped and is_valid:
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
135 if link_data_only == 'copy_files':
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
136 # We need to uncompress the temp_name file, but BAM files must remain compressed in the BGZF format
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
137 CHUNK_SIZE = 2**20 # 1Mb
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
138 fd, uncompressed = tempfile.mkstemp( prefix='data_id_%s_upload_gunzip_' % dataset.dataset_id, dir=os.path.dirname( output_path ), text=False )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
139 gzipped_file = gzip.GzipFile( dataset.path, 'rb' )
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
140 while 1:
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
141 try:
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
142 chunk = gzipped_file.read( CHUNK_SIZE )
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
143 except IOError:
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
144 os.close( fd )
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
145 os.remove( uncompressed )
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
146 file_err( 'Problem decompressing gzipped data', dataset, json_file )
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
147 return
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
148 if not chunk:
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
149 break
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
150 os.write( fd, chunk )
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
151 os.close( fd )
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
152 gzipped_file.close()
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
153 # Replace the gzipped file with the decompressed file if it's safe to do so
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
154 if dataset.type in ( 'server_dir', 'path_paste' ) or not in_place:
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
155 dataset.path = uncompressed
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
156 else:
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
157 shutil.move( uncompressed, dataset.path )
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
158 os.chmod(dataset.path, 0644)
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
159 dataset.name = dataset.name.rstrip( '.gz' )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
160 data_type = 'gzip'
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
161 if not data_type and bz2 is not None:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
162 # See if we have a bz2 file, much like gzip
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
163 is_bzipped, is_valid = check_bz2( dataset.path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
164 if is_bzipped and not is_valid:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
165 file_err( 'The gzipped uploaded file contains inappropriate content', dataset, json_file )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
166 return
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
167 elif is_bzipped and is_valid:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
168 if link_data_only == 'copy_files':
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
169 # We need to uncompress the temp_name file
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
170 CHUNK_SIZE = 2**20 # 1Mb
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
171 fd, uncompressed = tempfile.mkstemp( prefix='data_id_%s_upload_bunzip2_' % dataset.dataset_id, dir=os.path.dirname( output_path ), text=False )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
172 bzipped_file = bz2.BZ2File( dataset.path, 'rb' )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
173 while 1:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
174 try:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
175 chunk = bzipped_file.read( CHUNK_SIZE )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
176 except IOError:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
177 os.close( fd )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
178 os.remove( uncompressed )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
179 file_err( 'Problem decompressing bz2 compressed data', dataset, json_file )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
180 return
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
181 if not chunk:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
182 break
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
183 os.write( fd, chunk )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
184 os.close( fd )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
185 bzipped_file.close()
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
186 # Replace the bzipped file with the decompressed file if it's safe to do so
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
187 if dataset.type in ( 'server_dir', 'path_paste' ) or not in_place:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
188 dataset.path = uncompressed
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
189 else:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
190 shutil.move( uncompressed, dataset.path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
191 os.chmod(dataset.path, 0644)
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
192 dataset.name = dataset.name.rstrip( '.bz2' )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
193 data_type = 'bz2'
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
194 if not data_type:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
195 # See if we have a zip archive
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
196 is_zipped = check_zip( dataset.path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
197 if is_zipped:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
198 if link_data_only == 'copy_files':
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
199 CHUNK_SIZE = 2**20 # 1Mb
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
200 uncompressed = None
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
201 uncompressed_name = None
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
202 unzipped = False
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
203 z = zipfile.ZipFile( dataset.path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
204 for name in z.namelist():
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
205 if name.endswith('/'):
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
206 continue
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
207 if unzipped:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
208 stdout = 'ZIP file contained more than one file, only the first file was added to Galaxy.'
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
209 break
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
210 fd, uncompressed = tempfile.mkstemp( prefix='data_id_%s_upload_zip_' % dataset.dataset_id, dir=os.path.dirname( output_path ), text=False )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
211 if sys.version_info[:2] >= ( 2, 6 ):
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
212 zipped_file = z.open( name )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
213 while 1:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
214 try:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
215 chunk = zipped_file.read( CHUNK_SIZE )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
216 except IOError:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
217 os.close( fd )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
218 os.remove( uncompressed )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
219 file_err( 'Problem decompressing zipped data', dataset, json_file )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
220 return
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
221 if not chunk:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
222 break
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
223 os.write( fd, chunk )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
224 os.close( fd )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
225 zipped_file.close()
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
226 uncompressed_name = name
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
227 unzipped = True
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
228 else:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
229 # python < 2.5 doesn't have a way to read members in chunks(!)
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
230 try:
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
231 outfile = open( uncompressed, 'wb' )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
232 outfile.write( z.read( name ) )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
233 outfile.close()
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
234 uncompressed_name = name
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
235 unzipped = True
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
236 except IOError:
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
237 os.close( fd )
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
238 os.remove( uncompressed )
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
239 file_err( 'Problem decompressing zipped data', dataset, json_file )
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
240 return
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
241 z.close()
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
242 # Replace the zipped file with the decompressed file if it's safe to do so
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
243 if uncompressed is not None:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
244 if dataset.type in ( 'server_dir', 'path_paste' ) or not in_place:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
245 dataset.path = uncompressed
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
246 else:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
247 shutil.move( uncompressed, dataset.path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
248 os.chmod(dataset.path, 0644)
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
249 dataset.name = uncompressed_name
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
250 data_type = 'zip'
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
251 if not data_type:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
252 # TODO refactor this logic. check_binary isn't guaranteed to be
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
253 # correct since it only looks at whether the first 100 chars are
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
254 # printable or not. If someone specifies a known unsniffable
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
255 # binary datatype and check_binary fails, the file gets mangled.
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
256 if check_binary( dataset.path ) or Binary.is_ext_unsniffable(dataset.file_type):
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
257 # We have a binary dataset, but it is not Bam, Sff or Pdf
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
258 data_type = 'binary'
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
259 #binary_ok = False
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
260 parts = dataset.name.split( "." )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
261 if len( parts ) > 1:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
262 ext = parts[-1].strip().lower()
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
263 if not Binary.is_ext_unsniffable(ext):
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
264 file_err( 'The uploaded binary file contains inappropriate content', dataset, json_file )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
265 return
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
266 elif Binary.is_ext_unsniffable(ext) and dataset.file_type != ext:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
267 err_msg = "You must manually set the 'File Format' to '%s' when uploading %s files." % ( ext.capitalize(), ext )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
268 file_err( err_msg, dataset, json_file )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
269 return
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
270 if not data_type:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
271 # We must have a text file
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
272 if check_html( dataset.path ):
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
273 file_err( 'The uploaded file contains inappropriate HTML content', dataset, json_file )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
274 return
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
275 if data_type != 'binary':
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
276 if link_data_only == 'copy_files':
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
277 if dataset.type in ( 'server_dir', 'path_paste' ) and data_type not in [ 'gzip', 'bz2', 'zip' ]:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
278 in_place = False
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
279 # Convert universal line endings to Posix line endings, but allow the user to turn it off,
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
280 # so that is becomes possible to upload gzip, bz2 or zip files with binary data without
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
281 # corrupting the content of those files.
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
282 if dataset.to_posix_lines:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
283 tmpdir = output_adjacent_tmpdir( output_path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
284 tmp_prefix = 'data_id_%s_convert_' % dataset.dataset_id
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
285 if dataset.space_to_tab:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
286 line_count, converted_path = sniff.convert_newlines_sep2tabs( dataset.path, in_place=in_place, tmp_dir=tmpdir, tmp_prefix=tmp_prefix )
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
287 else:
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
288 line_count, converted_path = sniff.convert_newlines( dataset.path, in_place=in_place, tmp_dir=tmpdir, tmp_prefix=tmp_prefix )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
289 if dataset.file_type == 'auto':
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
290 ext = sniff.guess_ext( dataset.path, registry.sniff_order )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
291 else:
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
292 ext = dataset.file_type
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
293 data_type = ext
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
294 # Save job info for the framework
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
295 if ext == 'auto' and dataset.ext:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
296 ext = dataset.ext
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
297 if ext == 'auto':
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
298 ext = 'data'
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
299 datatype = registry.get_datatype_by_extension( ext )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
300 if dataset.type in ( 'server_dir', 'path_paste' ) and link_data_only == 'link_to_files':
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
301 # Never alter a file that will not be copied to Galaxy's local file store.
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
302 if datatype.dataset_content_needs_grooming( dataset.path ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
303 err_msg = 'The uploaded files need grooming, so change your <b>Copy data into Galaxy?</b> selection to be ' + \
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
304 '<b>Copy files into Galaxy</b> instead of <b>Link to files without copying into Galaxy</b> so grooming can be performed.'
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
305 file_err( err_msg, dataset, json_file )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
306 return
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
307 if link_data_only == 'copy_files' and dataset.type in ( 'server_dir', 'path_paste' ) and data_type not in [ 'gzip', 'bz2', 'zip' ]:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
308 # Move the dataset to its "real" path
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
309 if converted_path is not None:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
310 shutil.copy( converted_path, output_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
311 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
312 os.remove( converted_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
313 except:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
314 pass
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
315 else:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
316 # This should not happen, but it's here just in case
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
317 shutil.copy( dataset.path, output_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
318 elif link_data_only == 'copy_files':
2
30d16d36d536 Uploaded
davidvanzessen
parents: 0
diff changeset
319 shutil.move( dataset.path, output_path )
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
320 # Write the job info
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
321 stdout = stdout or 'uploaded %s file' % data_type
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
322 info = dict( type = 'dataset',
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
323 dataset_id = dataset.dataset_id,
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
324 ext = ext,
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
325 stdout = stdout,
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
326 name = dataset.name,
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
327 line_count = line_count )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
328 if dataset.get('uuid', None) is not None:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
329 info['uuid'] = dataset.get('uuid')
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
330 json_file.write( dumps( info ) + "\n" )
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
331
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
332 if link_data_only == 'copy_files' and datatype.dataset_content_needs_grooming( output_path ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
333 # Groom the dataset content if necessary
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
334 datatype.groom_dataset_content( output_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
335
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
336 def add_composite_file( dataset, registry, json_file, output_path, files_path ):
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
337 if dataset.composite_files:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
338 os.mkdir( files_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
339 for name, value in dataset.composite_files.iteritems():
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
340 value = util.bunch.Bunch( **value )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
341 if dataset.composite_file_paths[ value.name ] is None and not value.optional:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
342 file_err( 'A required composite data file was not provided (%s)' % name, dataset, json_file )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
343 break
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
344 elif dataset.composite_file_paths[value.name] is not None:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
345 dp = dataset.composite_file_paths[value.name][ 'path' ]
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
346 isurl = dp.find('://') <> -1 # todo fixme
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
347 if isurl:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
348 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
349 temp_name, dataset.is_multi_byte = sniff.stream_to_file( urllib.urlopen( dp ), prefix='url_paste' )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
350 except Exception, e:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
351 file_err( 'Unable to fetch %s\n%s' % ( dp, str( e ) ), dataset, json_file )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
352 return
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
353 dataset.path = temp_name
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
354 dp = temp_name
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
355 if not value.is_binary:
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
356 tmpdir = output_adjacent_tmpdir( output_path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
357 tmp_prefix = 'data_id_%s_convert_' % dataset.dataset_id
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
358 if dataset.composite_file_paths[ value.name ].get( 'space_to_tab', value.space_to_tab ):
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
359 sniff.convert_newlines_sep2tabs( dp, tmp_dir=tmpdir, tmp_prefix=tmp_prefix )
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
360 else:
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
361 sniff.convert_newlines( dp, tmp_dir=tmpdir, tmp_prefix=tmp_prefix )
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
362 shutil.move( dp, os.path.join( files_path, name ) )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
363 # Move the dataset to its "real" path
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
364 shutil.move( dataset.primary_file, output_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
365 # Write the job info
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
366 info = dict( type = 'dataset',
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
367 dataset_id = dataset.dataset_id,
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
368 stdout = 'uploaded %s file' % dataset.file_type )
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
369 json_file.write( dumps( info ) + "\n" )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
370
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
371
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
372 def output_adjacent_tmpdir( output_path ):
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
373 """ For temp files that will ultimately be moved to output_path anyway
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
374 just create the file directly in output_path's directory so shutil.move
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
375 will work optimially.
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
376 """
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
377 return os.path.dirname( output_path )
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
378
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
379
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
380 def __main__():
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
381
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
382 if len( sys.argv ) < 4:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
383 print >>sys.stderr, 'usage: upload.py <root> <datatypes_conf> <json paramfile> <output spec> ...'
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
384 sys.exit( 1 )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
385
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
386 output_paths = parse_outputs( sys.argv[4:] )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
387 json_file = open( 'galaxy.json', 'w' )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
388
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
389 registry = Registry()
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
390 registry.load_datatypes( root_dir=sys.argv[1], config=sys.argv[2] )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
391
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
392 for line in open( sys.argv[3], 'r' ):
3
6f24bce6817e Uploaded
davidvanzessen
parents: 2
diff changeset
393 dataset = loads( line )
0
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
394 dataset = util.bunch.Bunch( **safe_dict( dataset ) )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
395 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
396 output_path = output_paths[int( dataset.dataset_id )][0]
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
397 except:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
398 print >>sys.stderr, 'Output path for dataset %s not found on command line' % dataset.dataset_id
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
399 sys.exit( 1 )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
400 if dataset.type == 'composite':
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
401 files_path = output_paths[int( dataset.dataset_id )][1]
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
402 add_composite_file( dataset, registry, json_file, output_path, files_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
403 else:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
404 add_file( dataset, registry, json_file, output_path )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
405
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
406 # clean up paramfile
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
407 # TODO: this will not work when running as the actual user unless the
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
408 # parent directory is writable by the user.
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
409 try:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
410 os.remove( sys.argv[3] )
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
411 except:
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
412 pass
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
413
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
414 if __name__ == '__main__':
4f3d79062c18 Uploaded
davidvanzessen
parents:
diff changeset
415 __main__()