From 045e937cc04a1927aa4c32e476c96068482f7c90 Mon Sep 17 00:00:00 2001 From: yomguy <> Date: Wed, 11 Feb 2009 13:15:19 +0000 Subject: [PATCH] #25: fix exception raising in exporters modify some default css styles cleanup --- telemeta/export/core.py | 35 +++++------ telemeta/export/flac.py | 23 ++++--- telemeta/export/mp3.py | 18 ++++-- telemeta/export/ogg.py | 16 ++--- telemeta/export/wav.py | 24 +++---- telemeta/htdocs/css/telemeta.css | 7 ++- .../telemeta_default/mediaitem_detail.html | 8 +-- tests/wav_import.py | 62 +++++++++++++++---- 8 files changed, 120 insertions(+), 73 deletions(-) diff --git a/telemeta/export/core.py b/telemeta/export/core.py index a3d5129c..28ffa2ef 100644 --- a/telemeta/export/core.py +++ b/telemeta/export/core.py @@ -47,8 +47,8 @@ class ExporterCore(Component): try: os.system('normalize-audio '+args+' "'+self.source+'"') return self.source - except IOError: - return 'Exporter error: Cannot normalize, path does not exist.' + except: + raise IOError('ExporterError: cannot normalize, path does not exist.') def check_md5_key(self): """ Check if the md5 key is OK and return a boolean """ @@ -57,7 +57,7 @@ class ExporterCore(Component): '" "'+self.dest+'.md5"') return 'OK' in md5_log.split(':') except IOError: - return 'Exporter error: Cannot check the md5 key...' + raise IOError('ExporterError: cannot check the md5 key.') def get_file_info(self): """ Return the list of informations of the dest """ @@ -72,8 +72,8 @@ class ExporterCore(Component): line_split = line.split(':') value = int(int(line_split[1])/(4*44100)) return value - except IOError: - return 'Exporter error: Cannot get the wav length...' + except: + raise IOError('ExporterError: cannot get the wav length.') def compare_md5_key(self, source, dest): """ Compare source and dest files wih md5 method """ @@ -149,7 +149,6 @@ class ExporterCore(Component): close_fds = True) except: raise ExportProcessError('Command failure:', command, proc) - # Core processing while True: @@ -184,7 +183,7 @@ def get_type(value): for type in types.keys(): if isinstance(value, type) : return types[type] - raise TypeError, str(value) + ' has an unsupported type' + raise TypeError(str(value) + ' has an unsupported type') def get_cast(value, type) : """ Return value, casted into type """ @@ -196,7 +195,7 @@ def get_cast(value, type) : return int(value) elif type == 'str' : return str(value) - raise TypeError, type + ' is an unsupported type' + raise TypeError(type + ' is an unsupported type') def get_file_mime_type(path): """ Return the mime type of a file """ @@ -206,8 +205,8 @@ def get_file_mime_type(path): line_split = line.split(': ') mime = line_split[len(line_split)-1] return mime[:len(mime)-1] - except IOError: - return 'Exporter error [1]: path does not exist.' + except: + raise IOError('ExporterError: path does not exist.') def get_file_type_desc(path): """ Return the type of a file given by the 'file' command """ @@ -217,24 +216,24 @@ def get_file_type_desc(path): description = line.split(': ') description = description[1].split(', ') return description - except IOError: - return 'Exporter error [1]: path does not exist.' + except: + raise IOError('ExporterError: path does not exist.') def iswav(path): """ Tell if path is a WAV """ try: mime = get_file_mime_type(path) return mime == 'audio/x-wav' - except IOError: - return 'Exporter error [1]: path does not exist.' + except: + raise IOError('ExporterError: path does not exist.') def iswav16(path): """ Tell if path is a 16 bit WAV """ try: file_type_desc = get_file_type_desc(path) return iswav(path) and '16 bit' in file_type_desc - except IOError: - return 'Exporter error [1]: path does not exist.' + except: + raise IOError('ExporterError: path does not exist.') def get_file_name(path): """ Return the file name targeted in the path """ @@ -244,8 +243,8 @@ def split_file_name(file): """ Return main file name and its extension """ try: return os.path.splitext(file) - except IOError: - return 'Exporter error [1]: path does not exist.' + except: + raise IOError('ExporterError: path does not exist.') def clean_word(word) : """ Return the word without excessive blank spaces, underscores and diff --git a/telemeta/export/flac.py b/telemeta/export/flac.py index 116878bb..1f822b3d 100644 --- a/telemeta/export/flac.py +++ b/telemeta/export/flac.py @@ -55,8 +55,9 @@ class FlacExporter(ExporterCore): info.append(clean_word(line[:-1])) self.info = info return self.info - except IOError: - return 'Exporter error [1]: file does not exist.' + except: + raise IOError('ExporterError: metaflac is not installed or ' + \ + 'file does not exist.') def set_cache_dir(self,path): """Set the directory where cached files should be stored. Does nothing @@ -74,8 +75,8 @@ class FlacExporter(ExporterCore): os.system('flac -d -o "'+dest+'" "'+self.source+'"') self.source = dest return dest - except IOError: - return 'ExporterError [2]: decoder not compatible.' + except: + raise IOError('ExporterError: decoder is not compatible.') def write_tags(self, file): media = FLAC(file) @@ -84,8 +85,11 @@ class FlacExporter(ExporterCore): media['DESCRIPTION'] = str(self.metadata[tag]) else: media[tag] = str(self.metadata[tag]) - media.save() - + try: + media.save() + except: + raise IOError('ExporterError: cannot write tags.') + def get_args(self,options=None): """Get process options and return arguments for the encoder""" args = [] @@ -108,7 +112,7 @@ class FlacExporter(ExporterCore): #args.append('-c %s="%s"' % (arg, value)) return args - + def process(self, item_id, source, metadata, options=None): self.item_id = item_id self.source = source @@ -116,9 +120,8 @@ class FlacExporter(ExporterCore): self.args = self.get_args(options) self.ext = self.get_file_extension() self.args = ' '.join(self.args) - self.command = 'sox "%s" -s -q -r 44100 -t wav -c2 - | flac -c %s - ' \ - % (self.source, self.args) - + self.command = 'sox "%s" -s -q -r 44100 -t wav -c2 - | flac -c %s - ' % (self.source, self.args) + # Pre-proccessing self.dest = self.pre_process(self.item_id, self.source, diff --git a/telemeta/export/mp3.py b/telemeta/export/mp3.py index ce0f4ed8..b4903c38 100644 --- a/telemeta/export/mp3.py +++ b/telemeta/export/mp3.py @@ -73,16 +73,16 @@ class Mp3Exporter(ExporterCore): info.append(clean_word(line[:-1])) self.info = info return self.info - except IOError: - return 'Exporter error [1]: file does not exist.' + except: + raise IOError('ExporterError: file does not exist.') def decode(self): try: os.system('sox "'+self.source+'" -s -q -r 44100 -t wav "' \ +self.cache_dir+os.sep+self.item_id+'"') return self.cache_dir+os.sep+self.item_id+'.wav' - except IOError: - return 'ExporterError [2]: decoder not compatible.' + except: + raise IOError('ExporterError: decoder is not compatible.') def write_tags(self): """Write all ID3v2.4 tags by mapping dub2id3_dict dictionnary with the @@ -94,8 +94,14 @@ class Mp3Exporter(ExporterCore): frame_text = self.dub2id3_dict[tag] value = self.metadata[tag] frame = mutagen.id3.Frames[frame_text](3,value) - id3.add(frame) - id3.save() + try: + id3.add(frame) + except: + raise IOError('ExporterError: cannot tag "'+tag+'"') + try: + id3.save() + except: + raise IOError('ExporterError: cannot write tags') def get_args(self, options=None): """Get process options and return arguments for the encoder""" diff --git a/telemeta/export/ogg.py b/telemeta/export/ogg.py index 2d0e3326..b0fef85e 100644 --- a/telemeta/export/ogg.py +++ b/telemeta/export/ogg.py @@ -57,8 +57,8 @@ class OggExporter(ExporterCore): info.append(clean_word(line[:-1])) self.info = info return self.info - except IOError: - return 'Exporter error [1]: file does not exist.' + except: + raise IOError('ExporterError: file does not exist.') def set_cache_dir(self,path): self.cache_dir = path @@ -68,8 +68,8 @@ class OggExporter(ExporterCore): os.system('oggdec -o "'+self.cache_dir+os.sep+self.item_id+ '.wav" "'+self.source+'"') return self.cache_dir+os.sep+self.item_id+'.wav' - except IOError: - return 'ExporterError [2]: decoder not compatible.' + except: + raise IOError('ExporterError: decoder is not compatible.') def write_tags(self): media = OggVorbis(self.dest) @@ -101,8 +101,8 @@ class OggExporter(ExporterCore): args.append('-c %s="%s"' % (arg, value)) return args - - def process(self, item_id, source, metadata, options=None): + + def process(self, item_id, source, metadata, options=None): self.item_id = item_id self.source = source self.metadata = metadata @@ -110,7 +110,7 @@ class OggExporter(ExporterCore): self.ext = self.get_file_extension() self.args = ' '.join(self.args) self.command = 'sox "%s" -s -q -r 44100 -t wav -c2 - | oggenc %s -' % (self.source, self.args) - + # Pre-proccessing self.dest = self.pre_process(self.item_id, self.source, @@ -120,7 +120,7 @@ class OggExporter(ExporterCore): self.options) # Processing (streaming + cache writing) - stream = self.core_process(self.command,self.buffer_size,self.dest) + stream = self.core_process(self.command, self.buffer_size, self.dest) for chunk in stream: yield chunk diff --git a/telemeta/export/wav.py b/telemeta/export/wav.py index 86619f9d..f4af96b2 100644 --- a/telemeta/export/wav.py +++ b/telemeta/export/wav.py @@ -30,7 +30,7 @@ class WavExporter(ExporterCore): self.dest = '' self.options = {} self.buffer_size = 0xFFFF - + def get_format(self): return 'WAV' @@ -51,8 +51,8 @@ class WavExporter(ExporterCore): info.append(clean_word(line[:-1])) self.info = info return self.info - except IOError: - return 'Exporter error [1]: file does not exist.' + except: + raise IOError('ExporterError: wavinfo id not installed or file does not exist.') def set_cache_dir(self,path): self.cache_dir = path @@ -65,8 +65,8 @@ class WavExporter(ExporterCore): dest+'.wav"') self.source = dest return dest - except IOError: - return 'ExporterError [2]: decoder not compatible.' + except: + raise IOError('ExporterError: decoder is not compatible.') def write_tags(self): # Create metadata XML file ! @@ -76,8 +76,8 @@ class WavExporter(ExporterCore): """ Create the md5 keys of the dest """ try: os.system('md5sum -b "'+self.dest+'" >"'+self.dest+'.md5"') - except IOError: - return 'Exporter error: Cannot create the md5 key...' + except: + raise IOError('ExporterError: cannot create the md5 key.') def create_par_key(self): """ Create the par2 keys of the dest """ @@ -89,18 +89,18 @@ class WavExporter(ExporterCore): try: os.system('par2 '+args+' "'+self.dest+'"') - except IOError: - return 'Exporter error: Cannot create the par2 key...' + except: + raise IOError('ExporterError: cannot create the par2 key.') def process(self, item_id, source, metadata, options=None): self.item_id = item_id self.source = source self.metadata = metadata self.options = {} - + if not options is None: self.options = options - + # Pre-proccessing self.ext = self.get_file_extension() self.dest = self.pre_process(self.item_id, @@ -146,4 +146,4 @@ class WavExporter(ExporterCore): #if self.compare_md5_key(): #os.system('cp -a "'+self.source+'" "'+ self.dest+'"') #print 'COPIED' - + diff --git a/telemeta/htdocs/css/telemeta.css b/telemeta/htdocs/css/telemeta.css index eda8cd9c..4c70b651 100644 --- a/telemeta/htdocs/css/telemeta.css +++ b/telemeta/htdocs/css/telemeta.css @@ -24,7 +24,7 @@ a:link:hover, a:visited:hover { a img { border: none; } h3 { - font-size: 1.1em; + font-size: 1.2em; font-weight: bold; color: #353535; } @@ -292,14 +292,14 @@ label.disabled { color: #d7d7d7 } /* Navigation (borrowed from Trac) */ .nav h2, .nav hr { display: none } -.nav ul { font-size: 10px; list-style: none; margin: 0; text-align: right } +.nav ul { font-size: 10px; list-style: none; margin: 0; text-align: left } .nav li { border-right: 1px solid #d7d7d7; display: inline; padding: 0 .75em; white-space: nowrap; } -.nav li.last { border-right: none } +.nav li.last { border-right: 1px solid #000000; } /* Main navigation bar (borrowed from Trac) */ #menu { @@ -310,6 +310,7 @@ label.disabled { color: #d7d7d7 } padding: .2em 0; } #menu li { border-right: none; padding: .25em 0 } +#menu li.last { border-right: 1px solid #000 } #menu :link, #menu :visited { background: url(../images/dots.gif) 0 0 no-repeat; border-right: 1px solid #fff; diff --git a/telemeta/templates/telemeta_default/mediaitem_detail.html b/telemeta/templates/telemeta_default/mediaitem_detail.html index 6eaa6460..73ef7120 100644 --- a/telemeta/templates/telemeta_default/mediaitem_detail.html +++ b/telemeta/templates/telemeta_default/mediaitem_detail.html @@ -29,7 +29,7 @@ load_player({{ item.get_duration }}); {% if item %} {% block submenu %} -