From d711d5202c6e94d260021d103bd3264457a78701 Mon Sep 17 00:00:00 2001 From: yomguy <> Date: Thu, 19 Apr 2007 15:14:39 +0000 Subject: [PATCH] Add pre and post process in CoreExporter. Main calls to OggExporter, etc... --- telemeta/export/core.py | 118 +++++++++++++++------------------------- telemeta/export/flac.py | 24 +++++++- telemeta/export/ogg.py | 37 +++++++++---- telemeta/export/wav.py | 48 +++++++++++++--- tests/export_test.py | 56 ++++++++----------- 5 files changed, 155 insertions(+), 128 deletions(-) diff --git a/telemeta/export/core.py b/telemeta/export/core.py index 16caff7d..cf7c0d5d 100644 --- a/telemeta/export/core.py +++ b/telemeta/export/core.py @@ -49,13 +49,6 @@ class ExporterCore: except IOError: return 'Exporter error: Cannot normalize, path does not exist.' - - def create_md5_key(self): - """ 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...' def check_md5_key(self): """ Check if the md5 key is OK and return a boolean """ @@ -66,16 +59,6 @@ class ExporterCore: except IOError: return 'Exporter error: Cannot check the md5 key...' - def create_par_key(self): - """ Create the par2 keys of the dest """ - args = 'c -n1 ' - if self.verbose == '0': - args = args + '-q -q ' - try: - os.system('par2 '+args+' "'+self.dest+'"') - except IOError: - return 'Exporter error: Cannot create the par2 key...' - def get_file_info(self): """ Return the list of informations of the dest """ return self.export.get_file_info() @@ -116,73 +99,58 @@ class ExporterCore: xml.dom.ext.PrettyPrint(doc, xml_file) xml_file.close() - def process(self, item_id, source, metadata): - """ Export the source """ + + def pre_process(self, item_id, source, metadata, ext, cache_dir): + """ Pre processing of the core. Prepare the export path and + return it""" self.item_id = item_id self.source = source file_name = get_file_name(self.source) file_name_wo_ext, file_ext = split_file_name(file_name) + self.cache_dir = cache_dir self.metadata = metadata self.collection = self.metadata['Collection'] self.artist = self.metadata['Artist'] self.title = self.metadata['Title'] - self.verbose = self.metadata['verbose'] - - # The Loop - for format in self.metadata['export_formats']: - - # Implement the exporter object with the given format - if format == 'OGG': - self.export = telemeta.export.ogg.OggExporter() - if format == 'FLAC': - self.export = telemeta.export.FlacExporter() - if format == 'WAV': - self.export = telemeta.export.WavExporter() - - # Decode the source if needed - if os.path.exists(self.source) and not iswav16(self.source): - # TO FIX ! - self.source = self.export.decode() - - # Normalize if demanded - if 'normalize' in self.metadata and self.metadata['normalize']: - self.normalize() - - # Define the cache directory - self.export.set_cache_dir(self.cache_dir) - self.ext = self.export.get_file_extension() - - # Define and create the destination path - # At the moment, the target directory is built with this scheme in - # the cache directory : ./%Format/%Collection/%Artist/ - self.dest = self.cache_dir - export_dir = os.path.join(self.ext,self.collection,self.artist) - - if not os.path.exists(os.path.join(self.dest,export_dir)): - for _dir in export_dir.split(os.sep): - self.dest = os.path.join(self.dest,_dir) - if not os.path.exists(self.dest): - os.mkdir(self.dest) - else: - self.dest = os.path.join(self.dest,export_dir) - - # Set the target file - target_file = file_name_wo_ext+'.'+self.ext - self.dest = os.path.join(self.dest,target_file) - self.export.dest = self.dest - - # Process - try: - self.export.process(self.item_id, - self.source, - self.metadata) - except IOError: - return 'Encoding failed !' - - if self.verbose != '0': - print self.dest - print self.export.get_file_info() + + # Decode the source if needed + if os.path.exists(self.source) and not iswav16(self.source): + # TO FIX ! + self.source = self.export.decode() + + # Normalize if demanded + if 'normalize' in self.metadata and self.metadata['normalize']: + self.normalize() + + # Define the cache directory + self.ext = self.get_file_extension() + + # Define and create the destination path + # At the moment, the target directory is built with this scheme in + # the cache directory : ./%Format/%Collection/%Artist/ + self.dest = self.cache_dir + export_dir = os.path.join(self.ext,self.collection,self.artist) + + if not os.path.exists(os.path.join(self.dest,export_dir)): + for _dir in export_dir.split(os.sep): + self.dest = os.path.join(self.dest,_dir) + if not os.path.exists(self.dest): + os.mkdir(self.dest) + else: + self.dest = os.path.join(self.dest,export_dir) + + # Set the target file + target_file = file_name_wo_ext+'.'+self.ext + self.dest = os.path.join(self.dest,target_file) + return self.dest + + + def post_process(self, item_id, source, metadata, ext, cache_dir): + """ Post processing of the Core. Print infos, etc...""" + if 'verbose' in self.metadata and self.verbose != '0': + print self.dest + print self.get_file_info() # External functions diff --git a/telemeta/export/flac.py b/telemeta/export/flac.py index e2c57877..8f8d04c2 100644 --- a/telemeta/export/flac.py +++ b/telemeta/export/flac.py @@ -84,21 +84,39 @@ class FlacExporter(ExporterCore): self.source = source self.metadata = metadata - if self.metadata['flac_quality'] != '': + if 'flac_quality' in self.metadata and \ + self.metadata['flac_quality'] != '': args = '-f -V -'+self.metadata['flac_quality'] else: args = '-f -s -V -'+self.quality_default - if self.metadata['verbose'] == '0': + if not 'verbose' in self.metadata or self.metadata['verbose'] == '0': args = args+' -s' try: + # Pre-proccessing (core) + self.ext = self.get_file_extension() + self.dest = self.pre_process(self.item_id, + self.source, + self.metadata, + self.ext, + self.cache_dir) + # Encoding os.system('flac '+args+' -o "'+self.dest+'" "'+ \ self.source+'" > /dev/null') - # Write tags + + # Pre-proccessing (self) self.write_tags() + self.post_process(self.item_id, + self.source, + self.metadata, + self.ext, + self.cache_dir) + + # Output return self.dest + except IOError: return 'ExporterError [3]: source file does not exist.' diff --git a/telemeta/export/ogg.py b/telemeta/export/ogg.py index 424a1a8f..493175d6 100644 --- a/telemeta/export/ogg.py +++ b/telemeta/export/ogg.py @@ -72,29 +72,46 @@ class OggExporter(ExporterCore): self.item_id = item_id self.source = source self.metadata = metadata - self.quality = self.metadata['ogg_quality'] - self.bitrate = self.metadata['ogg_bitrate'] + #self.quality = self.metadata['ogg_quality'] + #self.bitrate = self.metadata['ogg_bitrate'] - if self.bitrate != '': - args = '-b '+self.bitrate - elif self.quality != '': - args = '-q '+self.quality + if 'ogg_bitrate' in self.metadata: + args = '-b '+self.metadata['ogg_bitrate'] + elif 'ogg_quality' in self.metadata: + args = '-q '+self.metadata['ogg_quality'] else: args = '-b '+self.bitrate_default - if self.metadata['verbose'] == '0': - args = args+' -Q' - + if not 'verbose' in self.metadata or self.metadata['verbose'] == '0': + args = args + ' -Q' + if os.path.exists(self.source) and not iswav16(self.source): self.source = self.decode() try: + # Pre-proccessing (core) + self.ext = self.get_file_extension() + self.dest = self.pre_process(self.item_id, + self.source, + self.metadata, + self.ext, + self.cache_dir) + # Encoding os.system('oggenc '+args+' -o "'+self.dest+ '" "'+self.source+'"') - # Write tags + + # Pre-proccessing (self) self.write_tags() + self.post_process(self.item_id, + self.source, + self.metadata, + self.ext, + self.cache_dir) + + # Output return self.dest + except IOError: return 'ExporterError [3]: source file does not exist.' diff --git a/telemeta/export/wav.py b/telemeta/export/wav.py index d30871b4..6dee6999 100644 --- a/telemeta/export/wav.py +++ b/telemeta/export/wav.py @@ -73,28 +73,60 @@ class WavExporter(ExporterCore): def write_tags(self): # Create metadata XML file ! self.write_metadata_xml(self.dest+'.xml') - + + def create_md5_key(self): + """ 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...' + + def create_par_key(self): + """ Create the par2 keys of the dest """ + args = 'c -n1 ' + if not 'verbose' in self.metadata or self.metadata['verbose'] == '0': + args = args + '-q -q ' + try: + os.system('par2 '+args+' "'+self.dest+'"') + except IOError: + return 'Exporter error: Cannot create the par2 key...' + def process(self, item_id, source, metadata): self.item_id = item_id self.source = source self.metadata = metadata - self.verbose = self.metadata['verbose'] try: + # Pre-proccessing (core) + self.ext = self.get_file_extension() + self.dest = self.pre_process(self.item_id, + self.source, + self.metadata, + self.ext, + self.cache_dir) + #if self.compare_md5_key(): os.system('cp -a "'+self.source+'" "'+ self.dest+'"') #print 'COPIED' - # Write tags + + # Pre-proccessing (self) self.write_tags() + self.post_process(self.item_id, + self.source, + self.metadata, + self.ext, + self.cache_dir) + # Special post process # Create the md5 key - if 'md5' in self.metadata and self.metadata['md5']: - self.create_md5_key() + #if 'md5' in self.metadata and self.metadata['md5']: + self.create_md5_key() # Create the par2 key - if 'par2' in self.metadata and self.metadata['par2']: - self.create_par_key() - + #if 'par2' in self.metadata and self.metadata['par2']: + self.create_par_key() + + # Output return self.dest except IOError: diff --git a/tests/export_test.py b/tests/export_test.py index cf643cbf..9f665dde 100644 --- a/tests/export_test.py +++ b/tests/export_test.py @@ -1,4 +1,3 @@ -#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (C) 2007 Parisson SARL @@ -11,37 +10,30 @@ # # Author: Guillaume Pellerin + import os + from telemeta.export import * -class ExportTest: - """Test the 'export' features""" - def __init__(self): - self.cache_dir = 'cache/' - self.source = 'samples/wav/Cellar - Show Me - 02.wav' - self.item_id = '1' - - self.metadata = {'Collection': 'Test_Collection', - 'Title': 'Show Me', - 'Artist': 'Cellar', - 'Encoder': 'Telemeta', - 'Item_id': self.item_id, - 'export_formats': ['WAV','OGG','FLAC'], - 'normalize': True, - 'md5': True, - 'par2': True, - 'ogg_bitrate': '192', - 'ogg_quality': '4', - 'flac_quality': '5', - 'verbose': '1', - } - - self.dest = core.ExporterCore() - self.dest.set_cache_dir = self.cache_dir - - def process(self): - self.dest.process(self.item_id, self.source, self.metadata) - - -media = ExportTest() -media.process() \ No newline at end of file +cache_dir = 'cache/' +source = 'samples/wav/Cellar - Show Me - 02.wav' +item_id = '1' +metadata = {'Collection': 'Test', + 'Title': 'Show Me', + 'Artist': 'Cellar', + 'Encoder': 'Telemeta', + } + +media1 = OggExporter() +media1.set_cache_dir(cache_dir) +media1.process(item_id,source,metadata) + +media2 = FlacExporter() +media2.set_cache_dir(cache_dir) +media2.process(item_id,source,metadata) + +media3 = WavExporter() +media3.set_cache_dir(cache_dir) +media3.process(item_id,source,metadata) + + -- 2.39.5