File: test_copyparams_directive.py

package info (click to toggle)
python-globus-sdk 4.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,172 kB
  • sloc: python: 35,227; sh: 44; makefile: 35
file content (159 lines) | stat: -rw-r--r-- 5,248 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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
from xml.etree import ElementTree

import pytest

# tests below will check the exact contents of BaseClient params
# if BaseClient changes, this will need to update -- but that's rare enough to be
# acceptable
BASE_CLIENT_PARAMS = (
    "app",
    "app_scopes",
    "authorizer",
    "app_name",
    "base_url",
    "transport",
    "retry_config",
)


def test_copy_params_requires_an_argument(
    sphinxext, docutils_runner, register_temporary_directive
):

    register_temporary_directive("sdk-copy-params", sphinxext.directives.CopyParams)

    with pytest.raises(Exception, match=r"1 argument\(s\) required, 0 supplied\."):
        docutils_runner.to_etree(".. sdk-copy-params::")


def test_copy_params_finds_base_client_with_or_without_qualified_name(sphinx_runner):
    etree1 = sphinx_runner.to_etree(
        """\
        .. py:function:: build_client(**kwargs)

            .. sdk-sphinx-copy-params:: globus_sdk.BaseClient
        """,
    )
    etree2 = sphinx_runner.to_etree(
        """\
        .. py:function:: build_client(**kwargs)

            .. sdk-sphinx-copy-params:: BaseClient
        """,
    )

    # the source attribute records the temporary filenames used
    # it doesn't matter what we set them to; just normalize them to be the same
    etree1.set("source", "/dev/stdin")
    etree2.set("source", "/dev/stdin")

    # now render and compare equal
    doc1 = ElementTree.tostring(etree1)
    doc2 = ElementTree.tostring(etree2)

    assert doc1 == doc2


def test_copy_params_renders_params_of_base_client(sphinx_runner):
    etree = sphinx_runner.to_etree(
        """\
        .. py:function:: build_client(**kwargs)

            .. sdk-sphinx-copy-params:: globus_sdk.BaseClient
        """,
    )

    assert etree.tag == "document"

    parameters_field = etree.find("./desc/desc_content/field_list/field")
    assert parameters_field is not None
    assert parameters_field.find("field_name").text == "Parameters"

    parameters_list = parameters_field.find("./field_body/bullet_list")
    assert parameters_list is not None
    parameter_names = parameters_list.findall("./list_item/paragraph/literal_strong")

    assert len(parameter_names) == len(BASE_CLIENT_PARAMS)
    param_names = tuple(p.text for p in parameter_names)
    assert param_names == BASE_CLIENT_PARAMS


def test_copy_params_can_render_after_content(sphinx_runner):
    etree = sphinx_runner.to_etree(
        """\
        .. py:function:: build_client(priority: int = 0, **kwargs)

            .. sdk-sphinx-copy-params:: globus_sdk.BaseClient

                :param priority: How cool this client will be
        """,
    )

    assert etree.tag == "document"

    parameters_field = etree.find("./desc/desc_content/field_list/field")
    assert parameters_field is not None
    assert parameters_field.find("field_name").text == "Parameters"

    parameters_list = parameters_field.find("./field_body/bullet_list")
    assert parameters_list is not None
    parameter_names = parameters_list.findall("./list_item/paragraph/literal_strong")

    assert len(parameter_names) == len(BASE_CLIENT_PARAMS) + 1
    param_names = tuple(p.text for p in parameter_names)
    assert param_names == ("priority",) + BASE_CLIENT_PARAMS


def test_copy_params_can_render_before_content(sphinx_runner):
    etree = sphinx_runner.to_etree(
        """\
        .. py:function:: build_client(**kwargs, priority: int = 0)

            .. sdk-sphinx-copy-params:: globus_sdk.BaseClient

                <YIELD>
                :param priority: How cool this client will be
        """,
    )

    assert etree.tag == "document"

    parameters_field = etree.find("./desc/desc_content/field_list/field")
    assert parameters_field is not None
    assert parameters_field.find("field_name").text == "Parameters"

    parameters_list = parameters_field.find("./field_body/bullet_list")
    assert parameters_list is not None
    parameter_names = parameters_list.findall("./list_item/paragraph/literal_strong")

    assert len(parameter_names) == len(BASE_CLIENT_PARAMS) + 1
    param_names = tuple(p.text for p in parameter_names)
    assert param_names == BASE_CLIENT_PARAMS + ("priority",)


def test_copy_params_can_render_in_the_middle_of_content(sphinx_runner):
    etree = sphinx_runner.to_etree(
        """\
        .. py:function:: build_client(awesomeness: float, **kwargs, priority: int = 0)

            .. sdk-sphinx-copy-params:: globus_sdk.BaseClient

                :param awesomeness: The awesomeness quotient
                <YIELD>
                :param priority: How cool this client will be
        """,
    )

    assert etree.tag == "document"

    parameters_field = etree.find("./desc/desc_content/field_list/field")
    assert parameters_field is not None
    assert parameters_field.find("field_name").text == "Parameters"

    parameters_list = parameters_field.find("./field_body/bullet_list")
    assert parameters_list is not None
    parameter_names = parameters_list.findall("./list_item/paragraph/literal_strong")

    assert len(parameter_names) == len(BASE_CLIENT_PARAMS) + 2
    param_names = tuple(p.text for p in parameter_names)
    assert param_names == ("awesomeness",) + BASE_CLIENT_PARAMS + ("priority",)