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)
+