mirror of
https://github.com/RGBCube/GitHubWrapper
synced 2025-05-14 21:24:59 +00:00
Cleaned up docs/
- Linted - Changed Github-Api-Wrapper to GitHub-API-Wrapper
This commit is contained in:
parent
a33985c69b
commit
f6b9852167
10 changed files with 219 additions and 174 deletions
|
@ -1,7 +1,7 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2015-2022 Rapptz
|
Copyright (c) 2015-2022 Rapptz
|
||||||
Copyright (c) 2022-present VarMonke and sudosnok
|
Copyright (c) 2022-present VarMonke, sudosnok & contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
4
docs/_templates/layout.html
vendored
4
docs/_templates/layout.html
vendored
|
@ -58,8 +58,8 @@
|
||||||
{#- The main navigation header #}
|
{#- The main navigation header #}
|
||||||
<header class="grid-item">
|
<header class="grid-item">
|
||||||
<nav>
|
<nav>
|
||||||
<a href="{{ pathto(master_doc)|e }}" class="main-heading">Github-API-Wrapper</a>
|
<a href="{{ pathto(master_doc)|e }}" class="main-heading">GitHub-API-Wrapper</a>
|
||||||
<a href="https://github.com/VarMonke/Github-API-Wrapper" title="GitHub"><span class="material-icons custom-icons">github</span></a>
|
<a href="https://github.com/Varmonke/GitHub-API-Wrapper" title="GitHub"><span class="material-icons custom-icons">github</span></a>
|
||||||
<a href="{{ discord_invite }}" title="{{ _('Discord') }}"><span class="material-icons custom-icons">discord</span></a>
|
<a href="{{ discord_invite }}" title="{{ _('Discord') }}"><span class="material-icons custom-icons">discord</span></a>
|
||||||
<a href="{{ pathto('faq') }}" title="FAQ"><span class="material-icons">help_center</span></a>
|
<a href="{{ pathto('faq') }}" title="FAQ"><span class="material-icons">help_center</span></a>
|
||||||
{#- If we have more links we can put them here #}
|
{#- If we have more links we can put them here #}
|
||||||
|
|
134
docs/conf.py
134
docs/conf.py
|
@ -6,8 +6,8 @@ import sys
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
sys.path.insert(0, os.path.abspath('..'))
|
sys.path.insert(0, os.path.abspath(".."))
|
||||||
sys.path.append(os.path.abspath('extensions'))
|
sys.path.append(os.path.abspath("extensions"))
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
@ -18,34 +18,34 @@ sys.path.append(os.path.abspath('extensions'))
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
'builder',
|
"builder",
|
||||||
'sphinx.ext.autodoc',
|
"sphinx.ext.autodoc",
|
||||||
'sphinx.ext.extlinks',
|
"sphinx.ext.extlinks",
|
||||||
'sphinx.ext.intersphinx',
|
"sphinx.ext.intersphinx",
|
||||||
'sphinx.ext.napoleon',
|
"sphinx.ext.napoleon",
|
||||||
'sphinxcontrib_trio',
|
"sphinxcontrib_trio",
|
||||||
'details',
|
"details",
|
||||||
'exception_hierarchy',
|
"exception_hierarchy",
|
||||||
'attributetable',
|
"attributetable",
|
||||||
'resourcelinks',
|
"resourcelinks",
|
||||||
'nitpick_file_ignorer',
|
"nitpick_file_ignorer",
|
||||||
]
|
]
|
||||||
|
|
||||||
autodoc_member_order = 'bysource'
|
autodoc_member_order = "bysource"
|
||||||
autodoc_typehints = 'none'
|
autodoc_typehints = "none"
|
||||||
# autodoc_mock_imports = ['sphinxcontrib_trio','sphinxcontrib-serializinghtml','sphinxcontrib-qthelp','sphinxcontrib-jsmath','sphinxcontrib-htmlhelp','sphinxcontrib-devhelp','sphinxcontrib-applehelp ','typing_extensions']
|
# autodoc_mock_imports = ['sphinxcontrib_trio','sphinxcontrib-serializinghtml','sphinxcontrib-qthelp','sphinxcontrib-jsmath','sphinxcontrib-htmlhelp','sphinxcontrib-devhelp','sphinxcontrib-applehelp ','typing_extensions']
|
||||||
# maybe consider this?
|
# maybe consider this?
|
||||||
# napoleon_attr_annotations = False
|
# napoleon_attr_annotations = False
|
||||||
|
|
||||||
extlinks = {
|
extlinks = {
|
||||||
'issue': ('https://github.com/VarMonke/Github-Api-Wrapper/issues/%s', 'GH-'),
|
"issue": ("https://github.com/Varmonke/GitHub-API-Wrapper/issues/%s", "GH-"),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Links used for cross-referencing stuff in other documentation
|
# Links used for cross-referencing stuff in other documentation
|
||||||
intersphinx_mapping = {
|
intersphinx_mapping = {
|
||||||
'py': ('https://docs.python.org/3', None),
|
"py": ("https://docs.python.org/3", None),
|
||||||
'aio': ('https://docs.aiohttp.org/en/stable/', None),
|
"aio": ("https://docs.aiohttp.org/en/stable/", None),
|
||||||
'req': ('https://docs.python-requests.org/en/latest/', None),
|
"req": ("https://docs.python-requests.org/en/latest/", None),
|
||||||
}
|
}
|
||||||
|
|
||||||
rst_prolog = """
|
rst_prolog = """
|
||||||
|
@ -56,20 +56,20 @@ rst_prolog = """
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ["_templates"]
|
||||||
|
|
||||||
# The suffix of source filenames.
|
# The suffix of source filenames.
|
||||||
source_suffix = '.rst'
|
source_suffix = ".rst"
|
||||||
|
|
||||||
# The encoding of source files.
|
# The encoding of source files.
|
||||||
# source_encoding = 'utf-8-sig'
|
# source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
# The master toctree document.
|
# The master toctree document.
|
||||||
master_doc = 'index'
|
master_doc = "index"
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'Github-API-Wrapper'
|
project = "GitHub-API-Wrapper"
|
||||||
copyright = '2022 - Present, VarMonke & sudosnok'
|
copyright = "2022-present, VarMonke, sudosnok & contributors"
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
@ -77,15 +77,15 @@ copyright = '2022 - Present, VarMonke & sudosnok'
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
|
|
||||||
version = ''
|
version = ""
|
||||||
with open('../github/__init__.py') as f:
|
with open("../github/__init__.py") as f:
|
||||||
version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1) # type: ignore
|
version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1) # type: ignore
|
||||||
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = version
|
release = version
|
||||||
|
|
||||||
# This assumes a tag is available for final releases
|
# This assumes a tag is available for final releases
|
||||||
branch = 'master' if version.endswith('a') else f"v{version}"
|
branch = "master" if version.endswith("a") else f"v{version}"
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
@ -94,7 +94,7 @@ branch = 'master' if version.endswith('a') else f"v{version}"
|
||||||
# Usually you set "language" from the command line for these cases.
|
# Usually you set "language" from the command line for these cases.
|
||||||
language = None
|
language = None
|
||||||
|
|
||||||
locale_dirs = ['locale/']
|
locale_dirs = ["locale/"]
|
||||||
gettext_compact = False
|
gettext_compact = False
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
|
@ -105,7 +105,7 @@ gettext_compact = False
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
# List of patterns, relative to source directory, that match files and
|
||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
exclude_patterns = ['_build']
|
exclude_patterns = ["_build"]
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
# documents.
|
# documents.
|
||||||
|
@ -123,7 +123,7 @@ exclude_patterns = ['_build']
|
||||||
# show_authors = False
|
# show_authors = False
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
pygments_style = 'friendly'
|
pygments_style = "friendly"
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
# A list of ignored prefixes for module index sorting.
|
||||||
# modindex_common_prefix = []
|
# modindex_common_prefix = []
|
||||||
|
@ -136,13 +136,13 @@ pygments_style = 'friendly'
|
||||||
def _i18n_warning_filter(record: logging.LogRecord) -> bool:
|
def _i18n_warning_filter(record: logging.LogRecord) -> bool:
|
||||||
return not record.msg.startswith(
|
return not record.msg.startswith(
|
||||||
(
|
(
|
||||||
'inconsistent references in translated message',
|
"inconsistent references in translated message",
|
||||||
'inconsistent term references in translated message',
|
"inconsistent term references in translated message",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
_i18n_logger = logging.getLogger('sphinx')
|
_i18n_logger = logging.getLogger("sphinx")
|
||||||
_i18n_logger.addFilter(_i18n_warning_filter)
|
_i18n_logger.addFilter(_i18n_warning_filter)
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
@ -151,21 +151,21 @@ html_experimental_html5_writer = True
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
html_theme = 'basic'
|
html_theme = "basic"
|
||||||
|
|
||||||
html_context = {
|
html_context = {
|
||||||
'discord_invite': 'https://discord.gg/r3sSKJJ',
|
"discord_invite": "https://discord.gg/r3sSKJJ",
|
||||||
'discord_extensions': [
|
"discord_extensions": [
|
||||||
('discord.ext.commands', 'ext/commands'),
|
("discord.ext.commands", "ext/commands"),
|
||||||
('discord.ext.tasks', 'ext/tasks'),
|
("discord.ext.tasks", "ext/tasks"),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
resource_links = {
|
resource_links = {
|
||||||
'discord': 'https://discord.gg/W2SDTtMrZA',
|
"discord": "https://discord.gg/W2SDTtMrZA",
|
||||||
'issues': 'https://github.com/VarMonke/Github-Api-Wrapper/issues',
|
"issues": "https://github.com/Varmonke/GitHub-API-Wrapper/issues",
|
||||||
'discussions': 'https://github.com/VarMonke/Github-Api-Wrapper/discussions',
|
"discussions": "https://github.com/Varmonke/GitHub-API-Wrapper/discussions",
|
||||||
'examples': f'https://github.com/VarMonke/Github-Api-Wrapper/examples',
|
"examples": f"https://github.com/Varmonke/GitHub-API-Wrapper/examples",
|
||||||
}
|
}
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
@ -191,12 +191,12 @@ resource_links = {
|
||||||
# The name of an image file (within the static path) to use as favicon of the
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
# pixels large.
|
# pixels large.
|
||||||
html_favicon = './images/icon.ico'
|
html_favicon = "./images/icon.ico"
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
html_static_path = ['_static']
|
html_static_path = ["_static"]
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
|
@ -256,12 +256,12 @@ html_static_path = ['_static']
|
||||||
|
|
||||||
# The name of a javascript file (relative to the configuration directory) that
|
# The name of a javascript file (relative to the configuration directory) that
|
||||||
# implements a search results scorer. If empty, the default will be used.
|
# implements a search results scorer. If empty, the default will be used.
|
||||||
html_search_scorer = '_static/scorer.js'
|
html_search_scorer = "_static/scorer.js"
|
||||||
|
|
||||||
html_js_files = ['custom.js', 'settings.js', 'copy.js', 'sidebar.js']
|
html_js_files = ["custom.js", "settings.js", "copy.js", "sidebar.js"]
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'Github-API-Wrapper.doc'
|
htmlhelp_basename = "GitHub-API-Wrapper.doc"
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
@ -280,7 +280,13 @@ latex_elements = {
|
||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
('index', 'Github-API-Wrapper.tex', 'Github-API-Wrapper Documentation', 'VarMonke & sudosnok', 'manual'),
|
(
|
||||||
|
"index",
|
||||||
|
"GitHub-API-Wrapper.tex",
|
||||||
|
"GitHub-API-Wrapper Documentation",
|
||||||
|
"VarMonke, sudosnok & contributors",
|
||||||
|
"manual",
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
@ -308,7 +314,15 @@ latex_documents = [
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [('index', 'Github-API-Wrapper', 'Github-API-Wrapper Documentation', ['VarMonke & sudosnok'], 1)]
|
man_pages = [
|
||||||
|
(
|
||||||
|
"index",
|
||||||
|
"GitHub-API-Wrapper",
|
||||||
|
"GitHub-API-Wrapper Documentation",
|
||||||
|
["VarMonke, sudosnok & contributors"],
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
# If true, show URL addresses after external links.
|
||||||
# man_show_urls = False
|
# man_show_urls = False
|
||||||
|
@ -321,13 +335,13 @@ man_pages = [('index', 'Github-API-Wrapper', 'Github-API-Wrapper Documentation',
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(
|
(
|
||||||
'index',
|
"index",
|
||||||
'Github-API-Wrapper',
|
"GitHub-API-Wrapper",
|
||||||
'Github-API-Wrapper Documentation',
|
"GitHub-API-Wrapper Documentation",
|
||||||
'VarMonke & sudosnok',
|
"VarMonke, sudosnok & contributors",
|
||||||
'Github-API-Wrapper',
|
"GitHub-API-Wrapper",
|
||||||
'One line description of project.',
|
"One line description of project.",
|
||||||
'Miscellaneous',
|
"Miscellaneous",
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -345,7 +359,7 @@ texinfo_documents = [
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
if app.config.language == 'ja':
|
if app.config.language == "ja":
|
||||||
app.config.intersphinx_mapping['py'] = ('https://docs.python.org/ja/3', None)
|
app.config.intersphinx_mapping["py"] = ("https://docs.python.org/ja/3", None)
|
||||||
app.config.html_context['discord_invite'] = 'W2SDTtMrZA'
|
app.config.html_context["discord_invite"] = "W2SDTtMrZA"
|
||||||
app.config.resource_links['discord'] = 'W2SDTtMrZA'
|
app.config.resource_links["discord"] = "W2SDTtMrZA"
|
||||||
|
|
|
@ -42,51 +42,51 @@ class attributetable_item(nodes.Part, nodes.Element):
|
||||||
|
|
||||||
|
|
||||||
def visit_attributetable_node(self: DPYHTML5Translator, node: attributetable) -> None:
|
def visit_attributetable_node(self: DPYHTML5Translator, node: attributetable) -> None:
|
||||||
class_ = node['python-class']
|
class_ = node["python-class"]
|
||||||
self.body.append(f'<div class="py-attribute-table" data-move-to-id="{class_}">')
|
self.body.append(f'<div class="py-attribute-table" data-move-to-id="{class_}">')
|
||||||
|
|
||||||
|
|
||||||
def visit_attributetablecolumn_node(self: DPYHTML5Translator, node: attributetablecolumn) -> None:
|
def visit_attributetablecolumn_node(self: DPYHTML5Translator, node: attributetablecolumn) -> None:
|
||||||
self.body.append(self.starttag(node, 'div', CLASS='py-attribute-table-column'))
|
self.body.append(self.starttag(node, "div", CLASS="py-attribute-table-column"))
|
||||||
|
|
||||||
|
|
||||||
def visit_attributetabletitle_node(self: DPYHTML5Translator, node: attributetabletitle) -> None:
|
def visit_attributetabletitle_node(self: DPYHTML5Translator, node: attributetabletitle) -> None:
|
||||||
self.body.append(self.starttag(node, 'span'))
|
self.body.append(self.starttag(node, "span"))
|
||||||
|
|
||||||
|
|
||||||
def visit_attributetablebadge_node(self: DPYHTML5Translator, node: attributetablebadge) -> None:
|
def visit_attributetablebadge_node(self: DPYHTML5Translator, node: attributetablebadge) -> None:
|
||||||
attributes = {
|
attributes = {
|
||||||
'class': 'py-attribute-table-badge',
|
"class": "py-attribute-table-badge",
|
||||||
'title': node['badge-type'],
|
"title": node["badge-type"],
|
||||||
}
|
}
|
||||||
self.body.append(self.starttag(node, 'span', **attributes))
|
self.body.append(self.starttag(node, "span", **attributes))
|
||||||
|
|
||||||
|
|
||||||
def visit_attributetable_item_node(self: DPYHTML5Translator, node: attributetable_item) -> None:
|
def visit_attributetable_item_node(self: DPYHTML5Translator, node: attributetable_item) -> None:
|
||||||
self.body.append(self.starttag(node, 'li', CLASS='py-attribute-table-entry'))
|
self.body.append(self.starttag(node, "li", CLASS="py-attribute-table-entry"))
|
||||||
|
|
||||||
|
|
||||||
def depart_attributetable_node(self: DPYHTML5Translator, node: attributetable) -> None:
|
def depart_attributetable_node(self: DPYHTML5Translator, node: attributetable) -> None:
|
||||||
self.body.append('</div>')
|
self.body.append("</div>")
|
||||||
|
|
||||||
|
|
||||||
def depart_attributetablecolumn_node(self: DPYHTML5Translator, node: attributetablecolumn) -> None:
|
def depart_attributetablecolumn_node(self: DPYHTML5Translator, node: attributetablecolumn) -> None:
|
||||||
self.body.append('</div>')
|
self.body.append("</div>")
|
||||||
|
|
||||||
|
|
||||||
def depart_attributetabletitle_node(self: DPYHTML5Translator, node: attributetabletitle) -> None:
|
def depart_attributetabletitle_node(self: DPYHTML5Translator, node: attributetabletitle) -> None:
|
||||||
self.body.append('</span>')
|
self.body.append("</span>")
|
||||||
|
|
||||||
|
|
||||||
def depart_attributetablebadge_node(self: DPYHTML5Translator, node: attributetablebadge) -> None:
|
def depart_attributetablebadge_node(self: DPYHTML5Translator, node: attributetablebadge) -> None:
|
||||||
self.body.append('</span>')
|
self.body.append("</span>")
|
||||||
|
|
||||||
|
|
||||||
def depart_attributetable_item_node(self: DPYHTML5Translator, node: attributetable_item) -> None:
|
def depart_attributetable_item_node(self: DPYHTML5Translator, node: attributetable_item) -> None:
|
||||||
self.body.append('</li>')
|
self.body.append("</li>")
|
||||||
|
|
||||||
|
|
||||||
_name_parser_regex = re.compile(r'(?P<module>[\w.]+\.)?(?P<name>\w+)')
|
_name_parser_regex = re.compile(r"(?P<module>[\w.]+\.)?(?P<name>\w+)")
|
||||||
|
|
||||||
|
|
||||||
class PyAttributeTable(SphinxDirective):
|
class PyAttributeTable(SphinxDirective):
|
||||||
|
@ -99,16 +99,18 @@ class PyAttributeTable(SphinxDirective):
|
||||||
def parse_name(self, content: str) -> Tuple[str, str]:
|
def parse_name(self, content: str) -> Tuple[str, str]:
|
||||||
match = _name_parser_regex.match(content)
|
match = _name_parser_regex.match(content)
|
||||||
if match is None:
|
if match is None:
|
||||||
raise RuntimeError(f"content {content} somehow doesn't match regex in {self.env.docname}.")
|
raise RuntimeError(
|
||||||
|
f"content {content} somehow doesn't match regex in {self.env.docname}."
|
||||||
|
)
|
||||||
path, name = match.groups()
|
path, name = match.groups()
|
||||||
if path:
|
if path:
|
||||||
modulename = path.rstrip('.')
|
modulename = path.rstrip(".")
|
||||||
else:
|
else:
|
||||||
modulename = self.env.temp_data.get('autodoc:module')
|
modulename = self.env.temp_data.get("autodoc:module")
|
||||||
if not modulename:
|
if not modulename:
|
||||||
modulename = self.env.ref_context.get('py:module')
|
modulename = self.env.ref_context.get("py:module")
|
||||||
if modulename is None:
|
if modulename is None:
|
||||||
raise RuntimeError(f'modulename somehow None for {content} in {self.env.docname}.')
|
raise RuntimeError(f"modulename somehow None for {content} in {self.env.docname}.")
|
||||||
|
|
||||||
return modulename, name
|
return modulename, name
|
||||||
|
|
||||||
|
@ -140,12 +142,12 @@ class PyAttributeTable(SphinxDirective):
|
||||||
replaced.
|
replaced.
|
||||||
"""
|
"""
|
||||||
content = self.arguments[0].strip()
|
content = self.arguments[0].strip()
|
||||||
node = attributetableplaceholder('')
|
node = attributetableplaceholder("")
|
||||||
modulename, name = self.parse_name(content)
|
modulename, name = self.parse_name(content)
|
||||||
node['python-doc'] = self.env.docname
|
node["python-doc"] = self.env.docname
|
||||||
node['python-module'] = modulename
|
node["python-module"] = modulename
|
||||||
node['python-class'] = name
|
node["python-class"] = name
|
||||||
node['python-full-name'] = f'{modulename}.{name}'
|
node["python-full-name"] = f"{modulename}.{name}"
|
||||||
return [node]
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
|
@ -153,20 +155,20 @@ def build_lookup_table(env: Optional[BuildEnvironment]) -> Dict[str, List[str]]:
|
||||||
# Given an environment, load up a lookup table of
|
# Given an environment, load up a lookup table of
|
||||||
# full-class-name: objects
|
# full-class-name: objects
|
||||||
result = {}
|
result = {}
|
||||||
domain = env.domains['py'] # type: ignore
|
domain = env.domains["py"] # type: ignore
|
||||||
|
|
||||||
ignored = {
|
ignored = {
|
||||||
'data',
|
"data",
|
||||||
'exception',
|
"exception",
|
||||||
'module',
|
"module",
|
||||||
'class',
|
"class",
|
||||||
}
|
}
|
||||||
|
|
||||||
for fullname, _, objtype, docname, _, _ in domain.get_objects():
|
for fullname, _, objtype, docname, _, _ in domain.get_objects():
|
||||||
if objtype in ignored:
|
if objtype in ignored:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
classname, _, child = fullname.rpartition('.')
|
classname, _, child = fullname.rpartition(".")
|
||||||
try:
|
try:
|
||||||
result[classname].append(child)
|
result[classname].append(child)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -186,15 +188,19 @@ def process_attributetable(app: Sphinx, doctree: nodes.Node, fromdocname: str) -
|
||||||
|
|
||||||
lookup = build_lookup_table(env)
|
lookup = build_lookup_table(env)
|
||||||
for node in doctree.traverse(attributetableplaceholder):
|
for node in doctree.traverse(attributetableplaceholder):
|
||||||
modulename, classname, fullname = node['python-module'], node['python-class'], node['python-full-name']
|
modulename, classname, fullname = (
|
||||||
|
node["python-module"],
|
||||||
|
node["python-class"],
|
||||||
|
node["python-full-name"],
|
||||||
|
)
|
||||||
groups = get_class_results(lookup, modulename, classname, fullname)
|
groups = get_class_results(lookup, modulename, classname, fullname)
|
||||||
table = attributetable('')
|
table = attributetable("")
|
||||||
for label, subitems in groups.items():
|
for label, subitems in groups.items():
|
||||||
if not subitems:
|
if not subitems:
|
||||||
continue
|
continue
|
||||||
table.append(class_results_to_node(label, sorted(subitems, key=lambda c: c.label)))
|
table.append(class_results_to_node(label, sorted(subitems, key=lambda c: c.label)))
|
||||||
|
|
||||||
table['python-class'] = fullname
|
table["python-class"] = fullname
|
||||||
|
|
||||||
if not table:
|
if not table:
|
||||||
node.replace_self([])
|
node.replace_self([])
|
||||||
|
@ -209,8 +215,8 @@ def get_class_results(
|
||||||
cls = getattr(module, name)
|
cls = getattr(module, name)
|
||||||
|
|
||||||
groups: Dict[str, List[TableElement]] = {
|
groups: Dict[str, List[TableElement]] = {
|
||||||
_('Attributes'): [],
|
_("Attributes"): [],
|
||||||
_('Methods'): [],
|
_("Methods"): [],
|
||||||
}
|
}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -219,8 +225,8 @@ def get_class_results(
|
||||||
return groups
|
return groups
|
||||||
|
|
||||||
for attr in members:
|
for attr in members:
|
||||||
attrlookup = f'{fullname}.{attr}'
|
attrlookup = f"{fullname}.{attr}"
|
||||||
key = _('Attributes')
|
key = _("Attributes")
|
||||||
badge = None
|
badge = None
|
||||||
label = attr
|
label = attr
|
||||||
value = None
|
value = None
|
||||||
|
@ -231,30 +237,30 @@ def get_class_results(
|
||||||
break
|
break
|
||||||
|
|
||||||
if value is not None:
|
if value is not None:
|
||||||
doc = value.__doc__ or ''
|
doc = value.__doc__ or ""
|
||||||
if inspect.iscoroutinefunction(value) or doc.startswith('|coro|'):
|
if inspect.iscoroutinefunction(value) or doc.startswith("|coro|"):
|
||||||
key = _('Methods')
|
key = _("Methods")
|
||||||
badge = attributetablebadge('async', 'async')
|
badge = attributetablebadge("async", "async")
|
||||||
badge['badge-type'] = _('coroutine')
|
badge["badge-type"] = _("coroutine")
|
||||||
elif isinstance(value, classmethod):
|
elif isinstance(value, classmethod):
|
||||||
key = _('Methods')
|
key = _("Methods")
|
||||||
label = f'{name}.{attr}'
|
label = f"{name}.{attr}"
|
||||||
badge = attributetablebadge('cls', 'cls')
|
badge = attributetablebadge("cls", "cls")
|
||||||
badge['badge-type'] = _('classmethod')
|
badge["badge-type"] = _("classmethod")
|
||||||
elif inspect.isfunction(value):
|
elif inspect.isfunction(value):
|
||||||
if doc.startswith(('A decorator', 'A shortcut decorator')):
|
if doc.startswith(("A decorator", "A shortcut decorator")):
|
||||||
# finicky but surprisingly consistent
|
# finicky but surprisingly consistent
|
||||||
key = _('Methods')
|
key = _("Methods")
|
||||||
badge = attributetablebadge('@', '@')
|
badge = attributetablebadge("@", "@")
|
||||||
badge['badge-type'] = _('decorator')
|
badge["badge-type"] = _("decorator")
|
||||||
elif inspect.isasyncgenfunction(value):
|
elif inspect.isasyncgenfunction(value):
|
||||||
key = _('Methods')
|
key = _("Methods")
|
||||||
badge = attributetablebadge('async for', 'async for')
|
badge = attributetablebadge("async for", "async for")
|
||||||
badge['badge-type'] = _('async iterable')
|
badge["badge-type"] = _("async iterable")
|
||||||
else:
|
else:
|
||||||
key = _('Methods')
|
key = _("Methods")
|
||||||
badge = attributetablebadge('def', 'def')
|
badge = attributetablebadge("def", "def")
|
||||||
badge['badge-type'] = _('method')
|
badge["badge-type"] = _("method")
|
||||||
|
|
||||||
groups[key].append(TableElement(fullname=attrlookup, label=label, badge=badge))
|
groups[key].append(TableElement(fullname=attrlookup, label=label, badge=badge))
|
||||||
|
|
||||||
|
@ -263,26 +269,40 @@ def get_class_results(
|
||||||
|
|
||||||
def class_results_to_node(key: str, elements: Sequence[TableElement]) -> attributetablecolumn:
|
def class_results_to_node(key: str, elements: Sequence[TableElement]) -> attributetablecolumn:
|
||||||
title = attributetabletitle(key, key)
|
title = attributetabletitle(key, key)
|
||||||
ul = nodes.bullet_list('')
|
ul = nodes.bullet_list("")
|
||||||
for element in elements:
|
for element in elements:
|
||||||
ref = nodes.reference(
|
ref = nodes.reference(
|
||||||
'', '', internal=True, refuri=f'#{element.fullname}', anchorname='', *[nodes.Text(element.label)]
|
"",
|
||||||
|
"",
|
||||||
|
internal=True,
|
||||||
|
refuri=f"#{element.fullname}",
|
||||||
|
anchorname="",
|
||||||
|
*[nodes.Text(element.label)],
|
||||||
)
|
)
|
||||||
para = addnodes.compact_paragraph('', '', ref)
|
para = addnodes.compact_paragraph("", "", ref)
|
||||||
if element.badge is not None:
|
if element.badge is not None:
|
||||||
ul.append(attributetable_item('', element.badge, para))
|
ul.append(attributetable_item("", element.badge, para))
|
||||||
else:
|
else:
|
||||||
ul.append(attributetable_item('', para))
|
ul.append(attributetable_item("", para))
|
||||||
|
|
||||||
return attributetablecolumn('', title, ul)
|
return attributetablecolumn("", title, ul)
|
||||||
|
|
||||||
|
|
||||||
def setup(app: Sphinx) -> None:
|
def setup(app: Sphinx) -> None:
|
||||||
app.add_directive('attributetable', PyAttributeTable)
|
app.add_directive("attributetable", PyAttributeTable)
|
||||||
app.add_node(attributetable, html=(visit_attributetable_node, depart_attributetable_node))
|
app.add_node(attributetable, html=(visit_attributetable_node, depart_attributetable_node))
|
||||||
app.add_node(attributetablecolumn, html=(visit_attributetablecolumn_node, depart_attributetablecolumn_node))
|
app.add_node(
|
||||||
app.add_node(attributetabletitle, html=(visit_attributetabletitle_node, depart_attributetabletitle_node))
|
attributetablecolumn,
|
||||||
app.add_node(attributetablebadge, html=(visit_attributetablebadge_node, depart_attributetablebadge_node))
|
html=(visit_attributetablecolumn_node, depart_attributetablecolumn_node),
|
||||||
app.add_node(attributetable_item, html=(visit_attributetable_item_node, depart_attributetable_item_node))
|
)
|
||||||
|
app.add_node(
|
||||||
|
attributetabletitle, html=(visit_attributetabletitle_node, depart_attributetabletitle_node)
|
||||||
|
)
|
||||||
|
app.add_node(
|
||||||
|
attributetablebadge, html=(visit_attributetablebadge_node, depart_attributetablebadge_node)
|
||||||
|
)
|
||||||
|
app.add_node(
|
||||||
|
attributetable_item, html=(visit_attributetable_item_node, depart_attributetable_item_node)
|
||||||
|
)
|
||||||
app.add_node(attributetableplaceholder)
|
app.add_node(attributetableplaceholder)
|
||||||
app.connect('doctree-resolved', process_attributetable)
|
app.connect("doctree-resolved", process_attributetable)
|
||||||
|
|
|
@ -6,11 +6,11 @@ from sphinx.writers.html5 import HTML5Translator
|
||||||
class DPYHTML5Translator(HTML5Translator):
|
class DPYHTML5Translator(HTML5Translator):
|
||||||
def visit_section(self, node):
|
def visit_section(self, node):
|
||||||
self.section_level += 1
|
self.section_level += 1
|
||||||
self.body.append(self.starttag(node, 'section'))
|
self.body.append(self.starttag(node, "section"))
|
||||||
|
|
||||||
def depart_section(self, node):
|
def depart_section(self, node):
|
||||||
self.section_level -= 1
|
self.section_level -= 1
|
||||||
self.body.append('</section>\n')
|
self.body.append("</section>\n")
|
||||||
|
|
||||||
def visit_table(self, node):
|
def visit_table(self, node):
|
||||||
self.body.append('<div class="table-wrapper">')
|
self.body.append('<div class="table-wrapper">')
|
||||||
|
@ -18,7 +18,7 @@ class DPYHTML5Translator(HTML5Translator):
|
||||||
|
|
||||||
def depart_table(self, node):
|
def depart_table(self, node):
|
||||||
super().depart_table(node)
|
super().depart_table(node)
|
||||||
self.body.append('</div>')
|
self.body.append("</div>")
|
||||||
|
|
||||||
|
|
||||||
class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder):
|
class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder):
|
||||||
|
@ -32,45 +32,46 @@ class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder):
|
||||||
indexcounts.append(sum(1 + len(subitems) for _, (_, subitems, _) in entries))
|
indexcounts.append(sum(1 + len(subitems) for _, (_, subitems, _) in entries))
|
||||||
|
|
||||||
genindexcontext = {
|
genindexcontext = {
|
||||||
'genindexentries': genindex,
|
"genindexentries": genindex,
|
||||||
'genindexcounts': indexcounts,
|
"genindexcounts": indexcounts,
|
||||||
'split_index': self.config.html_split_index,
|
"split_index": self.config.html_split_index,
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.config.html_split_index:
|
if self.config.html_split_index:
|
||||||
self.handle_page('genindex', genindexcontext, 'genindex-split.html')
|
self.handle_page("genindex", genindexcontext, "genindex-split.html")
|
||||||
self.handle_page('genindex-all', genindexcontext, 'genindex.html')
|
self.handle_page("genindex-all", genindexcontext, "genindex.html")
|
||||||
for (key, entries), count in zip(genindex, indexcounts):
|
for (key, entries), count in zip(genindex, indexcounts):
|
||||||
ctx = {'key': key, 'entries': entries, 'count': count, 'genindexentries': genindex}
|
ctx = {"key": key, "entries": entries, "count": count, "genindexentries": genindex}
|
||||||
self.handle_page(f"genindex-{key}", ctx, 'genindex-single.html')
|
self.handle_page(f"genindex-{key}", ctx, "genindex-single.html")
|
||||||
else:
|
else:
|
||||||
self.handle_page('genindex', genindexcontext, 'genindex.html')
|
self.handle_page("genindex", genindexcontext, "genindex.html")
|
||||||
|
|
||||||
|
|
||||||
def add_custom_jinja2(app):
|
def add_custom_jinja2(app):
|
||||||
env = app.builder.templates.environment
|
env = app.builder.templates.environment
|
||||||
env.tests['prefixedwith'] = str.startswith
|
env.tests["prefixedwith"] = str.startswith
|
||||||
env.tests['suffixedwith'] = str.endswith
|
env.tests["suffixedwith"] = str.endswith
|
||||||
|
|
||||||
|
|
||||||
def add_builders(app):
|
def add_builders(app):
|
||||||
"""This is necessary because RTD injects their own for some reason."""
|
"""This is necessary because RTD injects their own for some reason."""
|
||||||
app.set_translator('html', DPYHTML5Translator, override=True)
|
app.set_translator("html", DPYHTML5Translator, override=True)
|
||||||
app.add_builder(DPYStandaloneHTMLBuilder, override=True)
|
app.add_builder(DPYStandaloneHTMLBuilder, override=True)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
original = app.registry.builders['readthedocs']
|
original = app.registry.builders["readthedocs"]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
injected_mro = tuple(
|
injected_mro = tuple(
|
||||||
base if base is not StandaloneHTMLBuilder else DPYStandaloneHTMLBuilder for base in original.mro()[1:]
|
base if base is not StandaloneHTMLBuilder else DPYStandaloneHTMLBuilder
|
||||||
|
for base in original.mro()[1:]
|
||||||
)
|
)
|
||||||
new_builder = type(original.__name__, injected_mro, {'name': 'readthedocs'})
|
new_builder = type(original.__name__, injected_mro, {"name": "readthedocs"})
|
||||||
app.set_translator('readthedocs', DPYHTML5Translator, override=True)
|
app.set_translator("readthedocs", DPYHTML5Translator, override=True)
|
||||||
app.add_builder(new_builder, override=True)
|
app.add_builder(new_builder, override=True)
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
add_builders(app)
|
add_builders(app)
|
||||||
app.connect('builder-inited', add_custom_jinja2)
|
app.connect("builder-inited", add_custom_jinja2)
|
||||||
|
|
|
@ -13,20 +13,20 @@ class summary(nodes.General, nodes.Element):
|
||||||
|
|
||||||
|
|
||||||
def visit_details_node(self, node):
|
def visit_details_node(self, node):
|
||||||
self.body.append(self.starttag(node, 'details', CLASS=node.attributes.get('class', '')))
|
self.body.append(self.starttag(node, "details", CLASS=node.attributes.get("class", "")))
|
||||||
|
|
||||||
|
|
||||||
def visit_summary_node(self, node):
|
def visit_summary_node(self, node):
|
||||||
self.body.append(self.starttag(node, 'summary', CLASS=node.attributes.get('summary-class', '')))
|
self.body.append(self.starttag(node, "summary", CLASS=node.attributes.get("summary-class", "")))
|
||||||
self.body.append(node.rawsource)
|
self.body.append(node.rawsource)
|
||||||
|
|
||||||
|
|
||||||
def depart_details_node(self, node):
|
def depart_details_node(self, node):
|
||||||
self.body.append('</details>\n')
|
self.body.append("</details>\n")
|
||||||
|
|
||||||
|
|
||||||
def depart_summary_node(self, node):
|
def depart_summary_node(self, node):
|
||||||
self.body.append('</summary>')
|
self.body.append("</summary>")
|
||||||
|
|
||||||
|
|
||||||
class DetailsDirective(Directive):
|
class DetailsDirective(Directive):
|
||||||
|
@ -34,8 +34,8 @@ class DetailsDirective(Directive):
|
||||||
optional_arguments = 1
|
optional_arguments = 1
|
||||||
|
|
||||||
option_spec = {
|
option_spec = {
|
||||||
'class': directives.class_option,
|
"class": directives.class_option,
|
||||||
'summary-class': directives.class_option,
|
"summary-class": directives.class_option,
|
||||||
}
|
}
|
||||||
|
|
||||||
has_content = True
|
has_content = True
|
||||||
|
@ -44,12 +44,14 @@ class DetailsDirective(Directive):
|
||||||
set_classes(self.options)
|
set_classes(self.options)
|
||||||
self.assert_has_content()
|
self.assert_has_content()
|
||||||
|
|
||||||
text = '\n'.join(self.content)
|
text = "\n".join(self.content)
|
||||||
node = details(text, **self.options)
|
node = details(text, **self.options)
|
||||||
|
|
||||||
if self.arguments:
|
if self.arguments:
|
||||||
summary_node = summary(self.arguments[0], **self.options)
|
summary_node = summary(self.arguments[0], **self.options)
|
||||||
summary_node.source, summary_node.line = self.state_machine.get_source_and_line(self.lineno)
|
summary_node.source, summary_node.line = self.state_machine.get_source_and_line(
|
||||||
|
self.lineno
|
||||||
|
)
|
||||||
node += summary_node
|
node += summary_node
|
||||||
|
|
||||||
self.state.nested_parse(self.content, self.content_offset, node)
|
self.state.nested_parse(self.content, self.content_offset, node)
|
||||||
|
@ -59,4 +61,4 @@ class DetailsDirective(Directive):
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_node(details, html=(visit_details_node, depart_details_node))
|
app.add_node(details, html=(visit_details_node, depart_details_node))
|
||||||
app.add_node(summary, html=(visit_summary_node, depart_summary_node))
|
app.add_node(summary, html=(visit_summary_node, depart_summary_node))
|
||||||
app.add_directive('details', DetailsDirective)
|
app.add_directive("details", DetailsDirective)
|
||||||
|
|
|
@ -7,11 +7,11 @@ class exception_hierarchy(nodes.General, nodes.Element):
|
||||||
|
|
||||||
|
|
||||||
def visit_exception_hierarchy_node(self, node):
|
def visit_exception_hierarchy_node(self, node):
|
||||||
self.body.append(self.starttag(node, 'div', CLASS='exception-hierarchy-content'))
|
self.body.append(self.starttag(node, "div", CLASS="exception-hierarchy-content"))
|
||||||
|
|
||||||
|
|
||||||
def depart_exception_hierarchy_node(self, node):
|
def depart_exception_hierarchy_node(self, node):
|
||||||
self.body.append('</div>\n')
|
self.body.append("</div>\n")
|
||||||
|
|
||||||
|
|
||||||
class ExceptionHierarchyDirective(Directive):
|
class ExceptionHierarchyDirective(Directive):
|
||||||
|
@ -19,11 +19,13 @@ class ExceptionHierarchyDirective(Directive):
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.assert_has_content()
|
self.assert_has_content()
|
||||||
node = exception_hierarchy('\n'.join(self.content))
|
node = exception_hierarchy("\n".join(self.content))
|
||||||
self.state.nested_parse(self.content, self.content_offset, node)
|
self.state.nested_parse(self.content, self.content_offset, node)
|
||||||
return [node]
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_node(exception_hierarchy, html=(visit_exception_hierarchy_node, depart_exception_hierarchy_node))
|
app.add_node(
|
||||||
app.add_directive('exception_hierarchy', ExceptionHierarchyDirective)
|
exception_hierarchy, html=(visit_exception_hierarchy_node, depart_exception_hierarchy_node)
|
||||||
|
)
|
||||||
|
app.add_directive("exception_hierarchy", ExceptionHierarchyDirective)
|
||||||
|
|
|
@ -10,12 +10,12 @@ class NitpickFileIgnorer(logging.Filter):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
def filter(self, record: sphinx_logging.SphinxLogRecord) -> bool:
|
def filter(self, record: sphinx_logging.SphinxLogRecord) -> bool:
|
||||||
if getattr(record, 'type', None) == 'ref':
|
if getattr(record, "type", None) == "ref":
|
||||||
return record.location.get('refdoc') not in self.app.config.nitpick_ignore_files
|
return record.location.get("refdoc") not in self.app.config.nitpick_ignore_files
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def setup(app: Sphinx):
|
def setup(app: Sphinx):
|
||||||
app.add_config_value('nitpick_ignore_files', [], '')
|
app.add_config_value("nitpick_ignore_files", [], "")
|
||||||
f = NitpickFileIgnorer(app)
|
f = NitpickFileIgnorer(app)
|
||||||
sphinx_logging.getLogger('sphinx.transforms.post_transforms').logger.addFilter(f)
|
sphinx_logging.getLogger("sphinx.transforms.post_transforms").logger.addFilter(f)
|
||||||
|
|
|
@ -15,7 +15,13 @@ from sphinx.util.typing import RoleFunction
|
||||||
|
|
||||||
def make_link_role(resource_links: Dict[str, str]) -> RoleFunction:
|
def make_link_role(resource_links: Dict[str, str]) -> RoleFunction:
|
||||||
def role(
|
def role(
|
||||||
typ: str, rawtext: str, text: str, lineno: int, inliner: Inliner, options: Dict = {}, content: List[str] = []
|
typ: str,
|
||||||
|
rawtext: str,
|
||||||
|
text: str,
|
||||||
|
lineno: int,
|
||||||
|
inliner: Inliner,
|
||||||
|
options: Dict = {},
|
||||||
|
content: List[str] = [],
|
||||||
) -> Tuple[List[Node], List[system_message]]:
|
) -> Tuple[List[Node], List[system_message]]:
|
||||||
|
|
||||||
text = utils.unescape(text)
|
text = utils.unescape(text)
|
||||||
|
@ -30,10 +36,10 @@ def make_link_role(resource_links: Dict[str, str]) -> RoleFunction:
|
||||||
|
|
||||||
|
|
||||||
def add_link_role(app: Sphinx) -> None:
|
def add_link_role(app: Sphinx) -> None:
|
||||||
app.add_role('resource', make_link_role(app.config.resource_links))
|
app.add_role("resource", make_link_role(app.config.resource_links))
|
||||||
|
|
||||||
|
|
||||||
def setup(app: Sphinx) -> Dict[str, Any]:
|
def setup(app: Sphinx) -> Dict[str, Any]:
|
||||||
app.add_config_value('resource_links', {}, 'env')
|
app.add_config_value("resource_links", {}, "env")
|
||||||
app.connect('builder-inited', add_link_role)
|
app.connect("builder-inited", add_link_role)
|
||||||
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}
|
return {"version": sphinx.__display_version__, "parallel_read_safe": True}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
.. Github-API-Wrapper documentation master file, created by
|
.. GitHub-API-Wrapper documentation master file, created by
|
||||||
sphinx-quickstart on Sun May 1 15:39:50 2022.
|
sphinx-quickstart on Sun May 1 15:39:50 2022.
|
||||||
You can adapt this file completely to your liking, but it should at least
|
You can adapt this file completely to your liking, but it should at least
|
||||||
contain the root `toctree` directive.
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
Welcome to Github-API-Wrapper.
|
Welcome to GitHub-API-Wrapper.
|
||||||
==============================================
|
==============================================
|
||||||
|
|
||||||
.. automodule:: github
|
.. automodule:: github
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue