# Author: Olivier Guilyardi <olivier@samalyse.com>
# Guillaume Pellerin <pellerin@parisson.com>
-class IExporter:
+from telemeta.core import *
+
+class IExporter(Interface):
"""Export driver interface"""
# Remark: the method prototypes do not include any self or cls argument
temporary directory should be used if that's not the case.
"""
- def process(item_id, source, metadata):
+ def process(item_id, source, metadata, options):
"""Perform the exporting process and return the absolute path
to the resulting file.
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
-# you should have received as part of this distribution. The terms
+# yo"u should have received as part of this distribution. The terms
# are also available at http://svn.parisson.org/telemeta/TelemetaLicense.
#
# Author: Guillaume Pellerin <pellerin@parisson.com>
import telemeta.export
from telemeta.export import *
-from telemeta.export.api import IExporter
+from telemeta.core import *
from telemeta.export.default import Tags, Options, Collection
import xml.dom.minidom
import xml.dom.ext
-class ExporterCore:
+class ExporterCore(Component):
"""Defines the main parts of the exporting tools :
paths, formats, metadata..."""
- #implements(IExporter) ?
-
def __init__(self):
self.source = ''
self.collection = ''
except IOError:
return 'Exporter error: Cannot normalize, path does not exist.'
-
def check_md5_key(self):
""" Check if the md5 key is OK and return a boolean """
try:
xml_file.close()
- def pre_process(self, item_id, source, metadata, ext, cache_dir):
+ def pre_process(self, item_id, source, metadata, ext, cache_dir, options):
""" Pre processing of the core. Prepare the export path and
return it"""
self.item_id = item_id
file_name = get_file_name(self.source)
file_name_wo_ext, file_ext = split_file_name(file_name)
self.cache_dir = cache_dir
+ self.options = options
self.metadata = metadata
self.collection = self.metadata['Collection']
return self.dest
- def post_process(self, item_id, source, metadata, ext, cache_dir):
+ def post_process(self, item_id, source, metadata, ext, cache_dir, options):
""" Post processing of the Core. Print infos, etc..."""
if 'verbose' in self.metadata and self.verbose != '0':
print self.dest
import string
from telemeta.export.core import *
+from telemeta.export.api import IExporter
from mutagen.flac import FLAC
class FlacExporter(ExporterCore):
"""Defines methods to export to OGG Vorbis"""
+ implements(IExporter)
+
def __init__(self):
self.item_id = ''
self.metadata = []
media[tag] = str(self.metadata[tag])
media.save()
- def process(self, item_id, source, metadata):
+ def process(self, item_id, source, metadata, options):
self.item_id = item_id
self.source = source
self.metadata = metadata
+ self.options = options
if 'flac_quality' in self.metadata and \
self.metadata['flac_quality'] != '':
self.source,
self.metadata,
self.ext,
- self.cache_dir)
+ self.cache_dir,
+ self.options)
# Encoding
os.system('flac '+args+' -o "'+self.dest+'" "'+ \
self.source,
self.metadata,
self.ext,
- self.cache_dir)
+ self.cache_dir,
+ self.options)
# Output
return self.dest
import string
from telemeta.export.core import *
+from telemeta.export.api import IExporter
from mutagen.oggvorbis import OggVorbis
class OggExporter(ExporterCore):
"""Defines methods to export to OGG Vorbis"""
+ implements(IExporter)
+
def __init__(self):
self.item_id = ''
self.metadata = []
media[tag] = str(self.metadata[tag])
media.save()
- def process(self, item_id, source, metadata):
+ def process(self, item_id, source, metadata, options):
self.item_id = item_id
self.source = source
self.metadata = metadata
- #self.quality = self.metadata['ogg_quality']
- #self.bitrate = self.metadata['ogg_bitrate']
+ self.options = options
if 'ogg_bitrate' in self.metadata:
args = '-b '+self.metadata['ogg_bitrate']
self.source,
self.metadata,
self.ext,
- self.cache_dir)
+ self.cache_dir,
+ self.options)
# Encoding
os.system('oggenc '+args+' -o "'+self.dest+
self.source,
self.metadata,
self.ext,
- self.cache_dir)
+ self.cache_dir,
+ self.options)
# Output
return self.dest
import string
from telemeta.export.core import *
+from telemeta.export.api import IExporter
class WavExporter(ExporterCore):
"""Defines methods to export to OGG Vorbis"""
+ implements(IExporter)
+
def __init__(self):
self.item_id = ''
self.metadata = []
except IOError:
return 'Exporter error: Cannot create the par2 key...'
- def process(self, item_id, source, metadata):
+ def process(self, item_id, source, metadata, options):
self.item_id = item_id
self.source = source
self.metadata = metadata
+ self.options = options
try:
# Pre-proccessing (core)
self.source,
self.metadata,
self.ext,
- self.cache_dir)
+ self.cache_dir,
+ self.options)
#if self.compare_md5_key():
os.system('cp -a "'+self.source+'" "'+ self.dest+'"')
self.source,
self.metadata,
self.ext,
- self.cache_dir)
+ self.cache_dir,
+ self.options)
# Special post process
# Create the md5 key
import os
from telemeta.export import *
+from telemeta.core import *
+from telemeta.core import ComponentManager
cache_dir = 'cache/'
source = 'samples/wav/Cellar - Show Me - 02.wav'
'Artist': 'Cellar',
'Encoder': 'Telemeta',
}
+options = {'verbose': '1'}
-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)
+class ExportTest(Component):
+ exporters = ExtensionPoint(IExporter)
-media3 = WavExporter()
-media3.set_cache_dir(cache_dir)
-media3.process(item_id,source,metadata)
+ def run(self):
+ for exporter in self.exporters:
+ format = exporter.get_format()
+ print "+------------------------------------------"
+ print '| Testing exporter format: ' + format
+ print "+------------------------------------------"
+ exporter.set_cache_dir(cache_dir)
+ exporter.process(item_id,source,metadata,options)
+compmgr = ComponentManager()
+test = ExportTest(compmgr)
+test.run()