Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
contents = split[1]
try:
blocks = yaml.load_all(split[0], Loader=yaml.FullLoader)
for block in blocks:
if block:
meta.update(block)
except ConstructorError as exception:
warn('invalid-page-metadata',
'%s: Invalid metadata: \n%s' % (source_file,
str(exception)))
output_path = os.path.dirname(os.path.relpath(
source_file, next(iter(self.project.include_paths))))
ast = cmark.hotdoc_to_ast(contents, self, source_file)
return Page(source_file, False, self.project.sanitized_name, extension_name,
source_file=source_file, ast=ast, meta=meta, raw_contents=raw_contents,
output_path=output_path)
contents = split[1]
try:
blocks = yaml.load_all(split[0])
for block in blocks:
if block:
meta.update(block)
except ConstructorError as exception:
warn('invalid-page-metadata',
'%s: Invalid metadata: \n%s' % (source_file,
str(exception)))
output_path = os.path.dirname(os.path.relpath(
source_file, next(iter(self.project.include_paths))))
ast = cmark.hotdoc_to_ast(contents, self)
return Page(source_file, ast, output_path, self.project.sanitized_name,
meta=meta, raw_contents=raw_contents)
'no-such-subpage',
'No markdown file found for %s' % fname,
filename=sitemap.source_file,
lineno=i,
column=0)
source_map[source_file] = fname
else:
resolved, ext_name = resolved
if ext_name:
self.__placeholders[fname] = ext_name
if resolved is not True:
source_files.append(resolved)
source_map[resolved] = fname
else:
if fname not in self.__all_pages:
page = Page(fname, None, '',
self.project.sanitized_name)
page.generated = True
self.__all_pages[fname] = page
placeholders.append(fname)
stale, unlisted = change_tracker.get_stale_files(
source_files, 'user-pages-%s' % self.project.sanitized_name)
old_user_symbols = set()
new_user_symbols = set()
for source_file in stale:
pagename = source_map[source_file]
prev_page = self.__all_pages.get(pagename)
if prev_page:
self.output_attrs = None
self.subpages = OrderedSet()
self.symbols = []
self.typed_symbols = OrderedDict()
self.by_parent_symbols = OrderedDict()
self.is_stale = True
self.formatted_contents = None
self.detailed_description = None
self.build_path = None
self.project_name = project_name
self.cached_paths = OrderedSet()
meta = meta or {}
try:
self.meta = Schema(Page.meta_schema).validate(meta)
except SchemaError as _:
warn('invalid-page-metadata',
'%s: Invalid metadata: \n%s' % (self.source_file,
str(_)))
self.meta = meta
if not self.meta.get('extra'):
self.meta['extra'] = defaultdict()
self.symbol_names = OrderedSet(meta.get('symbols') or [])
self.short_description = meta.get('short-description')
self.render_subpages = meta.get('render-subpages', True)
self.title = None
self.__discover_title(meta)
self.link = Link(pagename, self.title or name, ref)
self.formatted_contents = None
self.detailed_description = None
self.build_path = None
self.cached_paths = OrderedSet()
if comment:
meta = comment.meta
elif meta:
meta = meta
else:
meta = {}
self.meta = {}
for key, value in meta.items():
try:
self.meta.update(Schema(Page.meta_schema).validate({
key.replace('_', '-').lower(): value}))
except SchemaError as err:
warn('invalid-page-metadata',
'%s: Invalid metadata: \n%s, discarding metadata' %
(self.name, str(err)))
if not self.meta.get('extra'):
self.meta['extra'] = defaultdict()
self.title = self.meta.get(
'title', cmark.title_from_ast(self.ast) if ast else '')
self.thumbnail = self.meta.get('thumbnail')
self.short_description = self.meta.get('short-description', None)
self.render_subpages = self.meta.get('render-subpages', True)
self.link = Link(pagename, self.title or name, ref)
# Can be None if creating a page to hold the symbol conflicts with
# a page explicitly declared in a toplevel comment or a parent has been
# marked as private
if page is None:
continue
page.symbol_names.add(symbol_name)
dispatched_symbol_names.add(symbol_name)
# Finally we make our index page
if self.index:
index_page = self.project.tree.parse_page(
self.index, self.extension_name)
else:
index_page = Page('%s-index' % self.argument_prefix, True, self.project.sanitized_name,
self.extension_name)
if not index_page.title:
index_page.title = self._get_smart_index_title()
smart_pages['%s-index' % self.argument_prefix] = index_page
return smart_pages
# These are used as a duplicate detection mechanism, map
# relocated or ignored symbols to the source files where they were initially
# listed
relocated_symbols = {}
private_symbols = {}
# First we make one page per toplevel comment (eg. SECTION comment)
# This is the highest priority mechanism for sorting symbols
for comment in self._get_toplevel_comments():
# Programming error from extension author
assert comment.name
symbol_names = comment.meta.pop('symbols', [])
private_symbol_names = comment.meta.pop('private-symbols', [])
sources = comment.meta.pop('sources', None)
page = Page(comment.name, True, self.project.sanitized_name, self.extension_name,
comment=comment)
for symbol_name in symbol_names:
if symbol_name in relocated_symbols:
self.warn('symbol-listed-twice',
'Symbol %s listed in %s was already listed in %s' %
(symbol_name, comment.filename, relocated_symbols[symbol_name]))
continue
elif symbol_name in private_symbols:
self.warn('symbol-listed-twice',
'Symbol %s listed in %s was marked as private in %s' %
(symbol_name, comment.filename, private_symbols[symbol_name]))
continue
else:
page.symbol_names.add(symbol_name)
symbol_pages[symbol_name] = page
symbol = self.app.database.get_symbol(symbol_name)
assert symbol is not None
if symbol.parent_name and symbol.parent_name != symbol_name:
page = self.get_symbol_page(
symbol.parent_name, symbol_pages, smart_pages, section_links)
else:
smart_key = self._get_smart_key(symbol)
if smart_key is None:
return None
if smart_key in smart_pages:
page = smart_pages[smart_key]
else:
pagename = self.get_pagename(smart_key)
page = Page(smart_key, True, self.project.sanitized_name, self.extension_name,
output_path=os.path.dirname(pagename))
if page.link.ref in section_links:
self.warn('output-page-conflict',
'Creating a page for symbol %s would overwrite the page '
'declared in a toplevel comment (%s)' % (symbol_name, page.link.ref))
page = None
else:
smart_pages[smart_key] = page
if page is not None:
symbol_pages[symbol_name] = page
return page