Mercurial > repos > yating-l > hubarchivecreatortest
comparison util/Reader.py @ 1:85195e0d4b71 draft
planemo upload for repository https://github.com/goeckslab/hub-archive-creator commit b1ae7349f118a0fe7923d765020dfc684cf84116-dirty
| author | yating-l |
|---|---|
| date | Fri, 29 Sep 2017 13:32:23 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:f9ccc5ad1713 | 1:85195e0d4b71 |
|---|---|
| 1 import json | |
| 2 import logging | |
| 3 import codecs | |
| 4 | |
| 5 | |
| 6 # Internal dependencies | |
| 7 from datatypes.binary.Bam import Bam | |
| 8 from datatypes.binary.BigWig import BigWig | |
| 9 from datatypes.binary.BigBed import BigBed | |
| 10 from datatypes.interval.Bed import Bed | |
| 11 from datatypes.interval.BedSimpleRepeats import BedSimpleRepeats | |
| 12 from datatypes.interval.BedSpliceJunctions import BedSpliceJunctions | |
| 13 from datatypes.interval.CytoBand import CytoBand | |
| 14 from datatypes.interval.BedBlatAlignments import BedBlatAlignments | |
| 15 from datatypes.interval.BedBlastAlignments import BedBlastAlignments | |
| 16 from datatypes.interval.Gff3 import Gff3 | |
| 17 from datatypes.interval.Gtf import Gtf | |
| 18 from datatypes.interval.Psl import Psl | |
| 19 from datatypes.sequence.Fasta import Fasta | |
| 20 from util import santitizer | |
| 21 | |
| 22 class Reader(object): | |
| 23 | |
| 24 DATATYPE_CLASS = [Bam, BigWig, BigBed, Bed, BedSimpleRepeats, BedSpliceJunctions, CytoBand, BedBlatAlignments, BedBlastAlignments, Gff3, Gtf, Psl, Fasta] | |
| 25 | |
| 26 def __init__(self, input_json_file): | |
| 27 self.inputFile = input_json_file | |
| 28 self.args = self.loadJson() | |
| 29 | |
| 30 | |
| 31 def loadJson(self): | |
| 32 try: | |
| 33 data_file = codecs.open(self.inputFile, 'r', 'utf-8') | |
| 34 return json.load(data_file) | |
| 35 except IOError: | |
| 36 print "Cannot find JSON file\n" | |
| 37 exit(1) | |
| 38 | |
| 39 def getToolDir(self): | |
| 40 try: | |
| 41 return self.args["tool_directory"] | |
| 42 except KeyError: | |
| 43 print ("tool_directory is not defined in the input file!") | |
| 44 exit(1) | |
| 45 | |
| 46 def getExtFilesPath(self): | |
| 47 try: | |
| 48 return self.args["extra_files_path"] | |
| 49 except KeyError: | |
| 50 print ("extra_files_path is not defined in the input file!") | |
| 51 exit(1) | |
| 52 | |
| 53 def getUserEmail(self): | |
| 54 try: | |
| 55 return self.args["user_email"] | |
| 56 except KeyError: | |
| 57 print ("user_email is not defined in the input file!") | |
| 58 exit(1) | |
| 59 | |
| 60 def getDebugMode(self): | |
| 61 try: | |
| 62 return self.args["debug_mode"] | |
| 63 except KeyError: | |
| 64 print ("debug_mode is not defined in the input file!") | |
| 65 exit(1) | |
| 66 | |
| 67 | |
| 68 def getRefGenome(self): | |
| 69 array_inputs_reference_genome = self.args["fasta"] | |
| 70 # TODO: Replace these with the object Fasta | |
| 71 input_fasta_file = array_inputs_reference_genome["false_path"] | |
| 72 input_fasta_file_name = santitizer.sanitize_name_input(array_inputs_reference_genome["name"]) | |
| 73 genome_name = santitizer.sanitize_name_input(self.args["genome_name"]) | |
| 74 reference_genome = Fasta(input_fasta_file, | |
| 75 input_fasta_file_name, genome_name) | |
| 76 return reference_genome | |
| 77 | |
| 78 | |
| 79 def getTracksData(self): | |
| 80 self.logger = logging.getLogger(__name__) | |
| 81 all_datatype_dictionary = dict() | |
| 82 for datatype in self.DATATYPE_CLASS: | |
| 83 class_name = datatype.__name__ | |
| 84 array_inputs = self.args.get(str(class_name)) | |
| 85 if array_inputs: | |
| 86 self.logger.debug("Create %s objects\n", class_name) | |
| 87 self.logger.debug("array_inputs: %s", array_inputs) | |
| 88 all_datatype_dictionary.update(self.create_ordered_datatype_objects(datatype, array_inputs)) | |
| 89 | |
| 90 return all_datatype_dictionary | |
| 91 | |
| 92 def create_ordered_datatype_objects(self, ExtensionClass, array_inputs): | |
| 93 """ | |
| 94 Function which executes the creation all the necessary files / folders for a special Datatype, for TrackHub | |
| 95 and update the dictionary of datatype | |
| 96 | |
| 97 :param ExtensionClass: | |
| 98 :param array_inputs: | |
| 99 :type ExtensionClass: Datatype | |
| 100 :type array_inputs: list[string] | |
| 101 """ | |
| 102 | |
| 103 datatype_dictionary = {} | |
| 104 | |
| 105 # TODO: Optimize this double loop | |
| 106 for input_data in array_inputs: | |
| 107 input_false_path = input_data["false_path"] | |
| 108 input_data["name"] = santitizer.sanitize_name_input(input_data["name"]) | |
| 109 extensionObject = ExtensionClass(input_false_path, input_data) | |
| 110 extensionObject.generateCustomTrack() | |
| 111 datatype_dictionary.update({input_data["order_index"]: extensionObject}) | |
| 112 return datatype_dictionary | |
| 113 | |
| 114 | |
| 115 | |
| 116 | |
| 117 |
