Mercurial > repos > sanbi-uwc > neo4j_datatypes
changeset 0:ba6fe46519e4 draft
planemo upload for repository https://github.com/SANBI-SA/tools-sanbi-uwc/tree/master/datatypes/neo4j_datatypes commit 6f0defa160a42559d15bc47768b845f24227dc03
author | sanbi-uwc |
---|---|
date | Fri, 13 May 2016 08:36:48 -0400 |
parents | |
children | 9f8e04bd6fa9 |
files | datatypes_conf.xml neo4j.py |
diffstat | 2 files changed, 203 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datatypes_conf.xml Fri May 13 08:36:48 2016 -0400 @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<datatypes> + <datatype_files> + <datatype_file name="neo4j.py"/> + </datatype_files> + <registration> + <datatype extension="neo4j" type="galaxy.datatypes.neo4j:Neo4j" display_in_upload="false"/> + <datatype extension="neostore" type="galaxy.datatypes.neo4j:Neo4jDB" display_in_upload="false"/> + </registration> + <sniffers> + <sniffer type="galaxy.datatypes.neo4j:Neo4j"/> + </sniffers> +</datatypes>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/neo4j.py Fri May 13 08:36:48 2016 -0400 @@ -0,0 +1,190 @@ +""" +Neo4j Composite Dataset +""" +import logging +import os +import sys + +from galaxy.datatypes.text import Html +from galaxy.datatypes.metadata import MetadataElement +from galaxy.datatypes.data import get_file_peek +from galaxy.datatypes.data import Data, Text + +gal_Log = logging.getLogger(__name__) +verbose = True + +class Neo4j(Html): + """ + base class to use for neostore datatypes + derived from html - composite datatype elements + stored in extra files path + """ + MetadataElement( name='neostore', default=None, desc='Neo4j NeoStore File', readonly=True, visible=True, set_in_upload=True, no_value=None ) + MetadataElement( name='neostore_count_file', default=None, desc='Neo4j Count File', readonly=True, visible=True, set_in_upload=True, no_value=None ) + MetadataElement( name="neostore_labeltokenstore_db_file", default=None, desc="Neostore LabelTokenStore File", readonly=True, visible=True, no_value=None ) + MetadataElement( name="neostore_nodestore_file", default=None, desc="Neostore NodeStore File", readonly=True, visible=True, no_value=None) + MetadataElement( name="neostore_propertystore_file", default=None, desc="Neostore Property Store File", readonly=True, visible=True, no_value=None) + MetadataElement( name="neostore_relationship_group_file", default=None, desc="Neostore Relationship Group File", readonly=True, visible=True, no_value=None) + MetadataElement( name="neostore_relationship_file", default=None, desc="Neostore Relationship File", readonly=True, visible=True, no_value=None) + MetadataElement( name="neostore_relationship_type_file", default=None, desc="Neostore Relationship Type File", readonly=True, visible=True, no_value=None) + MetadataElement( name="neostore_schema_store_file", default=None, desc="Neostore Schema Store File", readonly=True, visible=True, no_value=None) + MetadataElement( name="neostore_transaction_db_file", default=None, desc="Neostore Transaction File", readonly=True, visible=True, no_value=None) + + composite_type = 'auto_primary_file' + allow_datatype_change = False + file_ext = 'neo4j' + + def generate_primary_file( self, dataset=None ): + rval = ['<html><head><title>Neo4j 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 + """ + 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 lped/pbed eg + """ + Html.set_meta( self, dataset, **kwd ) + if not kwd.get('overwrite'): + if verbose: + gal_Log.debug('@@@ neostore set_meta called with overwrite = False') + return True + try: + efp = dataset.extra_files_path + except: + if verbose: + gal_Log.debug('@@@neostore 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('@@@neostore 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('@@@neostore 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 genotype datatype object' + if not dataset.blurb: + dataset.blurb = 'Composite file - Neo4j Galaxy toolkit' + return True + + def set_peek(self, dataset, is_multi_byte=False): + """Set the peek and blurb text""" + if not dataset.dataset.purged: + dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte) + dataset.blurb = 'Neo4j database data' + else: + dataset.peek = 'file does not exist' + dataset.blurb = 'file purged from disk' + + def display_peek(self, dataset): + """Create HTML content, used for displaying peek.""" + try: + return dataset.peek + except Exception: + return "NEO4J database (multiple files)" + + def display_data(self, trans, data, preview=False, filename=None, + to_ext=None, size=None, offset=None, **kwd): + """Documented as an old display method, but still gets called via tests etc + This allows us to format the data shown in the central pane via the "eye" icon. + """ + if filename is not None and filename != "index": + # Change nothing - important for the unit tests to access child files: + return Data.display_data(self, trans, data, preview, filename, + to_ext, size, offset, **kwd) + if self.file_ext == "neo4j": + title = "This is a NEO4J database" + msg = "" + try: + # Try to use any text recorded in the dummy index file: + handle = open(data.file_name, "rU") + msg = handle.read().strip() + handle.close() + except Exception: + pass + if not msg: + msg = title + # Galaxy assumes HTML for the display of composite datatypes, + return "<html><head><title>%s</title></head><body><pre>%s</pre></body></html>" % (title, msg) + + +class Neo4jDB(Neo4j, Data): + """Class for nucleotide BLAST database files.""" + file_ext = 'neostore' + + def __init__(self, **kwd): + Data.__init__(self, **kwd) + self.add_composite_file('neostore', substitute_name_with_metadata='neostore', is_binary=True) + self.add_composite_file('neostore.id', substitute_name_with_metadata='neostore', is_binary=True) + self.add_composite_file('neostore.counts.db.a', substitute_name_with_metadata='neostore_count_file', is_binary=True) + self.add_composite_file('neostore.counts.db.b', substitute_name_with_metadata='neostore_count_file', is_binary=True) + self.add_composite_file('neostore.labeltokenstore.db', substitute_name_with_metadata='neostore_labeltokenstore_db_file', is_binary=True) + self.add_composite_file('neostore.labeltokenstore.db.id', substitute_name_with_metadata='neostore_labeltokenstore_db_file', is_binary=True) + self.add_composite_file('neostore.labeltokenstore.db.names', substitute_name_with_metadata='neostore_labeltokenstore_db_file', is_binary=True) + self.add_composite_file('neostore.labeltokenstore.db.names.id', substitute_name_with_metadata='neostore_labeltokenstore_db_file', is_binary=True) + self.add_composite_file('neostore.nodestore.db', substitute_name_with_metadata='neostore_nodestore_file', is_binary=True) + self.add_composite_file('neostore.nodestore.db.id', substitute_name_with_metadata='neostore_nodestore_file', is_binary=True) + self.add_composite_file('neostore.nodestore.db.labels', substitute_name_with_metadata='neostore_nodestore_file', is_binary=True) + self.add_composite_file('neostore.nodestore.db.labels.id', substitute_name_with_metadata='neostore_nodestore_file', is_binary=True) + + self.add_composite_file('neostore.propertystore.db', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.id', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.arrays', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.arrays.id', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.index', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.index.id',substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.index.keys', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.index.keys.id', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.strings', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + self.add_composite_file('neostore.propertystore.db.strings.id', substitute_name_with_metadata='neostore_propertystore_file', is_binary=True) + + self.add_composite_file('neostore.relationshipgroupstore.db', substitute_name_with_metadata='neostore_relationship_group_file', is_binary=True) + self.add_composite_file('neostore.relationshipgroupstore.db.id', substitute_name_with_metadata='neostore_relationship_group_file', is_binary=True) + self.add_composite_file('neostore.relationshipstore.db', substitute_name_with_metadata='neostore_relationship_file', is_binary=True) + self.add_composite_file('neostore.relationshipstore.db.id', substitute_name_with_metadata='neostore_relationship_file', is_binary=True) + self.add_composite_file('neostore.relationshiptypestore.db', substitute_name_with_metadata='neostore_relationship_type_file', is_binary=True) + self.add_composite_file('neostore.relationshiptypestore.db.id', substitute_name_with_metadata='neostore_relationship_type_file', is_binary=True) + self.add_composite_file('neostore.relationshiptypestore.db.names', substitute_name_with_metadata='neostore_relationship_type_file', is_binary=True) + self.add_composite_file('neostore.relationshiptypestore.db.names.id', substitute_name_with_metadata='neostore_relationship_type_file', is_binary=True) + self.add_composite_file('neostore.schemastore.db', substitute_name_with_metadata='neostore_schema_store_file', is_binary=True) + self.add_composite_file('neostore.schemastore.db.id', substitute_name_with_metadata='neostore_schema_store_file', is_binary=True) + self.add_composite_file('neostore.transaction.db.0', substitute_name_with_metadata='neostore_count_file', is_binary=True) + +if __name__ == '__main__': + import doctest + doctest.testmod(sys.modules[__name__])