# Path: handroll/exceptions.py
# class AbortError(Exception):
#     """Any fatal errors that would prevent handroll from proceeding should
#     signal with the ``AbortError`` exception."""
# 
# Path: handroll/i18n.py



from configparser import ConfigParser
from handroll.exceptions import AbortError
from handroll.i18n import _
import os
        if args.timing is not None:
            self.timing = args.timing

    def load_from_file(self, config_file):
        """Load any configuration attributes from the provided config file."""
        with open(config_file, 'r') as f:
            self.parser.readfp(f)
            if self.parser.has_option('site', 'domain'):
                self._domain = self.parser.get('site', 'domain')

            if self.parser.has_option('site', 'outdir'):
                outdir = os.path.expanduser(self.parser.get('site', 'outdir'))
                if not os.path.isabs(outdir):
                    path = os.path.dirname(config_file)
                    outdir = os.path.abspath(os.sep.join([path, outdir]))
                self.outdir = outdir

            if self.parser.has_section('site'):
                self._find_extensions(self.parser)

    def _find_extensions(self, parser):
        """Check if the site options have extensions to enable."""
        for option in parser.options('site'):
            if option.startswith('with_'):
                try:
                    extension = option.split('with_', 1)[1] or option
                    enabled = parser.getboolean('site', option)
                    if enabled:
                        self.active_extensions.add(extension)
                except ValueError:

# Path: handroll/exceptions.py
# class AbortError(Exception):
#     """Any fatal errors that would prevent handroll from proceeding should
#     signal with the ``AbortError`` exception."""
# 
# Path: handroll/i18n.py



# Path: handroll/configuration.py
from configparser import ConfigParser
from handroll.exceptions import AbortError
from handroll.i18n import _
import os

        if args.timing is not None:
            self.timing = args.timing

    def load_from_file(self, config_file):
        """Load any configuration attributes from the provided config file."""
        with open(config_file, 'r') as f:
            self.parser.readfp(f)
            if self.parser.has_option('site', 'domain'):
                self._domain = self.parser.get('site', 'domain')

            if self.parser.has_option('site', 'outdir'):
                outdir = os.path.expanduser(self.parser.get('site', 'outdir'))
                if not os.path.isabs(outdir):
                    path = os.path.dirname(config_file)
                    outdir = os.path.abspath(os.sep.join([path, outdir]))
                self.outdir = outdir

            if self.parser.has_section('site'):
                self._find_extensions(self.parser)

    def _find_extensions(self, parser):
        """Check if the site options have extensions to enable."""
        for option in parser.options('site'):
            if option.startswith('with_'):
                try:
                    extension = option.split('with_', 1)[1] or option
                    enabled = parser.getboolean('site', option)
                    if enabled:
                        self.active_extensions.add(extension)
                except ValueError:

                    raise AbortError(_(