mirror of
https://github.com/RGBCube/GitHubWrapper
synced 2025-05-16 06:05:00 +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
|
@ -42,51 +42,51 @@ class attributetable_item(nodes.Part, nodes.Element):
|
|||
|
||||
|
||||
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_}">')
|
||||
|
||||
|
||||
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:
|
||||
self.body.append(self.starttag(node, 'span'))
|
||||
self.body.append(self.starttag(node, "span"))
|
||||
|
||||
|
||||
def visit_attributetablebadge_node(self: DPYHTML5Translator, node: attributetablebadge) -> None:
|
||||
attributes = {
|
||||
'class': 'py-attribute-table-badge',
|
||||
'title': node['badge-type'],
|
||||
"class": "py-attribute-table-badge",
|
||||
"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:
|
||||
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:
|
||||
self.body.append('</div>')
|
||||
self.body.append("</div>")
|
||||
|
||||
|
||||
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:
|
||||
self.body.append('</span>')
|
||||
self.body.append("</span>")
|
||||
|
||||
|
||||
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:
|
||||
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):
|
||||
|
@ -99,16 +99,18 @@ class PyAttributeTable(SphinxDirective):
|
|||
def parse_name(self, content: str) -> Tuple[str, str]:
|
||||
match = _name_parser_regex.match(content)
|
||||
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()
|
||||
if path:
|
||||
modulename = path.rstrip('.')
|
||||
modulename = path.rstrip(".")
|
||||
else:
|
||||
modulename = self.env.temp_data.get('autodoc:module')
|
||||
modulename = self.env.temp_data.get("autodoc:module")
|
||||
if not modulename:
|
||||
modulename = self.env.ref_context.get('py:module')
|
||||
modulename = self.env.ref_context.get("py:module")
|
||||
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
|
||||
|
||||
|
@ -140,12 +142,12 @@ class PyAttributeTable(SphinxDirective):
|
|||
replaced.
|
||||
"""
|
||||
content = self.arguments[0].strip()
|
||||
node = attributetableplaceholder('')
|
||||
node = attributetableplaceholder("")
|
||||
modulename, name = self.parse_name(content)
|
||||
node['python-doc'] = self.env.docname
|
||||
node['python-module'] = modulename
|
||||
node['python-class'] = name
|
||||
node['python-full-name'] = f'{modulename}.{name}'
|
||||
node["python-doc"] = self.env.docname
|
||||
node["python-module"] = modulename
|
||||
node["python-class"] = name
|
||||
node["python-full-name"] = f"{modulename}.{name}"
|
||||
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
|
||||
# full-class-name: objects
|
||||
result = {}
|
||||
domain = env.domains['py'] # type: ignore
|
||||
domain = env.domains["py"] # type: ignore
|
||||
|
||||
ignored = {
|
||||
'data',
|
||||
'exception',
|
||||
'module',
|
||||
'class',
|
||||
"data",
|
||||
"exception",
|
||||
"module",
|
||||
"class",
|
||||
}
|
||||
|
||||
for fullname, _, objtype, docname, _, _ in domain.get_objects():
|
||||
if objtype in ignored:
|
||||
continue
|
||||
|
||||
classname, _, child = fullname.rpartition('.')
|
||||
classname, _, child = fullname.rpartition(".")
|
||||
try:
|
||||
result[classname].append(child)
|
||||
except KeyError:
|
||||
|
@ -186,15 +188,19 @@ def process_attributetable(app: Sphinx, doctree: nodes.Node, fromdocname: str) -
|
|||
|
||||
lookup = build_lookup_table(env)
|
||||
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)
|
||||
table = attributetable('')
|
||||
table = attributetable("")
|
||||
for label, subitems in groups.items():
|
||||
if not subitems:
|
||||
continue
|
||||
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:
|
||||
node.replace_self([])
|
||||
|
@ -209,8 +215,8 @@ def get_class_results(
|
|||
cls = getattr(module, name)
|
||||
|
||||
groups: Dict[str, List[TableElement]] = {
|
||||
_('Attributes'): [],
|
||||
_('Methods'): [],
|
||||
_("Attributes"): [],
|
||||
_("Methods"): [],
|
||||
}
|
||||
|
||||
try:
|
||||
|
@ -219,8 +225,8 @@ def get_class_results(
|
|||
return groups
|
||||
|
||||
for attr in members:
|
||||
attrlookup = f'{fullname}.{attr}'
|
||||
key = _('Attributes')
|
||||
attrlookup = f"{fullname}.{attr}"
|
||||
key = _("Attributes")
|
||||
badge = None
|
||||
label = attr
|
||||
value = None
|
||||
|
@ -231,30 +237,30 @@ def get_class_results(
|
|||
break
|
||||
|
||||
if value is not None:
|
||||
doc = value.__doc__ or ''
|
||||
if inspect.iscoroutinefunction(value) or doc.startswith('|coro|'):
|
||||
key = _('Methods')
|
||||
badge = attributetablebadge('async', 'async')
|
||||
badge['badge-type'] = _('coroutine')
|
||||
doc = value.__doc__ or ""
|
||||
if inspect.iscoroutinefunction(value) or doc.startswith("|coro|"):
|
||||
key = _("Methods")
|
||||
badge = attributetablebadge("async", "async")
|
||||
badge["badge-type"] = _("coroutine")
|
||||
elif isinstance(value, classmethod):
|
||||
key = _('Methods')
|
||||
label = f'{name}.{attr}'
|
||||
badge = attributetablebadge('cls', 'cls')
|
||||
badge['badge-type'] = _('classmethod')
|
||||
key = _("Methods")
|
||||
label = f"{name}.{attr}"
|
||||
badge = attributetablebadge("cls", "cls")
|
||||
badge["badge-type"] = _("classmethod")
|
||||
elif inspect.isfunction(value):
|
||||
if doc.startswith(('A decorator', 'A shortcut decorator')):
|
||||
if doc.startswith(("A decorator", "A shortcut decorator")):
|
||||
# finicky but surprisingly consistent
|
||||
key = _('Methods')
|
||||
badge = attributetablebadge('@', '@')
|
||||
badge['badge-type'] = _('decorator')
|
||||
key = _("Methods")
|
||||
badge = attributetablebadge("@", "@")
|
||||
badge["badge-type"] = _("decorator")
|
||||
elif inspect.isasyncgenfunction(value):
|
||||
key = _('Methods')
|
||||
badge = attributetablebadge('async for', 'async for')
|
||||
badge['badge-type'] = _('async iterable')
|
||||
key = _("Methods")
|
||||
badge = attributetablebadge("async for", "async for")
|
||||
badge["badge-type"] = _("async iterable")
|
||||
else:
|
||||
key = _('Methods')
|
||||
badge = attributetablebadge('def', 'def')
|
||||
badge['badge-type'] = _('method')
|
||||
key = _("Methods")
|
||||
badge = attributetablebadge("def", "def")
|
||||
badge["badge-type"] = _("method")
|
||||
|
||||
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:
|
||||
title = attributetabletitle(key, key)
|
||||
ul = nodes.bullet_list('')
|
||||
ul = nodes.bullet_list("")
|
||||
for element in elements:
|
||||
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:
|
||||
ul.append(attributetable_item('', element.badge, para))
|
||||
ul.append(attributetable_item("", element.badge, para))
|
||||
else:
|
||||
ul.append(attributetable_item('', para))
|
||||
ul.append(attributetable_item("", para))
|
||||
|
||||
return attributetablecolumn('', title, ul)
|
||||
return attributetablecolumn("", title, ul)
|
||||
|
||||
|
||||
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(attributetablecolumn, html=(visit_attributetablecolumn_node, depart_attributetablecolumn_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(
|
||||
attributetablecolumn,
|
||||
html=(visit_attributetablecolumn_node, depart_attributetablecolumn_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.connect('doctree-resolved', process_attributetable)
|
||||
app.connect("doctree-resolved", process_attributetable)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue