Mercurial > repos > damion > versioned_data
diff data_stores/vdb_kipper.py @ 1:5c5027485f7d draft
Uploaded correct file
author | damion |
---|---|
date | Sun, 09 Aug 2015 16:07:50 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data_stores/vdb_kipper.py Sun Aug 09 16:07:50 2015 -0400 @@ -0,0 +1,102 @@ +#!/usr/bin/python +## ********************************* Kipper ************************************* +## + +import vdb_common +import vdb_data_stores +import subprocess +import json +import glob +import os +import sys + +class VDBKipperDataStore(vdb_data_stores.VDBDataStore): + + metadata = None + versions = None + command = None + + def __init__(self, retrieval_obj, spec_file_id): + """ + Metadata (version list) is expected in "master/" subfolder of data_store_path on server. + + Future: allow for more than one database / .md file in a folder? + """ + super(VDBKipperDataStore, self).__init__(retrieval_obj, spec_file_id) + # Ensure we're working with this tool's version of Kipper. + self.command = os.path.join(os.path.dirname(sys._getframe().f_code.co_filename),'kipper.py') + self.versions = [] + + metadata_path = os.path.join(self.data_store_path,'master','*.md') + metadata_files = glob.glob(metadata_path) + + if len(metadata_files) == 0: + return # Handled by empty list error in versioned_data_form.py + + metadata_file = metadata_files[0] + + with open(metadata_file,'r') as metadata_handle: + self.metadata = json.load(metadata_handle) + for volume in self.metadata['volumes']: + self.versions.extend(volume['versions']) + + if len(self.versions) == 0: + print "Error: Unable to locate metadata file: " + metadata_path + sys.exit(1) + + self.versions = sorted(self.versions, key=lambda x: x['id'], reverse=True) + + + def get_version(self, version_name): + """ + Trigger populating of the appropriate version folder. + Returns path information to version folder, and its appropriate library label. + + @param version_id string + """ + + version = self.get_metadata_version(version_name) + + if not version: + print 'Error: Galaxy was not able to find the given version id in the %s data store.' % self.version_path + sys.exit( 1 ) + + version_name = version['name'] + self.version_path = os.path.join(self.data_store_path, version_name) + self.version_label = vdb_common.lightDate(version['created']) + '_v' + version_name + + print self.library_label_path + print self.version_label + + self.library_version_path = os.path.join(self.library_label_path, self.version_label) + + if not os.path.exists(self.version_path): + try: + os.mkdir(self.version_path) + except: + print 'Error: Galaxy was not able to create data store folder "%s". Check permissions?' % self.version_path + sys.exit( 1 ) + + # Generate cache if folder is empty (can take a while): + if os.listdir(self.version_path) == []: + + db_file = os.path.join(self.data_store_path, 'master', self.metadata["db_file_name"] ) + command = [self.command, db_file, '-e','-I', version_name, '-o', self.version_path ] + + try: + result = subprocess.call(command); + except: + print 'Error: Galaxy was not able to run the kipper.py program successfully for this job: "%s". Check permissions?' % self.version_path + sys.exit( 1 ) + + + def get_metadata_version(self, version_name=''): + if version_name == '': + return self.versions[0] + + for version in self.versions: + if str(version['name']) == version_name: + return version + + return False +