[2] | 1 | """ |
---|
| 2 | Image classes |
---|
| 3 | """ |
---|
| 4 | |
---|
| 5 | import data |
---|
| 6 | import logging |
---|
| 7 | from galaxy.datatypes.metadata import MetadataElement |
---|
| 8 | from galaxy.datatypes import metadata |
---|
| 9 | from galaxy.datatypes.sniff import * |
---|
| 10 | from urllib import urlencode, quote_plus |
---|
| 11 | import zipfile |
---|
| 12 | import os, subprocess, tempfile |
---|
| 13 | |
---|
| 14 | log = logging.getLogger(__name__) |
---|
| 15 | |
---|
| 16 | class Image( data.Data ): |
---|
| 17 | """Class describing an image""" |
---|
| 18 | def set_peek( self, dataset, is_multi_byte=False ): |
---|
| 19 | if not dataset.dataset.purged: |
---|
| 20 | dataset.peek = 'Image in %s format' % dataset.extension |
---|
| 21 | dataset.blurb = data.nice_size( dataset.get_size() ) |
---|
| 22 | else: |
---|
| 23 | dataset.peek = 'file does not exist' |
---|
| 24 | dataset.blurb = 'file purged from disk' |
---|
| 25 | |
---|
| 26 | class Pdf( Image ): |
---|
| 27 | def sniff(self, filename): |
---|
| 28 | """Determine if the file is in pdf format. |
---|
| 29 | """ |
---|
| 30 | headers = get_headers(filename, None, 1) |
---|
| 31 | try: |
---|
| 32 | if headers[0][0].startswith("%PDF"): |
---|
| 33 | return True |
---|
| 34 | else: |
---|
| 35 | return False |
---|
| 36 | except IndexError: |
---|
| 37 | return False |
---|
| 38 | |
---|
| 39 | def create_applet_tag_peek( class_name, archive, params ): |
---|
| 40 | text = """ |
---|
| 41 | <!--[if !IE]>--> |
---|
| 42 | <object classid="java:%s" |
---|
| 43 | type="application/x-java-applet" |
---|
| 44 | height="30" width="200" align="center" > |
---|
| 45 | <param name="archive" value="%s"/>""" % ( class_name, archive ) |
---|
| 46 | for name, value in params.iteritems(): |
---|
| 47 | text += """<param name="%s" value="%s"/>""" % ( name, value ) |
---|
| 48 | text += """ |
---|
| 49 | <!--<![endif]--> |
---|
| 50 | <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" |
---|
| 51 | height="30" width="200" > |
---|
| 52 | <param name="code" value="%s" /> |
---|
| 53 | <param name="archive" value="%s"/>""" % ( class_name, archive ) |
---|
| 54 | for name, value in params.iteritems(): |
---|
| 55 | text += """<param name="%s" value="%s"/>""" % ( name, value ) |
---|
| 56 | text += """</object> |
---|
| 57 | <!--[if !IE]>--> |
---|
| 58 | </object> |
---|
| 59 | <!--<![endif]--> |
---|
| 60 | """ |
---|
| 61 | return """<div><p align="center">%s</p></div>""" % text |
---|
| 62 | |
---|
| 63 | class Gmaj( data.Data ): |
---|
| 64 | """Class describing a GMAJ Applet""" |
---|
| 65 | file_ext = "gmaj.zip" |
---|
| 66 | copy_safe_peek = False |
---|
| 67 | def set_peek( self, dataset, is_multi_byte=False ): |
---|
| 68 | if not dataset.dataset.purged: |
---|
| 69 | if hasattr( dataset, 'history_id' ): |
---|
| 70 | params = { |
---|
| 71 | "bundle":"display?id=%s&tofile=yes&toext=.zip" % dataset.id, |
---|
| 72 | "buttonlabel": "Launch GMAJ", |
---|
| 73 | "nobutton": "false", |
---|
| 74 | "urlpause" :"100", |
---|
| 75 | "debug": "false", |
---|
| 76 | "posturl": quote_plus( "history_add_to?%s" % "&".join( [ "%s=%s" % ( key, value ) for key, value in { 'history_id': dataset.history_id, 'ext': 'maf', 'name': 'GMAJ Output on data %s' % dataset.hid, 'info': 'Added by GMAJ', 'dbkey': dataset.dbkey, 'copy_access_from': dataset.id }.items() ] ) ) |
---|
| 77 | } |
---|
| 78 | class_name = "edu.psu.bx.gmaj.MajApplet.class" |
---|
| 79 | archive = "/static/gmaj/gmaj.jar" |
---|
| 80 | dataset.peek = create_applet_tag_peek( class_name, archive, params ) |
---|
| 81 | dataset.blurb = 'GMAJ Multiple Alignment Viewer' |
---|
| 82 | else: |
---|
| 83 | dataset.peek = "After you add this item to your history, you will be able to launch the GMAJ applet." |
---|
| 84 | dataset.blurb = 'GMAJ Multiple Alignment Viewer' |
---|
| 85 | else: |
---|
| 86 | dataset.peek = 'file does not exist' |
---|
| 87 | dataset.blurb = 'file purged from disk' |
---|
| 88 | def display_peek(self, dataset): |
---|
| 89 | try: |
---|
| 90 | return dataset.peek |
---|
| 91 | except: |
---|
| 92 | return "peek unavailable" |
---|
| 93 | def get_mime(self): |
---|
| 94 | """Returns the mime type of the datatype""" |
---|
| 95 | return 'application/zip' |
---|
| 96 | def sniff(self, filename): |
---|
| 97 | """ |
---|
| 98 | NOTE: the sniff.convert_newlines() call in the upload utility will keep Gmaj data types from being |
---|
| 99 | correctly sniffed, but the files can be uploaded (they'll be sniffed as 'txt'). This sniff function |
---|
| 100 | is here to provide an example of a sniffer for a zip file. |
---|
| 101 | """ |
---|
| 102 | if not zipfile.is_zipfile( filename ): |
---|
| 103 | return False |
---|
| 104 | contains_gmaj_file = False |
---|
| 105 | zip_file = zipfile.ZipFile(filename, "r") |
---|
| 106 | for name in zip_file.namelist(): |
---|
| 107 | if name.split(".")[1].strip().lower() == 'gmaj': |
---|
| 108 | contains_gmaj_file = True |
---|
| 109 | break |
---|
| 110 | zip_file.close() |
---|
| 111 | if not contains_gmaj_file: |
---|
| 112 | return False |
---|
| 113 | return True |
---|
| 114 | |
---|
| 115 | class Html( data.Text ): |
---|
| 116 | """Class describing an html file""" |
---|
| 117 | file_ext = "html" |
---|
| 118 | |
---|
| 119 | def set_peek( self, dataset, is_multi_byte=False ): |
---|
| 120 | if not dataset.dataset.purged: |
---|
| 121 | dataset.peek = "HTML file" |
---|
| 122 | dataset.blurb = data.nice_size( dataset.get_size() ) |
---|
| 123 | else: |
---|
| 124 | dataset.peek = 'file does not exist' |
---|
| 125 | dataset.blurb = 'file purged from disk' |
---|
| 126 | def get_mime(self): |
---|
| 127 | """Returns the mime type of the datatype""" |
---|
| 128 | return 'text/html' |
---|
| 129 | def sniff( self, filename ): |
---|
| 130 | """ |
---|
| 131 | Determines whether the file is in html format |
---|
| 132 | |
---|
| 133 | >>> fname = get_test_fname( 'complete.bed' ) |
---|
| 134 | >>> Html().sniff( fname ) |
---|
| 135 | False |
---|
| 136 | >>> fname = get_test_fname( 'file.html' ) |
---|
| 137 | >>> Html().sniff( fname ) |
---|
| 138 | True |
---|
| 139 | """ |
---|
| 140 | headers = get_headers( filename, None ) |
---|
| 141 | try: |
---|
| 142 | for i, hdr in enumerate(headers): |
---|
| 143 | if hdr and hdr[0].lower().find( '<html>' ) >=0: |
---|
| 144 | return True |
---|
| 145 | return False |
---|
| 146 | except: |
---|
| 147 | return True |
---|
| 148 | |
---|
| 149 | class Laj( data.Text ): |
---|
| 150 | """Class describing a LAJ Applet""" |
---|
| 151 | file_ext = "laj" |
---|
| 152 | copy_safe_peek = False |
---|
| 153 | |
---|
| 154 | def set_peek( self, dataset, is_multi_byte=False ): |
---|
| 155 | if not dataset.dataset.purged: |
---|
| 156 | if hasattr( dataset, 'history_id' ): |
---|
| 157 | params = { |
---|
| 158 | "alignfile1": "display?id=%s" % dataset.id, |
---|
| 159 | "buttonlabel": "Launch LAJ", |
---|
| 160 | "title": "LAJ in Galaxy", |
---|
| 161 | "posturl": quote_plus( "history_add_to?%s" % "&".join( [ "%s=%s" % ( key, value ) for key, value in { 'history_id': dataset.history_id, 'ext': 'lav', 'name': 'LAJ Output', 'info': 'Added by LAJ', 'dbkey': dataset.dbkey, 'copy_access_from': dataset.id }.items() ] ) ), |
---|
| 162 | "noseq": "true" |
---|
| 163 | } |
---|
| 164 | class_name = "edu.psu.cse.bio.laj.LajApplet.class" |
---|
| 165 | archive = "/static/laj/laj.jar" |
---|
| 166 | dataset.peek = create_applet_tag_peek( class_name, archive, params ) |
---|
| 167 | else: |
---|
| 168 | dataset.peek = "After you add this item to your history, you will be able to launch the LAJ applet." |
---|
| 169 | dataset.blurb = 'LAJ Multiple Alignment Viewer' |
---|
| 170 | else: |
---|
| 171 | dataset.peek = 'file does not exist' |
---|
| 172 | dataset.blurb = 'file purged from disk' |
---|
| 173 | def display_peek(self, dataset): |
---|
| 174 | try: |
---|
| 175 | return dataset.peek |
---|
| 176 | except: |
---|
| 177 | return "peek unavailable" |
---|