File: apilinks.py

package info (click to toggle)
python-klein 24.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,012 kB
  • sloc: python: 6,371; makefile: 130
file content (62 lines) | stat: -rw-r--r-- 1,338 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""
Sphinx/docutils extension to create links to pyDoctor documentation using a
RestructuredText interpreted text role that looks like this::

    :api:`python_object_to_link_to <label>`

for example::

    :api:`twisted.internet.defer.Deferred <Deferred>`

"""

from types import MappingProxyType


apilinks_base_url = "https://docs.twisted.org/en/stable/api/"

emptyMapping = MappingProxyType({})


def make_api_link(
    name,
    rawtext,
    text,
    lineno,
    inliner,
    options=emptyMapping,
    content=(),
):
    from docutils import nodes, utils

    # quick, dirty, and ugly...
    if "<" in text and ">" in text:
        full_name, label = text.split("<")
        full_name = full_name.strip()
        label = label.strip(">").strip()
    else:
        full_name = text

    # not really sufficient, but just testing...
    # ...hmmm, maybe this is good enough after all
    ref = "".join((apilinks_base_url, full_name, ".html"))

    node = nodes.reference(
        rawtext, utils.unescape(label), refuri=ref, **options
    )

    nodes = [node]
    sys_msgs = []
    return nodes, sys_msgs


# setup function to register the extension


def setup(app):
    app.add_config_value(
        "apilinks_base_url",
        "https://docs.twisted.org/en/stable/api/",
        "env",
    )
    app.add_role("api", make_api_link)