[Erp5-report] r43702 gabriel - /erp5/trunk/utils/cloudooo/cloudooo/manager.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Feb 24 21:41:47 CET 2011
Author: gabriel
Date: Thu Feb 24 21:41:47 2011
New Revision: 43702
URL: http://svn.erp5.org?rev=43702&view=rev
Log:
refactor code to not use a dictionary with all handlers. In this way if handler is not declared on cloudooo.conf, the handler is not used.
Modified:
erp5/trunk/utils/cloudooo/cloudooo/manager.py
Modified: erp5/trunk/utils/cloudooo/cloudooo/manager.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/manager.py?rev=43702&r1=43701&r2=43702&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/manager.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/manager.py [utf8] Thu Feb 24 21:41:47 2011
@@ -27,40 +27,42 @@
#
##############################################################################
+import sys
+import mimetypes
from mimetypes import guess_all_extensions, guess_extension
from base64 import encodestring, decodestring
from zope.interface import implements
from interfaces.manager import IManager, IERP5Compatibility
from handler.ooo.granulator import OOGranulator
-from cloudooo.handler.ooo.handler import OOHandler
-from cloudooo.handler.pdf.handler import PDFHandler
-from cloudooo.handler.ffmpeg.handler import FFMPEGHandler
-from cloudooo.handler.imagemagick.handler import ImageMagickHandler
from handler.ooo.mimemapper import mimemapper
from utils.utils import logger
from cloudooo.interfaces.granulate import ITableGranulator
from cloudooo.interfaces.granulate import IImageGranulator
from cloudooo.interfaces.granulate import ITextGranulator
from fnmatch import fnmatch
-import mimetypes
-import pkg_resources
-
-HANDLER_DICT = {"pdf": PDFHandler,
- "ooo": OOHandler,
- "ffmpeg": FFMPEGHandler,
- "imagemagick": ImageMagickHandler}
+from cloudooo.interfaces.handler import IHandler
+from types import ClassType
def getHandlerObject(source_format, destination_format, mimetype_registry):
"""Select handler according to source_format and destination_format"""
source_mimetype = mimetypes.types_map.get('.%s' % source_format, "*")
- destination_mimetype = mimetypes.types_map.get('.%s' % destination_format, '*')
+ destination_mimetype = mimetypes.types_map.get('.%s' % destination_format, "*")
for pattern in mimetype_registry:
registry_list = pattern.split()
if fnmatch(source_mimetype, registry_list[0]) and \
- fnmatch(destination_mimetype, registry_list[1]):
- return HANDLER_DICT[registry_list[2]]
- return HANDLER_DICT["ooo"]
+ (fnmatch(destination_mimetype, registry_list[1]) or destination_format is None):
+ handler_name = "cloudooo.handler.%s.handler" % registry_list[2]
+ __import__(handler_name)
+ handler = sys.modules[handler_name]
+ # XXX - Ugly and slow way to find the Handler Object
+ for name in iter(dir(handler)):
+ if not name.endswith("Handler"):
+ continue
+ obj = getattr(handler, name)
+ if type(obj) == ClassType and IHandler.implementedBy(obj):
+ return obj
+ raise ValueError("No Handler Enabled for this conversion")
class Manager(object):
@@ -106,7 +108,7 @@ class Manager(object):
return encodestring(document_with_metadata)
"""
handler = getHandlerObject(source_format,
- "*",
+ None,
self.mimetype_registry)
document = handler(self._path_tmp_dir,
decodestring(file),
@@ -132,7 +134,7 @@ class Manager(object):
Note that all keys of the dictionary have the first word in uppercase.
"""
handler = getHandlerObject(source_format,
- "*",
+ None,
self.mimetype_registry)
document = handler(self._path_tmp_dir,
decodestring(file),
More information about the Erp5-report
mailing list