diff datatypes/Datatype.py @ 29:7e8a8b732db3 draft

planemo upload for repository https://github.com/goeckslab/hub-archive-creator commit 1a81ebd0ddea950b84af3fc830e9267a4814b29f
author yating-l
date Wed, 16 May 2018 18:04:20 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datatypes/Datatype.py	Wed May 16 18:04:20 2018 -0400
@@ -0,0 +1,98 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+
+"""
+Super Class of the managed datatype
+"""
+
+import os
+import tempfile
+import collections
+import util
+import logging
+import abc
+from abc import ABCMeta
+from TrackDb import TrackDb
+from datatypes.validators.DataValidation import DataValidation
+
+
+class Datatype(object):
+    __metaclass__ = ABCMeta
+
+    twoBitFile = None
+    chromSizesFile = None
+    input_fasta_file = None
+    extra_files_path = None
+    tool_directory = None
+
+    mySpecieFolderPath = None
+    myTrackFolderPath = None
+ 
+
+    def __init__(self):
+        not_init_message = "The {0} is not initialized." \
+                           "Did you use pre_init static method first?"
+        if Datatype.input_fasta_file is None:
+            raise TypeError(not_init_message.format('reference genome'))
+        if Datatype.extra_files_path is None:
+            raise TypeError(not_init_message.format('track Hub path'))
+        if Datatype.tool_directory is None:
+            raise TypeError(not_init_message.format('tool directory'))
+        self.inputFile = None
+        self.trackType = None
+        self.dataType = None
+        self.track = None
+        self.trackSettings = dict()
+        self.extraSettings = collections.OrderedDict()
+
+    @staticmethod
+    def pre_init(reference_genome, two_bit_path, chrom_sizes_file,
+                 extra_files_path, tool_directory, specie_folder, tracks_folder):
+        Datatype.extra_files_path = extra_files_path
+        Datatype.tool_directory = tool_directory
+
+        # TODO: All this should be in TrackHub and not in Datatype
+        Datatype.mySpecieFolderPath = specie_folder
+        Datatype.myTrackFolderPath = tracks_folder
+
+        Datatype.input_fasta_file = reference_genome
+
+        # 2bit file creation from input fasta
+        Datatype.twoBitFile = two_bit_path
+        Datatype.chromSizesFile = chrom_sizes_file
+    
+    def generateCustomTrack(self):
+        self.validateData()
+        self.initSettings()
+        #Create the track file
+        self.createTrack()
+        # Create the TrackDb Object
+        self.createTrackDb()
+        logging.debug("- %s %s created", self.dataType, self.trackName)  
+
+    
+    @abc.abstractmethod 
+    def validateData(self):
+        """validate the input data with DataValidation"""
+    
+    def initSettings(self):
+        #Initialize required fields: trackName, longLabel, shortLable
+        self.trackName = self.trackSettings["name"]
+        if self.trackSettings["long_label"]:
+            self.longLabel = self.trackSettings["long_label"]
+        else:
+            self.longLabel = self.trackName
+        if not "short_label" in self.trackSettings:
+            self.shortLabel = ""
+        else:
+            self.shortLabel = self.trackSettings["short_label"]
+        self.trackDataURL = os.path.join(self.myTrackFolderPath, self.trackName)
+        
+
+    @abc.abstractmethod
+    def createTrack(self):
+        """Create the final track file"""
+
+    def createTrackDb(self):
+        self.track = TrackDb(self.trackName, self.longLabel, self.shortLabel, self.trackDataURL, self.trackType, self.extraSettings)
+