6
|
1 """
|
|
2 HubAssembly datatype
|
|
3 """
|
|
4 import logging
|
|
5
|
|
6 from galaxy.datatypes.text import Html
|
|
7
|
|
8 log = logging.getLogger( __name__ )
|
|
9
|
|
10 # !!! README !!! The content of this file should be added in tracks.py, but do it carefully!
|
|
11 # Don't erase the existing content
|
|
12
|
|
13
|
|
14 class UCSCTrackHub( Html ):
|
|
15 """
|
|
16 derived class for BioC data structures in Galaxy
|
|
17 """
|
|
18
|
|
19 file_ext = 'trackhub'
|
|
20 composite_type = 'auto_primary_file'
|
|
21
|
|
22 def __init__( self, **kwd ):
|
|
23 Html.__init__( self, **kwd )
|
|
24
|
|
25 def generate_primary_file( self, dataset=None ):
|
|
26 """
|
|
27 This is called only at upload to write the html file
|
|
28 cannot rename the datasets here - they come with the default unfortunately
|
|
29 """
|
|
30 rval = [
|
|
31 '<html><head><title>Files for Composite Dataset (%s)</title></head><p/>\
|
|
32 This composite dataset is composed of the following files:<p/><ul>' % (
|
|
33 self.file_ext)]
|
|
34
|
|
35 def create_tree(path, tree):
|
|
36 if path[0] in tree:
|
|
37 create_tree(path[1:], tree[path[0]])
|
|
38 else:
|
|
39 tree[path[0]] = {}
|
|
40 if len(path) == 1:
|
|
41 return
|
|
42 else:
|
|
43 create_tree(path[1:], tree[path[0]])
|
|
44
|
|
45 def print_tree(tree, level):
|
|
46 if len(tree) == 0:
|
|
47 return
|
|
48
|
|
49 for vertex in tree:
|
|
50 composite_name = vertex
|
|
51 bullet_point = '<li><a href="{0}>{0}</a></li>'.format(composite_name)
|
|
52 rval.append(bullet_point)
|
|
53 # Parent, so need to create a sub <ul>
|
|
54 if len(tree[vertex]) > 0:
|
|
55 rval.append('<ul>')
|
|
56 print_tree(tree[vertex], level+1)
|
|
57 rval.append('</ul>')
|
|
58
|
|
59 walkable_tree = {}
|
|
60
|
|
61 for composite_name_full_path, composite_file in self.get_composite_files(dataset=dataset).iteritems():
|
|
62 paths = composite_name_full_path.split('/')
|
|
63 # Prepare the tree from to perform a Depth First Search
|
|
64 create_tree(paths, walkable_tree)
|
|
65
|
|
66 # Perform a Depth First Search to print all the directory and files properly
|
|
67 print_tree(walkable_tree, 0)
|
|
68
|
|
69 # rval.append('<li><a href="%s">%s</a>%s' % (composite_name, composite_name, opt_text))
|
|
70 rval.append('</ul></html>')
|
|
71 return "\n".join(rval)
|
|
72
|
|
73 def set_peek( self, dataset, is_multi_byte=False ):
|
|
74 if not dataset.dataset.purged:
|
|
75 dataset.peek = "Track Hub structure: Visualization in UCSC Track Hub"
|
|
76 else:
|
|
77 dataset.peek = 'file does not exist'
|
|
78 dataset.blurb = 'file purged from disk'
|
|
79
|
|
80 def display_peek( self, dataset ):
|
|
81 try:
|
|
82 return dataset.peek
|
|
83 except:
|
|
84 return "Track Hub structure: Visualization in UCSC Track Hub"
|
|
85
|
|
86 def sniff( self, filename ):
|
|
87 return False
|