]> git.parisson.com Git - telemeta.git/commitdiff
Add pre and post process in CoreExporter. Main calls to OggExporter, etc...
authoryomguy <>
Thu, 19 Apr 2007 15:14:39 +0000 (15:14 +0000)
committeryomguy <>
Thu, 19 Apr 2007 15:14:39 +0000 (15:14 +0000)
telemeta/export/core.py
telemeta/export/flac.py
telemeta/export/ogg.py
telemeta/export/wav.py
tests/export_test.py

index 16caff7d6bdfcffa9732398e42ad077cb696d1f9..cf7c0d5df6653639ed011a89d1debbe9cf76b938 100644 (file)
@@ -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
index e2c57877ff171d5ec65f18e9ac19369c2bb4e3f4..8f8d04c2455205bf08c9b8afcdc5084456014c0b 100644 (file)
@@ -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.'
 
index 424a1a8f672b5a55e7d465692c3ba56db1edc892..493175d64228b3d0221f8e7b7af624a9144fbee3 100644 (file)
@@ -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.'
 
index d30871b45d120dcb6a9a28aac376d8f6f804695b..6dee6999362970bfa52d5bce8889c091ad44cf14 100644 (file)
@@ -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:
index cf643cbf60863f73ca3269f9ca2369a4dcb6fa1b..9f665dde5c29cdab2efa161a19909245ebcb8a4b 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/python
 # -*- coding: utf-8 -*-
 #
 # Copyright (C) 2007 Parisson SARL
 #
 # Author: Guillaume Pellerin <pellerin@parisson.com>
 
+
 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)
+
+