Esempio n. 1
0
    def load_config(self, options, config_file_path=None):
        """ Load config from a dict of options. Returns a tuple of (errors, warnings)."""

        self.config = Config(schema=self.config_scheme, config_file_path=config_file_path)
        self.config.load_dict(options)

        return self.config.validate()
Esempio n. 2
0
 def test_paths_localized_to_config(self):
     base_path = os.path.abspath('.')
     cfg = Config(
         [('watch', config_options.ListOfPaths())],
         config_file_path=os.path.join(base_path, 'mkdocs.yml'),
     )
     test_config = {'watch': ['foo']}
     cfg.load_dict(test_config)
     fails, warns = cfg.validate()
     self.assertEqual(len(fails), 0)
     self.assertEqual(len(warns), 0)
     self.assertIsInstance(cfg['watch'], list)
     self.assertEqual(cfg['watch'], [os.path.join(base_path, 'foo')])
    def test_dir_is_config_dir_fails(self):
        cfg = Config(
            [('dir', config_options.Dir())],
            config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'),
        )

        test_config = {'dir': '.'}

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        self.assertEqual(len(fails), 1)
        self.assertEqual(len(warns), 0)
Esempio n. 4
0
    def test_dir_bad_encoding_fails(self):
        cfg = Config(
            [('dir', config_options.Dir())],
            config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'),
        )

        test_config = {'dir': 'юникод'.encode(encoding='ISO 8859-5')}

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        self.assertEqual(len(fails), 1)
        self.assertEqual(len(warns), 0)
    def test_dir_unicode(self):
        cfg = Config(
            [('dir', config_options.Dir())],
            config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'),
        )

        test_config = {'dir': 'юникод'}

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        self.assertEqual(len(fails), 0)
        self.assertEqual(len(warns), 0)
        self.assertIsInstance(cfg['dir'], utils.text_type)
Esempio n. 6
0
    def test_doc_dir_is_config_dir(self):
        cfg = Config(
            [('docs_dir', config_options.Dir())],
            config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'),
        )

        test_config = {
            'docs_dir': '.'
        }

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        self.assertEqual(len(fails), 1)
        self.assertEqual(len(warns), 0)
Esempio n. 7
0
    def load_config(self, options):
        """ Load config from a dict of options. Returns a tuple of (errors, warnings)."""

        self.config = Config(schema=self.config_scheme)
        self.config.load_dict(options)

        return self.config.validate()
Esempio n. 8
0
class BasePlugin(object):
    """
    Plugin base class.

    All plugins should subclass this class.
    """

    config_scheme = ()
    config = {}

    def load_config(self, options):
        """ Load config from a dict of options. Returns a tuple of (errors, warnings)."""

        self.config = Config(schema=self.config_scheme)
        self.config.load_dict(options)

        return self.config.validate()
Esempio n. 9
0
class BasePlugin:
    """
    Plugin base class.

    All plugins should subclass this class.
    """

    config_scheme = ()
    config = {}

    def load_config(self, options, config_file_path=None):
        """ Load config from a dict of options. Returns a tuple of (errors, warnings)."""

        self.config = Config(schema=self.config_scheme, config_file_path=config_file_path)
        self.config.load_dict(options)

        return self.config.validate()
Esempio n. 10
0
    def test_dir_filesystemencoding(self):
        cfg = Config(
            [('dir', config_options.Dir())],
            config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'),
        )

        test_config = {
            'dir': 'Übersicht'.encode(encoding=sys.getfilesystemencoding())
        }

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        # str does not include byte strings so validation fails
        self.assertEqual(len(fails), 1)
        self.assertEqual(len(warns), 0)
Esempio n. 11
0
    def test_config_dir_prepended(self):
        base_path = os.path.abspath('.')
        cfg = Config(
            [('dir', config_options.Dir())],
            config_file_path=os.path.join(base_path, 'mkdocs.yml'),
        )

        test_config = {'dir': 'foo'}

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        self.assertEqual(len(fails), 0)
        self.assertEqual(len(warns), 0)
        self.assertIsInstance(cfg['dir'], utils.text_type)
        self.assertEqual(cfg['dir'], os.path.join(base_path, 'foo'))
Esempio n. 12
0
    def test_dir_bad_encoding_fails(self):
        cfg = Config(
            [('dir', config_options.Dir())],
            config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'),
        )

        test_config = {'dir': 'юникод'.encode(encoding='ISO 8859-5')}

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        if sys.platform.startswith('win') and not utils.PY3:
            # PY2 on Windows seems to be able to decode anything we give it.
            # But that just means less possable errors for those users so we allow it.
            self.assertEqual(len(fails), 0)
        else:
            self.assertEqual(len(fails), 1)
        self.assertEqual(len(warns), 0)
Esempio n. 13
0
    def validate_config(self, config):
        """ Given a config with values for site_dir and doc_dir, run site_dir post_validation. """
        site_dir = config_options.SiteDir()
        docs_dir = config_options.Dir()

        fname = os.path.join(os.path.abspath('..'), 'mkdocs.yml')

        config['docs_dir'] = docs_dir.validate(config['docs_dir'])
        config['site_dir'] = site_dir.validate(config['site_dir'])

        schema = [
            ('site_dir', site_dir),
            ('docs_dir', docs_dir),
        ]
        cfg = Config(schema, fname)
        cfg.load_dict(config)
        failed, warned = cfg.validate()

        if failed:
            raise config_options.ValidationError(failed)

        return True
Esempio n. 14
0
    def validate_config(self, config):
        """ Given a config with values for site_dir and doc_dir, run site_dir post_validation. """
        site_dir = config_options.SiteDir()
        docs_dir = config_options.Dir()

        fname = os.path.join(os.path.abspath('..'), 'mkdocs.yml')

        config['docs_dir'] = docs_dir.validate(config['docs_dir'])
        config['site_dir'] = site_dir.validate(config['site_dir'])

        schema = [
            ('site_dir', site_dir),
            ('docs_dir', docs_dir),
        ]
        cfg = Config(schema, fname)
        cfg.load_dict(config)
        failed, warned = cfg.validate()

        if failed:
            raise config_options.ValidationError(failed)

        return True
Esempio n. 15
0
def build_rss_feed(config: Config, working_dir: str, type_: str) -> Feed:
    """Create the RSS feed data from the content.

    Args:
        config: MkDocs config object.
        type_: type of feed, one of: daily, weekly, monthly or yearly.

    Returns:
        Feed object with the data
    """
    site_url = re.sub("/$", "", config["site_url"])

    try:
        logo_url: Optional[str] = f"{site_url}/{config['theme']['logo']}"
    except KeyError:
        logo_url = None

    author = config.get("site_author", None)

    entries = _build_rss_entries(config, working_dir, type_, author)

    try:
        published = max(entries).published
    except ValueError:
        published = datetime.datetime.now()

    return Feed(
        ttl=TTL[type_],
        generator=f"mkdocs-newsletter - v{__version__}",
        title=config.get("site_name", None),
        link=site_url,
        rss_link=f"{site_url}/{type_}.xml",
        logo=logo_url,
        description=config.get("site_description", None),
        author=author,
        published=published,
        entries=entries,
    )
Esempio n. 16
0
    def test_dir_filesystemencoding(self):
        cfg = Config(
            [('dir', config_options.Dir())],
            config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'),
        )

        test_config = {
            'dir': 'Übersicht'.encode(encoding=sys.getfilesystemencoding())
        }

        cfg.load_dict(test_config)

        fails, warns = cfg.validate()

        if utils.PY3:
            # In PY3 string_types does not include byte strings so validation fails
            self.assertEqual(len(fails), 1)
            self.assertEqual(len(warns), 0)
        else:
            # In PY2 string_types includes byte strings so validation passes
            # This test confirms that the byte string is properly decoded
            self.assertEqual(len(fails), 0)
            self.assertEqual(len(warns), 0)
            self.assertIsInstance(cfg['dir'], utils.text_type)
Esempio n. 17
0
 def run_validation(self, value):
     Config.validate(self)
     return self
Esempio n. 18
0
 def __init__(self, *config_options):
     BaseConfigOption.__init__(self)
     Config.__init__(self, config_options)
     self.default = {}
Esempio n. 19
0
 def __init__(self, *config_options):
     BaseConfigOption.__init__(self)
     Config.__init__(self, config_options)
     self.default = {}
Esempio n. 20
0
 def run_validation(self, value):
     Config.validate(self)
     return self