From 384e3521c787c2d721ba46a31c565ce71ecd78d9 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Fri, 16 Apr 2010 18:44:55 +0200 Subject: [PATCH] factorization --- weboob/tools/parsers/__init__.py | 47 ++++++++++++++++---------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/weboob/tools/parsers/__init__.py b/weboob/tools/parsers/__init__.py index aed4269d..e8943c59 100644 --- a/weboob/tools/parsers/__init__.py +++ b/weboob/tools/parsers/__init__.py @@ -26,6 +26,21 @@ __all__ = ['get_parser', 'NoParserFound'] class NoParserFound(Exception): pass +def load_lxml(*args, **kwargs): + from .lxmlparser import LxmlHtmlParser + return LxmlHtmlParser() + +def load_html5lib(*args, **kwargs): + from .html5libparser import Html5libParser + return Html5libParser(*args, **kwargs) + +def load_elementtidy(*args, **kwargs): + from .elementtidyparser import ElementTidyParser + return ElementTidyParser() + +def load_buildtin(*args, **kwargs): + from .htmlparser import HTMLParser + return HTMLParser() def get_parser(preference_order=['lxml', 'html5lib', 'elementtidy', 'builtin'], *args, **kwargs): """ @@ -36,28 +51,12 @@ def get_parser(preference_order=['lxml', 'html5lib', 'elementtidy', 'builtin'], if not isinstance(preference_order, (tuple, list)): preference_order = [preference_order] for kind in preference_order: - if kind == 'lxml': - try: - from .lxmlparser import LxmlHtmlParser - return LxmlHtmlParser() - except ImportError: - logging.debug('%s is not installed.' % kind) - elif kind == 'html5lib': - try: - from .html5libparser import Html5libParser - return Html5libParser(*args, **kwargs) - except ImportError: - logging.debug('%s is not installed.' % kind) - elif kind == 'elementtidy': - try: - from .elementtidyparser import ElementTidyParser - return ElementTidyParser() - except ImportError: - logging.debug('%s is not installed.' % kind) - elif kind == 'builtin': - try: - from .htmlparser import HTMLParser - return HTMLParser() - except ImportError: - logging.debug('%s is not installed.' % kind) + if not 'load_%s' % kind in globals(): + continue + + try: + return globals()['load_%s' % kind]() + except ImportError: + logging.debug('%s is not installed.' % kind) + raise NoParserFound()