2
|
1 """
|
|
2 homer composite datatypes
|
|
3 Use at your peril
|
|
4 Kevin Ying
|
|
5 for the homer wrapper
|
|
6
|
|
7 Nov 2012
|
|
8 """
|
|
9
|
|
10 import logging, os, sys, time, tempfile, shutil, string, glob
|
|
11 import data
|
|
12 from galaxy import util
|
|
13 from cgi import escape
|
|
14 import urllib, binascii
|
|
15 from galaxy.web import url_for
|
|
16 from galaxy.datatypes import metadata
|
|
17 from galaxy.datatypes.metadata import MetadataElement
|
|
18 from galaxy.datatypes.data import Text
|
|
19 from galaxy.datatypes.tabular import Tabular
|
|
20 from galaxy.datatypes.images import Html
|
|
21 from galaxy.datatypes.interval import Interval
|
|
22 from galaxy.util.hash_util import *
|
|
23
|
|
24 gal_Log = logging.getLogger(__name__)
|
|
25 verbose = False
|
|
26
|
|
27 class HomerTagDirectory(Html):
|
|
28 """
|
|
29 base class to use for homer tag directory datatypes
|
|
30 composite datatype elements
|
|
31 stored in extra files path
|
|
32 """
|
|
33
|
|
34 #MetadataElement( name="base_name", desc="base name for all transformed versions of this genetic dataset", default='HomerTagDirectory',
|
|
35 #readonly=True, set_in_upload=False)
|
|
36
|
|
37 composite_type = 'auto_primary_file'
|
|
38 #allow_datatype_change = False
|
|
39 file_ext = 'homerTagDirectory'
|
|
40
|
|
41 def __init__(self, **kwd):
|
|
42 Html.__init__(self, **kwd)
|
|
43 self.add_composite_file('tagInfo.txt', description="tagInfo")
|
|
44 self.add_composite_file('tagAutocorrelation.txt', description="tagAutocorrelation")
|
|
45 self.add_composite_file('tagCountDistribution.txt', description="tagCountDistribution")
|
|
46 self.add_composite_file('tagLengthDistribution.txt', description="tagLengthDistribution")
|
|
47
|
|
48 def generate_primary_file(self, dataset=None):
|
|
49 rval = ['<html><head><title>Homer Tag Directory Galaxy Composite Dataset </title></head><p/>']
|
|
50 rval.append('<div>This composite dataset is composed of the following files:<p/><ul>')
|
|
51 for composite_name, composite_file in self.get_composite_files( dataset = dataset ).iteritems():
|
|
52 fn = composite_name
|
|
53 opt_text = ''
|
|
54 if composite_file.optional:
|
|
55 opt_text = ' (optional)'
|
|
56 if composite_file.get('description'):
|
|
57 rval.append( '<li><a href="%s" type="application/binary">%s (%s)</a>%s</li>' % ( fn, fn, composite_file.get('description'), opt_text ) )
|
|
58 else:
|
|
59 rval.append( '<li><a href="%s" type="application/binary">%s</a>%s</li>' % ( fn, fn, opt_text ) )
|
|
60 rval.append( '</ul></div></html>' )
|
|
61 return "\n".join( rval )
|
|
62
|
|
63
|
|
64 def regenerate_primary_file(self,dataset):
|
|
65 """
|
|
66 cannot do this until we are setting metadata
|
|
67 """
|
|
68 #bn = dataset.metadata.base_name
|
|
69 efp = dataset.extra_files_path
|
|
70 flist = os.listdir(efp)
|
|
71 rval = ['<html><head><title>Files for Composite Dataset %s</title></head><body><p/>Composite %s contains:<p/><ul>' % (dataset.name,dataset.name)]
|
|
72 for i,fname in enumerate(flist):
|
|
73 sfname = os.path.split(fname)[-1]
|
|
74 f,e = os.path.splitext(fname)
|
|
75 rval.append( '<li><a href="%s">%s</a></li>' % ( sfname, sfname) )
|
|
76 rval.append( '</ul></body></html>' )
|
|
77 f = file(dataset.file_name,'w')
|
|
78 f.write("\n".join( rval ))
|
|
79 f.write('\n')
|
|
80 f.close()
|
|
81
|
|
82 def get_mime(self):
|
|
83 """Returns the mime type of the datatype"""
|
|
84 return 'text/html'
|
|
85
|
|
86 def set_meta( self, dataset, **kwd ):
|
|
87
|
|
88 """
|
|
89 for homer maketagdirectory eg
|
|
90
|
|
91 """
|
|
92 Html.set_meta( self, dataset, **kwd )
|
|
93 if kwd.get('overwrite') == False:
|
|
94 if verbose:
|
|
95 gal_Log.debug('@@@ HomerTagDirectory set_meta called with overwrite = False')
|
|
96 return True
|
|
97 try:
|
|
98 efp = dataset.extra_files_path
|
|
99 except:
|
|
100 if verbose:
|
|
101 gal_Log.debug('@@@ HomerTagDirectory set_meta failed %s - dataset %s has no efp ?' % (sys.exc_info()[0], dataset.name))
|
|
102 return False
|
|
103 try:
|
|
104 flist = os.listdir(efp)
|
|
105 except:
|
|
106 if verbose: gal_Log.debug('@@@ HomerTagDirectory set_meta failed %s - dataset %s has no efp ?' % (sys.exc_info()[0],dataset.name))
|
|
107 return False
|
|
108 if len(flist) == 0:
|
|
109 if verbose:
|
|
110 gal_Log.debug('@@@ HomerTagDirectory set_meta failed - %s efp %s is empty?' % (dataset.name,efp))
|
|
111 return False
|
|
112 self.regenerate_primary_file(dataset)
|
|
113 if not dataset.info:
|
|
114 dataset.info = 'Galaxy HomerTagDirectory datatype object'
|
|
115 if not dataset.blurb:
|
|
116 dataset.blurb = 'Composite file - Homer Galaxy toolkit'
|
|
117 return True
|
|
118
|