Mercurial > repos > kevyin > homer
diff homerDatatypes.py @ 2:7268cbc535e5 draft
findpeaks and maketagdirectory
author | kevyin |
---|---|
date | Fri, 23 Nov 2012 00:30:27 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homerDatatypes.py Fri Nov 23 00:30:27 2012 -0500 @@ -0,0 +1,118 @@ +""" +homer composite datatypes +Use at your peril +Kevin Ying +for the homer wrapper + +Nov 2012 +""" + +import logging, os, sys, time, tempfile, shutil, string, glob +import data +from galaxy import util +from cgi import escape +import urllib, binascii +from galaxy.web import url_for +from galaxy.datatypes import metadata +from galaxy.datatypes.metadata import MetadataElement +from galaxy.datatypes.data import Text +from galaxy.datatypes.tabular import Tabular +from galaxy.datatypes.images import Html +from galaxy.datatypes.interval import Interval +from galaxy.util.hash_util import * + +gal_Log = logging.getLogger(__name__) +verbose = False + +class HomerTagDirectory(Html): + """ + base class to use for homer tag directory datatypes + composite datatype elements + stored in extra files path + """ + + #MetadataElement( name="base_name", desc="base name for all transformed versions of this genetic dataset", default='HomerTagDirectory', + #readonly=True, set_in_upload=False) + + composite_type = 'auto_primary_file' + #allow_datatype_change = False + file_ext = 'homerTagDirectory' + + def __init__(self, **kwd): + Html.__init__(self, **kwd) + self.add_composite_file('tagInfo.txt', description="tagInfo") + self.add_composite_file('tagAutocorrelation.txt', description="tagAutocorrelation") + self.add_composite_file('tagCountDistribution.txt', description="tagCountDistribution") + self.add_composite_file('tagLengthDistribution.txt', description="tagLengthDistribution") + + def generate_primary_file(self, dataset=None): + rval = ['<html><head><title>Homer Tag Directory Galaxy Composite Dataset </title></head><p/>'] + rval.append('<div>This composite dataset is composed of the following files:<p/><ul>') + for composite_name, composite_file in self.get_composite_files( dataset = dataset ).iteritems(): + fn = composite_name + opt_text = '' + if composite_file.optional: + opt_text = ' (optional)' + if composite_file.get('description'): + rval.append( '<li><a href="%s" type="application/binary">%s (%s)</a>%s</li>' % ( fn, fn, composite_file.get('description'), opt_text ) ) + else: + rval.append( '<li><a href="%s" type="application/binary">%s</a>%s</li>' % ( fn, fn, opt_text ) ) + rval.append( '</ul></div></html>' ) + return "\n".join( rval ) + + + def regenerate_primary_file(self,dataset): + """ + cannot do this until we are setting metadata + """ + #bn = dataset.metadata.base_name + efp = dataset.extra_files_path + flist = os.listdir(efp) + rval = ['<html><head><title>Files for Composite Dataset %s</title></head><body><p/>Composite %s contains:<p/><ul>' % (dataset.name,dataset.name)] + for i,fname in enumerate(flist): + sfname = os.path.split(fname)[-1] + f,e = os.path.splitext(fname) + rval.append( '<li><a href="%s">%s</a></li>' % ( sfname, sfname) ) + rval.append( '</ul></body></html>' ) + f = file(dataset.file_name,'w') + f.write("\n".join( rval )) + f.write('\n') + f.close() + + def get_mime(self): + """Returns the mime type of the datatype""" + return 'text/html' + + def set_meta( self, dataset, **kwd ): + + """ + for homer maketagdirectory eg + + """ + Html.set_meta( self, dataset, **kwd ) + if kwd.get('overwrite') == False: + if verbose: + gal_Log.debug('@@@ HomerTagDirectory set_meta called with overwrite = False') + return True + try: + efp = dataset.extra_files_path + except: + if verbose: + gal_Log.debug('@@@ HomerTagDirectory set_meta failed %s - dataset %s has no efp ?' % (sys.exc_info()[0], dataset.name)) + return False + try: + flist = os.listdir(efp) + except: + if verbose: gal_Log.debug('@@@ HomerTagDirectory set_meta failed %s - dataset %s has no efp ?' % (sys.exc_info()[0],dataset.name)) + return False + if len(flist) == 0: + if verbose: + gal_Log.debug('@@@ HomerTagDirectory set_meta failed - %s efp %s is empty?' % (dataset.name,efp)) + return False + self.regenerate_primary_file(dataset) + if not dataset.info: + dataset.info = 'Galaxy HomerTagDirectory datatype object' + if not dataset.blurb: + dataset.blurb = 'Composite file - Homer Galaxy toolkit' + return True +