comparison util/Reader.py @ 25:31a41ce128cc draft

planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 691e5366893905d30943a3cb8cdfb6341f0f5362-dirty
author yating-l
date Fri, 13 Oct 2017 12:44:31 -0400
parents
children 127037c49bc8
comparison
equal deleted inserted replaced
24:bb6fdccef474 25:31a41ce128cc
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.interval.Bed import Bed
10 from datatypes.interval.BedSimpleRepeats import BedSimpleRepeats
11 from datatypes.interval.BedSpliceJunctions import BedSpliceJunctions
12 from datatypes.interval.BlastXml import BlastXml
13 from datatypes.interval.Gff3 import Gff3
14 from datatypes.interval.Gff3_mrna import Gff3_mrna
15 from datatypes.interval.Gff3_transcript import Gff3_transcript
16 from datatypes.interval.Gtf import Gtf
17 from datatypes.interval.GtfStringTie import GtfStringTie
18 from datatypes.interval.BigPsl import BigPsl
19 from datatypes.interval.BedBlatAlignments import BedBlatAlignments
20 from datatypes.interval.BedBlastAlignments import BedBlastAlignments
21 from datatypes.interval.Psl import Psl
22 from datatypes.sequence.Fasta import Fasta
23 from apollo.ApolloUser import ApolloUser
24 from util import santitizer
25
26 class Reader(object):
27
28 DATATYPE_CLASS = [Bam, BigWig, Bed, BedSimpleRepeats,
29 BedSpliceJunctions, BigPsl, BedBlatAlignments, BedBlastAlignments,
30 BlastXml, Gff3, Gff3_mrna, Gff3_transcript, Gff3_mrna, Gtf, GtfStringTie, Psl, Fasta]
31
32 def __init__(self, input_json_file):
33 self.inputFile = input_json_file
34 self.args = self.loadJson()
35
36
37 def loadJson(self):
38 try:
39 data_file = codecs.open(self.inputFile, 'r', 'utf-8')
40 return json.load(data_file)
41 except IOError:
42 print "Cannot find JSON file\n"
43 exit(1)
44
45 def getToolDir(self):
46 try:
47 return self.args["tool_directory"]
48 except KeyError:
49 print ("tool_directory is not defined in the input file!")
50 exit(1)
51
52 def getExtFilesPath(self):
53 try:
54 return self.args["extra_files_path"]
55 except KeyError:
56 print ("extra_files_path is not defined in the input file!")
57 exit(1)
58
59 def getUserEmail(self):
60 try:
61 return self.args["user_email"]
62 except KeyError:
63 print ("user_email is not defined in the input file!")
64 exit(1)
65
66 def getDebugMode(self):
67 try:
68 return self.args["debug_mode"]
69 except KeyError:
70 print ("debug_mode is not defined in the input file!")
71 exit(1)
72
73 def getTrackType(self):
74 track_type = self.args.get("track_type")
75 return track_type
76
77 def getApolloHost(self):
78 apollo_host = self.args.get("apollo_host")
79 return apollo_host
80
81
82 def getRefGenome(self):
83 array_inputs_reference_genome = self.args["fasta"]
84 # TODO: Replace these with the object Fasta
85 input_fasta_file = array_inputs_reference_genome["false_path"]
86 input_fasta_file_name = santitizer.sanitize_name_input(array_inputs_reference_genome["name"])
87 genome_name = santitizer.sanitize_name_input(self.args["genome_name"])
88 reference_genome = Fasta(input_fasta_file,
89 input_fasta_file_name, genome_name)
90 return reference_genome
91
92 def getApolloUser(self):
93 user_info = self.args.get("apollo_user")
94 if not user_info:
95 firstname = "demo"
96 lastname = "user"
97 password = "gonramp"
98 user_email = self.getUserEmail()
99 else:
100 firstname = user_info['firstname']
101 lastname = user_info['lastname']
102 user_email = user_info['user_email']
103 password = user_info['password']
104 apollo_user = ApolloUser(user_email, firstname, lastname, password)
105 return apollo_user
106
107 def getTracksData(self):
108 self.logger = logging.getLogger(__name__)
109 all_datatype_dictionary = dict()
110 for datatype in self.DATATYPE_CLASS:
111 class_name = datatype.__name__
112 array_inputs = self.args.get(str(class_name))
113 if array_inputs:
114 self.logger.debug("Creating %s objects\n", class_name)
115 self.logger.debug("array_inputs: %s", array_inputs)
116 all_datatype_dictionary.update(self.create_ordered_datatype_objects(datatype, array_inputs))
117
118 return all_datatype_dictionary
119
120 def create_ordered_datatype_objects(self, ExtensionClass, array_inputs):
121 """
122 Function which executes the creation all the necessary files / folders for a special Datatype, for TrackHub
123 and update the dictionary of datatype
124
125 :param ExtensionClass:
126 :param array_inputs:
127 :type ExtensionClass: Datatype
128 :type array_inputs: list[string]
129 """
130
131 datatype_dictionary = {}
132
133 # TODO: Optimize this double loop
134 for input_data in array_inputs:
135 input_false_path = input_data["false_path"]
136 input_data["name"] = santitizer.sanitize_name_input(input_data["name"])
137 extensionObject = ExtensionClass(input_false_path, input_data)
138 extensionObject.generateCustomTrack()
139 datatype_dictionary.update({input_data["order_index"]: extensionObject})
140 self.logger.debug("%s object: %s has been created", ExtensionClass, input_data["name"])
141 return datatype_dictionary
142
143
144
145
146