Mercurial > repos > damion > versioned_data
diff data_stores/vdb_biomaj.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_biomaj.py Sun Aug 09 16:07:50 2015 -0400 @@ -0,0 +1,71 @@ +#!/usr/bin/python +## ******************************* Biomaj FOLDER ********************************* +## + +import os +import time +import glob +import vdb_common +import vdb_data_stores + +class VDBBiomajDataStore(vdb_data_stores.VDBDataStore): + + versions = None + library = None + + def __init__(self, retrieval_obj, spec_file_id): + """ + Provides list of available versions where each version is a data file sitting in a Biomaj data store subfolder. e.g. + + /projects2/ref_databases/biomaj/ncbi/blast/silva_rna/ silva_rna_119/flat + /projects2/ref_databases/biomaj/ncbi/genomes/Bacteria/ Bacteria_2014-07-25/flat + + """ + super(VDBBiomajDataStore, self).__init__(retrieval_obj, spec_file_id) + + self.library = retrieval_obj.library + + versions = [] + # Linked, meaning that our data source spec file pointed to some folder on the server. + # Name of EACH subfolder should be a label for each version, including date/time and version id. + + base_file_path = os.path.join(os.path.dirname(self.base_file_name),'*','flat','*') + try: + #Here we need to get subfolder listing of linked file location. + for item in glob.glob(base_file_path): + + # Only interested in files, and not ones in the symlinked /current/ subfolder + # Also, Galaxy will strip off .gz suffixes - WITHOUT UNCOMPRESSING FILES! + # So, best to prevent data store from showing .gz files in first place. + if os.path.isfile(item) and not '/current/' in item and not item[-3:] == '.gz': + #Name includes last two subfolders: /[folder]/flat/[name] + item_name = '/'.join(item.rsplit('/',3)[1:]) + # Can't count on creation date being spelled out in name + created = vdb_common.parse_date(time.ctime(os.path.getmtime(item))) + versions.append({'name':item_name, 'id':item_name, 'created': created}) + + except Exception as err: + # This is the first call to api so api url or authentication erro can happen here. + versions.append({ + 'name':'Error: Unable to get version list: ' + err.message, + 'id':'', + 'created':'' + }) + + self.versions = sorted(versions, key=lambda x: x['name'], reverse=True) + + + def get_version(self, version_name): + """ + Return server path of requested version info + + @uses library_label_path string Full hierarchic label of a library file or folder, PARENT of version id folder. + @uses base_file_name string Server absolute path to data_store spec file + @param version_name alphaneumeric string + """ + self.version_label = version_name + self.library_version_path = os.path.join(self.library_label_path, self.version_label) + + #linked to some other folder, spec is location of base_file_name + self.version_path = os.path.join(self.data_store_path, version_name) +