Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
config = DEFAULT_CONFIG.copy()
theme_in_config = 'theme' in user_config
config.update(user_config)
if not config['site_name']:
raise ConfigurationError("Config must contain 'site_name' setting.")
# Validate that the docs_dir and site_dir don't contain the
# other as this will lead to copying back and forth on each
# and eventually make a deep nested mess.
abs_site_dir = os.path.abspath(config['site_dir'])
abs_docs_dir = os.path.abspath(config['docs_dir'])
if abs_docs_dir.startswith(abs_site_dir):
raise ConfigurationError(
"The 'docs_dir' can't be within the 'site_dir'.")
elif abs_site_dir.startswith(abs_docs_dir):
raise ConfigurationError(
"The 'site_dir' can't be within the 'docs_dir'.")
# If not specified, then the 'pages' config simply includes all
# markdown files in the docs dir, without generating any header items
# for them.
pages = []
extra_css = []
extra_javascript = []
extra_templates = []
for (dirpath, _, filenames) in os.walk(config['docs_dir']):
for filename in sorted(filenames):
fullpath = os.path.join(dirpath, filename)
relpath = os.path.normpath(os.path.relpath(fullpath, config['docs_dir']))
page = Page(title, path, url_context, config)
if header:
page.ancestors = header.ancestors + [header, ]
header.children.append(page)
yield page
raise StopIteration
elif not isinstance(config_line, dict):
msg = ("Line in 'page' config is of type {0}, dict or string "
"expected. Config: {1}").format(type(config_line), config_line)
raise exceptions.ConfigurationError(msg)
if len(config_line) > 1:
raise exceptions.ConfigurationError(
"Page configs should be in the format 'name: markdown.md'. The "
"config contains an invalid entry: {0}".format(config_line))
elif len(config_line) == 0:
log.warning("Ignoring empty line in the pages config.")
raise StopIteration
next_cat_or_title, subpages_or_path = next(iter(config_line.items()))
if isinstance(subpages_or_path, utils.string_types):
path = subpages_or_path
for sub in _follow(path, url_context, config, header=header, title=next_cat_or_title):
yield sub
raise StopIteration
elif not isinstance(subpages_or_path, list):
msg = ("Line in 'page' config is of type {0}, list or string "
def validate_config(user_config):
config = DEFAULT_CONFIG.copy()
theme_in_config = 'theme' in user_config
config.update(user_config)
if not config['site_name']:
raise ConfigurationError("Config must contain 'site_name' setting.")
# Validate that the docs_dir and site_dir don't contain the
# other as this will lead to copying back and forth on each
# and eventually make a deep nested mess.
abs_site_dir = os.path.abspath(config['site_dir'])
abs_docs_dir = os.path.abspath(config['docs_dir'])
if abs_docs_dir.startswith(abs_site_dir):
raise ConfigurationError(
"The 'docs_dir' can't be within the 'site_dir'.")
elif abs_site_dir.startswith(abs_docs_dir):
raise ConfigurationError(
"The 'site_dir' can't be within the 'docs_dir'.")
# If not specified, then the 'pages' config simply includes all
# markdown files in the docs dir, without generating any header items
# for them.
def load_dict(self, patch):
if not isinstance(patch, dict):
raise exceptions.ConfigurationError(
"The configuration is invalid. The expected type was a key "
"value mapping (a python dict) but we got an object of type: "
"{}".format(type(patch)))
self.user_configs.append(patch)
self.data.update(patch)