diff util/Reader.py @ 6:237707a6b74d draft

planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit a500f7ab2119cc5faaf80393bd87428389d06880-dirty
author yating-l
date Thu, 15 Feb 2018 17:05:05 -0500
parents
children 5d5fdcb798da
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/util/Reader.py	Thu Feb 15 17:05:05 2018 -0500
@@ -0,0 +1,127 @@
+import json
+import logging
+import codecs
+
+
+# Internal dependencies
+from datatypes.binary.Bam import Bam
+from datatypes.binary.BigWig import BigWig
+from datatypes.interval.Bed import Bed
+from datatypes.interval.BedSimpleRepeats import BedSimpleRepeats
+from datatypes.interval.BedSpliceJunctions import BedSpliceJunctions
+from datatypes.interval.BlastXml import BlastXml
+from datatypes.interval.Gff3 import Gff3
+from datatypes.interval.Gtf import Gtf
+from datatypes.interval.BigPsl import BigPsl
+from datatypes.interval.BedBlatAlignments import BedBlatAlignments
+from datatypes.interval.BedBlastAlignments import BedBlastAlignments
+from datatypes.interval.Psl import Psl
+from datatypes.sequence.Fasta import Fasta
+from util import santitizer 
+
+class Reader(object):
+    
+    DATATYPE_CLASS = [Bam, BigWig, Bed, BedSimpleRepeats, 
+        BedSpliceJunctions, BigPsl, BedBlatAlignments, BedBlastAlignments, 
+        BlastXml, Gff3, Gtf, Psl, Fasta]
+
+    def __init__(self, input_json_file):
+        self.inputFile = input_json_file
+        self.args = self.loadJson()
+        
+    
+    def loadJson(self):
+        try:
+            data_file = codecs.open(self.inputFile, 'r', 'utf-8')   
+            return json.load(data_file) 
+        except IOError:
+            print "Cannot find JSON file\n"
+            exit(1)
+
+    def getToolDir(self):
+        try:
+            return self.args["tool_directory"]
+        except KeyError:
+            print ("tool_directory is not defined in the input file!")
+            exit(1)
+
+    def getExtFilesPath(self):
+        try:
+            return self.args["extra_files_path"]
+        except KeyError:
+            print ("extra_files_path is not defined in the input file!")
+            exit(1)
+
+    def getUserEmail(self):
+        try:
+            return self.args["user_email"]
+        except KeyError:
+            print ("user_email is not defined in the input file!")
+            exit(1)
+    
+    def getDebugMode(self):
+        try:
+            return self.args["debug_mode"]
+        except KeyError:
+            print ("debug_mode is not defined in the input file!")
+            exit(1)
+
+    def getTrackType(self):
+        track_type = self.args.get("track_type")
+        return track_type
+    
+    def getGenomeName(self):
+        genome_name = santitizer.sanitize_name_input(self.args["genome_name"])
+        return genome_name
+        
+    def getRefGenome(self):
+        array_inputs_reference_genome = self.args["fasta"]
+        # TODO: Replace these with the object Fasta
+        input_fasta_file = array_inputs_reference_genome["false_path"]
+        input_fasta_file_name = santitizer.sanitize_name_input(array_inputs_reference_genome["name"])
+        #genome_name = santitizer.sanitize_name_input(self.args["genome_name"])
+        genome_name = self.getGenomeName()
+        reference_genome = Fasta(input_fasta_file,
+                             input_fasta_file_name, genome_name)
+        return reference_genome
+
+    def getTracksData(self):
+        self.logger = logging.getLogger(__name__)
+        all_datatype_dictionary = dict()
+        for datatype in self.DATATYPE_CLASS:
+            class_name = datatype.__name__
+            array_inputs = self.args.get(str(class_name))
+            if array_inputs:
+                self.logger.debug("Creating %s objects\n", class_name)
+                self.logger.debug("array_inputs: %s", array_inputs)
+                all_datatype_dictionary.update(self.create_ordered_datatype_objects(datatype, array_inputs))
+               
+        return all_datatype_dictionary
+
+    def create_ordered_datatype_objects(self, ExtensionClass, array_inputs):
+        """
+        Function which executes the creation all the necessary files / folders for a special Datatype, for TrackHub
+        and update the dictionary of datatype
+
+        :param ExtensionClass:
+        :param array_inputs:
+        :type ExtensionClass: Datatype
+        :type array_inputs: list[string]
+        """
+
+        datatype_dictionary = {}
+
+        # TODO: Optimize this double loop
+        for input_data in array_inputs:
+            input_false_path = input_data["false_path"]
+            input_data["name"] = santitizer.sanitize_name_input(input_data["name"])
+            extensionObject = ExtensionClass(input_false_path, input_data)
+            extensionObject.generateCustomTrack()
+            datatype_dictionary.update({input_data["order_index"]: extensionObject})
+            self.logger.debug("%s object: %s has been created", ExtensionClass, input_data["name"])
+        return datatype_dictionary
+
+    
+        
+
+