Source code for publiforge.lib.processor

"""A *processor* use a module to realize its processing."""

from os import environ
from os.path import join, dirname
from sys import executable
from lxml import etree

from ..i18n import _

# =============================================================================
[docs]def load_relaxngs(build, config): """Load Relax NG files defined in configuration. :param build: (:class:``) Main Build object. :param config: (:class:`ConfigParser.ConfigParser` instance) Configuration with a ``[RelaxNG]`` section. :return: (dictionary) A dictionary of :class:`lxml.etree.RelaxNG` objets. """ relaxngs = {} if not config.has_section('RelaxNG'): return relaxngs for root, filename in config.items('RelaxNG'): if root not in ('here', 'fid', 'ocffile'): root = root.replace('|', ':') try: relaxngs[root] = etree.RelaxNG(etree.parse(filename)) except IOError as err: build.stopped(err) return relaxngs except (etree.XMLSyntaxError, etree.RelaxNGParseError) as error: build.stopped( _('${f}: ${e}', {'f': filename, 'e': error})) return relaxngs return relaxngs
# =============================================================================
[docs]def bin_directory(): """Return absolute path to PubliForge binary directory.""" return join(environ['VIRTUAL_ENV'], 'bin') \ if 'VIRTUAL_ENV' in environ else dirname(executable)