Mercurial > repos > damion > versioned_data
comparison data_stores/vdb_kipper.py @ 1:5c5027485f7d draft
Uploaded correct file
| author | damion |
|---|---|
| date | Sun, 09 Aug 2015 16:07:50 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:d31a1bd74e63 | 1:5c5027485f7d |
|---|---|
| 1 #!/usr/bin/python | |
| 2 ## ********************************* Kipper ************************************* | |
| 3 ## | |
| 4 | |
| 5 import vdb_common | |
| 6 import vdb_data_stores | |
| 7 import subprocess | |
| 8 import json | |
| 9 import glob | |
| 10 import os | |
| 11 import sys | |
| 12 | |
| 13 class VDBKipperDataStore(vdb_data_stores.VDBDataStore): | |
| 14 | |
| 15 metadata = None | |
| 16 versions = None | |
| 17 command = None | |
| 18 | |
| 19 def __init__(self, retrieval_obj, spec_file_id): | |
| 20 """ | |
| 21 Metadata (version list) is expected in "master/" subfolder of data_store_path on server. | |
| 22 | |
| 23 Future: allow for more than one database / .md file in a folder? | |
| 24 """ | |
| 25 super(VDBKipperDataStore, self).__init__(retrieval_obj, spec_file_id) | |
| 26 # Ensure we're working with this tool's version of Kipper. | |
| 27 self.command = os.path.join(os.path.dirname(sys._getframe().f_code.co_filename),'kipper.py') | |
| 28 self.versions = [] | |
| 29 | |
| 30 metadata_path = os.path.join(self.data_store_path,'master','*.md') | |
| 31 metadata_files = glob.glob(metadata_path) | |
| 32 | |
| 33 if len(metadata_files) == 0: | |
| 34 return # Handled by empty list error in versioned_data_form.py | |
| 35 | |
| 36 metadata_file = metadata_files[0] | |
| 37 | |
| 38 with open(metadata_file,'r') as metadata_handle: | |
| 39 self.metadata = json.load(metadata_handle) | |
| 40 for volume in self.metadata['volumes']: | |
| 41 self.versions.extend(volume['versions']) | |
| 42 | |
| 43 if len(self.versions) == 0: | |
| 44 print "Error: Unable to locate metadata file: " + metadata_path | |
| 45 sys.exit(1) | |
| 46 | |
| 47 self.versions = sorted(self.versions, key=lambda x: x['id'], reverse=True) | |
| 48 | |
| 49 | |
| 50 def get_version(self, version_name): | |
| 51 """ | |
| 52 Trigger populating of the appropriate version folder. | |
| 53 Returns path information to version folder, and its appropriate library label. | |
| 54 | |
| 55 @param version_id string | |
| 56 """ | |
| 57 | |
| 58 version = self.get_metadata_version(version_name) | |
| 59 | |
| 60 if not version: | |
| 61 print 'Error: Galaxy was not able to find the given version id in the %s data store.' % self.version_path | |
| 62 sys.exit( 1 ) | |
| 63 | |
| 64 version_name = version['name'] | |
| 65 self.version_path = os.path.join(self.data_store_path, version_name) | |
| 66 self.version_label = vdb_common.lightDate(version['created']) + '_v' + version_name | |
| 67 | |
| 68 print self.library_label_path | |
| 69 print self.version_label | |
| 70 | |
| 71 self.library_version_path = os.path.join(self.library_label_path, self.version_label) | |
| 72 | |
| 73 if not os.path.exists(self.version_path): | |
| 74 try: | |
| 75 os.mkdir(self.version_path) | |
| 76 except: | |
| 77 print 'Error: Galaxy was not able to create data store folder "%s". Check permissions?' % self.version_path | |
| 78 sys.exit( 1 ) | |
| 79 | |
| 80 # Generate cache if folder is empty (can take a while): | |
| 81 if os.listdir(self.version_path) == []: | |
| 82 | |
| 83 db_file = os.path.join(self.data_store_path, 'master', self.metadata["db_file_name"] ) | |
| 84 command = [self.command, db_file, '-e','-I', version_name, '-o', self.version_path ] | |
| 85 | |
| 86 try: | |
| 87 result = subprocess.call(command); | |
| 88 except: | |
| 89 print 'Error: Galaxy was not able to run the kipper.py program successfully for this job: "%s". Check permissions?' % self.version_path | |
| 90 sys.exit( 1 ) | |
| 91 | |
| 92 | |
| 93 def get_metadata_version(self, version_name=''): | |
| 94 if version_name == '': | |
| 95 return self.versions[0] | |
| 96 | |
| 97 for version in self.versions: | |
| 98 if str(version['name']) == version_name: | |
| 99 return version | |
| 100 | |
| 101 return False | |
| 102 |
