def run_validation(self, value):
        if not isinstance(value, (list, tuple, dict)):
            raise ValidationError('Invalid Markdown Extensions configuration')
        extensions = []
        if isinstance(value, dict):
            for ext, cfg in value.items():
                self.validate_ext_cfg(ext, cfg)
                extensions.append(ext)
        else:
            for item in value:
                if isinstance(item, dict):
                    if len(item) > 1:
                        raise ValidationError(
                            'Invalid Markdown Extensions configuration')
                    ext, cfg = item.popitem()
                    self.validate_ext_cfg(ext, cfg)
                    extensions.append(ext)
                elif isinstance(item, str):
                    extensions.append(item)
                else:
                    raise ValidationError(
                        'Invalid Markdown Extensions configuration')

        extensions = utils.reduce_list(self.builtins + extensions)

        # Confirm that Markdown considers extensions to be valid
        try:
            markdown.Markdown(extensions=extensions,
                              extension_configs=self.configdata)
        except Exception as e:
            raise ValidationError(e.args[0])

        return extensions
示例#2
0
    def run_validation(self, value):
        if not isinstance(value, (list, tuple)):
            raise ValidationError('Invalid Markdown Extensions configuration')
        extensions = []
        for item in value:
            if isinstance(item, dict):
                if len(item) > 1:
                    raise ValidationError(
                        'Invalid Markdown Extensions configuration')
                ext, cfg = item.popitem()
                extensions.append(ext)
                if cfg is None:
                    continue
                if not isinstance(cfg, dict):
                    raise ValidationError(
                        'Invalid config options for Markdown '
                        "Extension '{}'.".format(ext))
                self.configdata[ext] = cfg
            elif isinstance(item, str):
                extensions.append(item)
            else:
                raise ValidationError(
                    'Invalid Markdown Extensions configuration')

        extensions = utils.reduce_list(self.builtins + extensions)

        # Confirm that Markdown considers extensions to be valid
        try:
            markdown.Markdown(extensions=extensions,
                              extension_configs=self.configdata)
        except Exception as e:
            raise ValidationError(e.args[0])

        return extensions
示例#3
0
    def run_validation(self, value):
        if not isinstance(value, (list, tuple)):
            raise ValidationError('Invalid Markdown Extensions configuration')
        extensions = []
        for item in value:
            if isinstance(item, dict):
                if len(item) > 1:
                    raise ValidationError('Invalid Markdown Extensions configuration')
                ext, cfg = item.popitem()
                extensions.append(ext)
                if cfg is None:
                    continue
                if not isinstance(cfg, dict):
                    raise ValidationError('Invalid config options for Markdown '
                                          "Extension '{0}'.".format(ext))
                self.configdata[ext] = cfg
            elif isinstance(item, utils.string_types):
                extensions.append(item)
            else:
                raise ValidationError('Invalid Markdown Extensions configuration')

        extensions = utils.reduce_list(self.builtins + extensions)

        # Confirm that Markdown considers extensions to be valid
        try:
            markdown.Markdown(extensions=extensions, extension_configs=self.configdata)
        except Exception as e:
            raise ValidationError(e.args[0])

        return extensions
示例#4
0
def convert_markdown(markdown_source,
                     site_navigation=None,
                     extensions=(),
                     strict=False):
    """
    Convert the Markdown source file to HTML content, and additionally
    return the parsed table of contents, and a dictionary of any metadata
    that was specified in the Markdown file.

    `extensions` is an optional sequence of Python Markdown extensions to add
    to the default set.
    """

    # Generate the HTML from the markdown source
    if isinstance(extensions, dict):
        user_extensions = list(extensions.keys())
        extension_configs = dict([(k, v) for k, v in extensions.items()
                                  if isinstance(v, dict)])
    else:
        user_extensions = list(extensions)
        extension_configs = {}
    builtin_extensions = ['meta', 'toc', 'tables', 'fenced_code']
    mkdocs_extensions = [
        RelativePathExtension(site_navigation, strict),
    ]
    extensions = utils.reduce_list(builtin_extensions + mkdocs_extensions +
                                   user_extensions)

    html_content, table_of_contents, meta = utils.convert_markdown(
        markdown_source, extensions, extension_configs)

    return (html_content, table_of_contents, meta)
示例#5
0
def convert_markdown(markdown_source, site_navigation=None, extensions=(), strict=False):
    """
    Convert the Markdown source file to HTML content, and additionally
    return the parsed table of contents, and a dictionary of any metadata
    that was specified in the Markdown file.

    `extensions` is an optional sequence of Python Markdown extensions to add
    to the default set.
    """

    # Generate the HTML from the markdown source
    if isinstance(extensions, dict):
        user_extensions = list(extensions.keys())
        extension_configs = dict([(k, v) for k, v in extensions.items() if isinstance(v, dict)])
    else:
        user_extensions = list(extensions)
        extension_configs = {}
    builtin_extensions = ['meta', 'toc', 'tables', 'fenced_code']
    mkdocs_extensions = [RelativePathExtension(site_navigation, strict), ]
    extensions = utils.reduce_list(builtin_extensions + mkdocs_extensions + user_extensions)
    md = markdown.Markdown(
        extensions=extensions,
        extension_configs=extension_configs
    )
    html_content = md.convert(markdown_source)

    # On completely blank markdown files, no Meta or tox properties are added
    # to the generated document.
    meta = getattr(md, 'Meta', {})
    toc_html = getattr(md, 'toc', '')

    # Post process the generated table of contents into a data structure
    table_of_contents = toc.TableOfContents(toc_html)

    return (html_content, table_of_contents, meta)
示例#6
0
 def run_validation(self, value):
     if not isinstance(value, (list, tuple)):
         raise ValidationError('Invalid Markdown Extensions configuration')
     extensions = []
     for item in value:
         if isinstance(item, dict):
             if len(item) > 1:
                 raise ValidationError('Invalid Markdown Extensions configuration')
             ext, cfg = item.popitem()
             extensions.append(ext)
             if cfg is None:
                 continue
             if not isinstance(cfg, dict):
                 raise ValidationError('Invalid config options for Markdown '
                                       "Extension '{0}'.".format(ext))
             self.configdata[ext] = cfg
         elif isinstance(item, six.string_types):
             extensions.append(item)
         else:
             raise ValidationError('Invalid Markdown Extensions configuration')
     return utils.reduce_list(self.builtins + extensions)
示例#7
0
 def run_validation(self, value):
     if not isinstance(value, (list, tuple)):
         raise ValidationError('Invalid Markdown Extensions configuration')
     extensions = []
     for item in value:
         if isinstance(item, dict):
             if len(item) > 1:
                 raise ValidationError('Invalid Markdown Extensions configuration')
             ext, cfg = item.popitem()
             extensions.append(ext)
             if cfg is None:
                 continue
             if not isinstance(cfg, dict):
                 raise ValidationError('Invalid config options for Markdown '
                                       "Extension '{0}'.".format(ext))
             self.configdata[ext] = cfg
         elif isinstance(item, utils.string_types):
             extensions.append(item)
         else:
             raise ValidationError('Invalid Markdown Extensions configuration')
     return utils.reduce_list(self.builtins + extensions)
示例#8
0
def convert_markdown(markdown_source, site_navigation=None, extensions=(), strict=False):
    """
    Convert the Markdown source file to HTML content, and additionally
    return the parsed table of contents, and a dictionary of any metadata
    that was specified in the Markdown file.

    `extensions` is an optional sequence of Python Markdown extensions to add
    to the default set.
    """

    # Generate the HTML from the markdown source
    if isinstance(extensions, dict):
        user_extensions = list(extensions.keys())
        extension_configs = dict([(k, v) for k, v in extensions.items() if isinstance(v, dict)])
    else:
        user_extensions = list(extensions)
        extension_configs = {}
    builtin_extensions = ['meta', 'toc', 'tables', 'fenced_code']
    mkdocs_extensions = [RelativePathExtension(site_navigation, strict), ]
    extensions = utils.reduce_list(builtin_extensions + mkdocs_extensions + user_extensions)

    html_content, table_of_contents, meta = utils.convert_markdown(markdown_source, extensions, extension_configs)

    return (html_content, table_of_contents, meta)
示例#9
0
 def test_reduce_list(self):
     self.assertEqual(utils.reduce_list([1, 2, 3, 4, 5, 5, 2, 4, 6, 7, 8]),
                      [1, 2, 3, 4, 5, 6, 7, 8])
示例#10
0
 def test_reduce_list(self):
     self.assertEqual(
         utils.reduce_list([1, 2, 3, 4, 5, 5, 2, 4, 6, 7, 8]),
         [1, 2, 3, 4, 5, 6, 7, 8]
     )