pdoc 14.1.0__py3-none-any.whl → 14.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pdoc/__init__.py +1 -1
- pdoc/__main__.py +1 -1
- pdoc/_compat.py +21 -0
- pdoc/doc.py +43 -11
- pdoc/doc_ast.py +8 -1
- pdoc/doc_types.py +30 -3
- pdoc/docstrings.py +4 -2
- pdoc/extract.py +61 -25
- pdoc/search.py +5 -0
- pdoc/templates/default/module.html.jinja2 +1 -0
- {pdoc-14.1.0.dist-info → pdoc-14.2.0.dist-info}/METADATA +2 -2
- {pdoc-14.1.0.dist-info → pdoc-14.2.0.dist-info}/RECORD +16 -16
- {pdoc-14.1.0.dist-info → pdoc-14.2.0.dist-info}/LICENSE +0 -0
- {pdoc-14.1.0.dist-info → pdoc-14.2.0.dist-info}/WHEEL +0 -0
- {pdoc-14.1.0.dist-info → pdoc-14.2.0.dist-info}/entry_points.txt +0 -0
- {pdoc-14.1.0.dist-info → pdoc-14.2.0.dist-info}/top_level.txt +0 -0
pdoc/__init__.py
CHANGED
@@ -462,7 +462,7 @@ You can find an example in [`examples/library-usage`](https://github.com/mitmpro
|
|
462
462
|
from __future__ import annotations
|
463
463
|
|
464
464
|
__docformat__ = "markdown" # explicitly disable rST processing in the examples above.
|
465
|
-
__version__ = "14.
|
465
|
+
__version__ = "14.2.0" # this is read from setup.py
|
466
466
|
|
467
467
|
from pathlib import Path
|
468
468
|
from typing import overload
|
pdoc/__main__.py
CHANGED
@@ -112,7 +112,7 @@ renderopts.add_argument(
|
|
112
112
|
"--search",
|
113
113
|
action=BooleanOptionalAction,
|
114
114
|
default=True,
|
115
|
-
help="Enable search functionality.",
|
115
|
+
help="Enable search functionality if multiple modules are documented.",
|
116
116
|
)
|
117
117
|
renderopts.add_argument(
|
118
118
|
"--show-source",
|
pdoc/_compat.py
CHANGED
@@ -16,6 +16,24 @@ else: # pragma: no cover
|
|
16
16
|
def ast_unparse(t): # type: ignore
|
17
17
|
return _unparse(t).strip("\t\n \"'")
|
18
18
|
|
19
|
+
if sys.version_info >= (3, 12):
|
20
|
+
from ast import TypeAlias as ast_TypeAlias
|
21
|
+
else: # pragma: no cover
|
22
|
+
class ast_TypeAlias:
|
23
|
+
pass
|
24
|
+
|
25
|
+
if sys.version_info >= (3, 12):
|
26
|
+
from typing import TypeAliasType
|
27
|
+
else: # pragma: no cover
|
28
|
+
class TypeAliasType:
|
29
|
+
"""Placeholder class for TypeAliasType"""
|
30
|
+
|
31
|
+
if sys.version_info >= (3, 10):
|
32
|
+
from typing import TypeAlias
|
33
|
+
else: # pragma: no cover
|
34
|
+
class TypeAlias:
|
35
|
+
pass
|
36
|
+
|
19
37
|
if sys.version_info >= (3, 9):
|
20
38
|
from types import GenericAlias
|
21
39
|
else: # pragma: no cover
|
@@ -108,6 +126,9 @@ else: # pragma: no cover
|
|
108
126
|
__all__ = [
|
109
127
|
"cache",
|
110
128
|
"ast_unparse",
|
129
|
+
"ast_TypeAlias",
|
130
|
+
"TypeAliasType",
|
131
|
+
"TypeAlias",
|
111
132
|
"GenericAlias",
|
112
133
|
"UnionType",
|
113
134
|
"removesuffix",
|
pdoc/doc.py
CHANGED
@@ -28,7 +28,6 @@ from functools import wraps
|
|
28
28
|
import inspect
|
29
29
|
import os
|
30
30
|
from pathlib import Path
|
31
|
-
import pkgutil
|
32
31
|
import re
|
33
32
|
import sys
|
34
33
|
import textwrap
|
@@ -45,15 +44,16 @@ import warnings
|
|
45
44
|
from pdoc import doc_ast
|
46
45
|
from pdoc import doc_pyi
|
47
46
|
from pdoc import extract
|
47
|
+
from pdoc._compat import TypeAlias
|
48
|
+
from pdoc._compat import TypeAliasType
|
49
|
+
from pdoc._compat import cache
|
50
|
+
from pdoc._compat import formatannotation
|
48
51
|
from pdoc.doc_types import GenericAlias
|
49
52
|
from pdoc.doc_types import NonUserDefinedCallables
|
50
53
|
from pdoc.doc_types import empty
|
51
54
|
from pdoc.doc_types import resolve_annotations
|
52
55
|
from pdoc.doc_types import safe_eval_type
|
53
56
|
|
54
|
-
from ._compat import cache
|
55
|
-
from ._compat import formatannotation
|
56
|
-
|
57
57
|
|
58
58
|
def _include_fullname_in_traceback(f):
|
59
59
|
"""
|
@@ -454,9 +454,6 @@ class Module(Namespace[types.ModuleType]):
|
|
454
454
|
@cached_property
|
455
455
|
def submodules(self) -> list[Module]:
|
456
456
|
"""A list of all (direct) submodules."""
|
457
|
-
if not self.is_package:
|
458
|
-
return []
|
459
|
-
|
460
457
|
include: Callable[[str], bool]
|
461
458
|
mod_all = _safe_getattr(self.obj, "__all__", False)
|
462
459
|
if mod_all is not False:
|
@@ -471,9 +468,8 @@ class Module(Namespace[types.ModuleType]):
|
|
471
468
|
# (think of OS-specific modules, e.g. _linux.py failing to import on Windows).
|
472
469
|
return not name.startswith("_")
|
473
470
|
|
474
|
-
submodules = []
|
475
|
-
for mod in
|
476
|
-
_, _, mod_name = mod.name.rpartition(".")
|
471
|
+
submodules: list[Module] = []
|
472
|
+
for mod_name, mod in extract.iter_modules2(self.obj).items():
|
477
473
|
if not include(mod_name):
|
478
474
|
continue
|
479
475
|
try:
|
@@ -1006,7 +1002,9 @@ class Function(Doc[types.FunctionType]):
|
|
1006
1002
|
)
|
1007
1003
|
)
|
1008
1004
|
for p in sig.parameters.values():
|
1009
|
-
p._annotation = safe_eval_type(
|
1005
|
+
p._annotation = safe_eval_type( # type: ignore
|
1006
|
+
p.annotation, globalns, localns, mod, self.fullname
|
1007
|
+
)
|
1010
1008
|
return sig
|
1011
1009
|
|
1012
1010
|
@cached_property
|
@@ -1092,6 +1090,11 @@ class Variable(Doc[None]):
|
|
1092
1090
|
else:
|
1093
1091
|
return False
|
1094
1092
|
|
1093
|
+
@cached_property
|
1094
|
+
def is_type_alias_type(self) -> bool:
|
1095
|
+
"""`True` if the variable is a `typing.TypeAliasType`, `False` otherwise."""
|
1096
|
+
return isinstance(self.default_value, TypeAliasType)
|
1097
|
+
|
1095
1098
|
@cached_property
|
1096
1099
|
def is_enum_member(self) -> bool:
|
1097
1100
|
"""`True` if the variable is an enum member, `False` otherwise."""
|
@@ -1105,6 +1108,27 @@ class Variable(Doc[None]):
|
|
1105
1108
|
"""The variable's default value as a pretty-printed str."""
|
1106
1109
|
if self.default_value is empty:
|
1107
1110
|
return ""
|
1111
|
+
if isinstance(self.default_value, TypeAliasType):
|
1112
|
+
return formatannotation(self.default_value.__value__)
|
1113
|
+
elif self.annotation == TypeAlias:
|
1114
|
+
return formatannotation(self.default_value)
|
1115
|
+
|
1116
|
+
# This is not perfect, but a solid attempt at preventing accidental leakage of secrets.
|
1117
|
+
# If you have input on how to improve the heuristic, please send a pull request!
|
1118
|
+
value_taken_from_env_var = (
|
1119
|
+
isinstance(self.default_value, str)
|
1120
|
+
and len(self.default_value) >= 8
|
1121
|
+
and self.default_value in _environ_lookup()
|
1122
|
+
)
|
1123
|
+
if value_taken_from_env_var and not os.environ.get("PDOC_DISPLAY_ENV_VARS", ""):
|
1124
|
+
env_var = "$" + _environ_lookup()[self.default_value]
|
1125
|
+
warnings.warn(
|
1126
|
+
f"The default value of {self.fullname} matches the {env_var} environment variable. "
|
1127
|
+
f"To prevent accidental leakage of secrets, the default value is not displayed. "
|
1128
|
+
f"Disable this behavior by setting PDOC_DISPLAY_ENV_VARS=1 as an environment variable.",
|
1129
|
+
RuntimeWarning,
|
1130
|
+
)
|
1131
|
+
return env_var
|
1108
1132
|
|
1109
1133
|
try:
|
1110
1134
|
pretty = repr(self.default_value)
|
@@ -1124,6 +1148,14 @@ class Variable(Doc[None]):
|
|
1124
1148
|
return ""
|
1125
1149
|
|
1126
1150
|
|
1151
|
+
@cache
|
1152
|
+
def _environ_lookup():
|
1153
|
+
"""
|
1154
|
+
A reverse lookup of os.environ. This is a cached function so that it is evaluated lazily.
|
1155
|
+
"""
|
1156
|
+
return {value: key for key, value in os.environ.items()}
|
1157
|
+
|
1158
|
+
|
1127
1159
|
class _PrettySignature(inspect.Signature):
|
1128
1160
|
"""
|
1129
1161
|
A subclass of `inspect.Signature` that pads __str__ over several lines
|
pdoc/doc_ast.py
CHANGED
@@ -21,6 +21,7 @@ import warnings
|
|
21
21
|
|
22
22
|
import pdoc
|
23
23
|
|
24
|
+
from ._compat import ast_TypeAlias
|
24
25
|
from ._compat import ast_unparse
|
25
26
|
from ._compat import cache
|
26
27
|
|
@@ -115,7 +116,11 @@ def _walk_tree(
|
|
115
116
|
func_docstrings = {}
|
116
117
|
annotations = {}
|
117
118
|
for a, b in _pairwise_longest(_nodes(tree)):
|
118
|
-
if isinstance(a,
|
119
|
+
if isinstance(a, ast_TypeAlias):
|
120
|
+
name = a.name.id
|
121
|
+
elif (
|
122
|
+
isinstance(a, ast.AnnAssign) and isinstance(a.target, ast.Name) and a.simple
|
123
|
+
):
|
119
124
|
name = a.target.id
|
120
125
|
annotations[name] = unparse(a.annotation)
|
121
126
|
elif (
|
@@ -183,6 +188,8 @@ def sort_by_source(
|
|
183
188
|
name = a.target.id
|
184
189
|
elif isinstance(a, (ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef)):
|
185
190
|
name = a.name
|
191
|
+
elif isinstance(a, ast_TypeAlias):
|
192
|
+
name = a.name.id
|
186
193
|
else:
|
187
194
|
continue
|
188
195
|
|
pdoc/doc_types.py
CHANGED
@@ -124,9 +124,9 @@ def safe_eval_type(
|
|
124
124
|
|
125
125
|
# Simple _eval_type has failed. We now execute all TYPE_CHECKING sections in the module and try again.
|
126
126
|
if module:
|
127
|
+
assert module.__dict__ is globalns
|
127
128
|
try:
|
128
|
-
|
129
|
-
eval(code, globalns, globalns)
|
129
|
+
_eval_type_checking_sections(module, set())
|
130
130
|
except Exception as e:
|
131
131
|
warnings.warn(
|
132
132
|
f"Failed to run TYPE_CHECKING code while parsing {t} type annotation for {fullname}: {e}"
|
@@ -148,7 +148,34 @@ def safe_eval_type(
|
|
148
148
|
f"Error parsing type annotation {t} for {fullname}. Import of {mod} failed: {err}"
|
149
149
|
)
|
150
150
|
return t
|
151
|
-
|
151
|
+
else:
|
152
|
+
globalns[mod] = val
|
153
|
+
return safe_eval_type(t, globalns, localns, module, fullname)
|
154
|
+
|
155
|
+
|
156
|
+
def _eval_type_checking_sections(module: types.ModuleType, seen: set) -> None:
|
157
|
+
"""
|
158
|
+
Evaluate all TYPE_CHECKING sections within a module.
|
159
|
+
|
160
|
+
The added complication here is that TYPE_CHECKING sections may import members from other modules' TYPE_CHECKING
|
161
|
+
sections. So we try to recursively execute those other modules' TYPE_CHECKING sections as well.
|
162
|
+
See https://github.com/mitmproxy/pdoc/issues/648 for a real world example.
|
163
|
+
"""
|
164
|
+
if module.__name__ in seen:
|
165
|
+
raise RecursionError(f"Recursion error when importing {module.__name__}.")
|
166
|
+
seen.add(module.__name__)
|
167
|
+
|
168
|
+
code = compile(type_checking_sections(module), "<string>", "exec")
|
169
|
+
while True:
|
170
|
+
try:
|
171
|
+
eval(code, module.__dict__, module.__dict__)
|
172
|
+
except ImportError as e:
|
173
|
+
if e.name is not None and (mod := sys.modules.get(e.name, None)):
|
174
|
+
_eval_type_checking_sections(mod, seen)
|
175
|
+
else:
|
176
|
+
raise
|
177
|
+
else:
|
178
|
+
break
|
152
179
|
|
153
180
|
|
154
181
|
def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
|
pdoc/docstrings.py
CHANGED
@@ -393,7 +393,9 @@ def _rst_admonitions(contents: str, source_file: Path | None) -> str:
|
|
393
393
|
f"{indent(contents, ind)}\n"
|
394
394
|
f"{ind}</div>\n"
|
395
395
|
)
|
396
|
-
|
396
|
+
if type == "code-block":
|
397
|
+
return f"{ind}```{val}\n{contents}\n```\n"
|
398
|
+
if type == "versionadded":
|
397
399
|
text = f"New in version {val}"
|
398
400
|
elif type == "versionchanged":
|
399
401
|
text = f"Changed in version {val}"
|
@@ -409,7 +411,7 @@ def _rst_admonitions(contents: str, source_file: Path | None) -> str:
|
|
409
411
|
|
410
412
|
return text
|
411
413
|
|
412
|
-
admonition = "note|warning|danger|versionadded|versionchanged|deprecated|seealso|math|include"
|
414
|
+
admonition = "note|warning|danger|versionadded|versionchanged|deprecated|seealso|math|include|code-block"
|
413
415
|
return re.sub(
|
414
416
|
rf"""
|
415
417
|
^(?P<indent>[ ]*)\.\.[ ]+(?P<type>{admonition})::(?P<val>.*)
|
pdoc/extract.py
CHANGED
@@ -204,9 +204,7 @@ def mock_some_common_side_effects():
|
|
204
204
|
"os.startfile", new=_noop, create=True
|
205
205
|
), patch("sys.stdout", new=io.StringIO()), patch(
|
206
206
|
"sys.stderr", new=io.StringIO()
|
207
|
-
), patch(
|
208
|
-
"sys.stdin", new=io.StringIO()
|
209
|
-
):
|
207
|
+
), patch("sys.stdin", new=io.StringIO()):
|
210
208
|
yield
|
211
209
|
|
212
210
|
|
@@ -229,22 +227,71 @@ but we don't want to catch a user's KeyboardInterrupt.
|
|
229
227
|
"""
|
230
228
|
|
231
229
|
|
230
|
+
def iter_modules2(module: types.ModuleType) -> dict[str, pkgutil.ModuleInfo]:
|
231
|
+
"""
|
232
|
+
Returns all direct child modules of a given module.
|
233
|
+
This function is similar to `pkgutil.iter_modules`, but
|
234
|
+
|
235
|
+
1. Respects a package's `__all__` attribute if specified.
|
236
|
+
If `__all__` is defined, submodules not listed in `__all__` are excluded.
|
237
|
+
2. It will try to detect submodules that are not findable with iter_modules,
|
238
|
+
but are present in the module object.
|
239
|
+
"""
|
240
|
+
mod_all = getattr(module, "__all__", None)
|
241
|
+
|
242
|
+
submodules = {}
|
243
|
+
|
244
|
+
for submodule in pkgutil.iter_modules(
|
245
|
+
getattr(module, "__path__", []), f"{module.__name__}."
|
246
|
+
):
|
247
|
+
name = submodule.name.rpartition(".")[2]
|
248
|
+
if mod_all is None or name in mod_all:
|
249
|
+
submodules[name] = submodule
|
250
|
+
|
251
|
+
# 2023-12: PyO3 and pybind11 submodules are not detected by pkgutil
|
252
|
+
# This is a hacky workaround to register them.
|
253
|
+
members = dir(module) if mod_all is None else mod_all
|
254
|
+
for name in members:
|
255
|
+
if name in submodules or name == "__main__":
|
256
|
+
continue
|
257
|
+
member = getattr(module, name, None)
|
258
|
+
is_wild_child_module = (
|
259
|
+
isinstance(member, types.ModuleType)
|
260
|
+
# the name is either just "bar", but can also be "foo.bar",
|
261
|
+
# see https://github.com/PyO3/pyo3/issues/759#issuecomment-1811992321
|
262
|
+
and (
|
263
|
+
member.__name__ == f"{module.__name__}.{name}"
|
264
|
+
or (
|
265
|
+
member.__name__ == name
|
266
|
+
and sys.modules.get(member.__name__, None) is not member
|
267
|
+
)
|
268
|
+
)
|
269
|
+
)
|
270
|
+
if is_wild_child_module:
|
271
|
+
# fixup the module name so that the rest of pdoc does not break
|
272
|
+
assert member
|
273
|
+
member.__name__ = f"{module.__name__}.{name}"
|
274
|
+
sys.modules[f"{module.__name__}.{name}"] = member
|
275
|
+
submodules[name] = pkgutil.ModuleInfo(
|
276
|
+
None, # type: ignore
|
277
|
+
name=f"{module.__name__}.{name}",
|
278
|
+
ispkg=True,
|
279
|
+
)
|
280
|
+
|
281
|
+
submodules.pop("__main__", None) # https://github.com/mitmproxy/pdoc/issues/438
|
282
|
+
|
283
|
+
return submodules
|
284
|
+
|
285
|
+
|
232
286
|
def walk_packages2(
|
233
287
|
modules: Iterable[pkgutil.ModuleInfo],
|
234
288
|
) -> Iterator[pkgutil.ModuleInfo]:
|
235
289
|
"""
|
236
290
|
For a given list of modules, recursively yield their names and all their submodules' names.
|
237
291
|
|
238
|
-
This function is similar to `pkgutil.walk_packages`, but
|
239
|
-
If `__all__` is defined, submodules not listed in `__all__` are excluded.
|
292
|
+
This function is similar to `pkgutil.walk_packages`, but based on `iter_modules2`.
|
240
293
|
"""
|
241
|
-
|
242
|
-
# noinspection PyDefaultArgument
|
243
|
-
def seen(p, m={}): # pragma: no cover
|
244
|
-
if p in m:
|
245
|
-
return True
|
246
|
-
m[p] = True
|
247
|
-
|
294
|
+
# the original walk_packages implementation has a recursion check for path, but that does not seem to be needed?
|
248
295
|
for mod in modules:
|
249
296
|
yield mod
|
250
297
|
|
@@ -255,19 +302,8 @@ def walk_packages2(
|
|
255
302
|
warnings.warn(f"Error loading {mod.name}:\n{traceback.format_exc()}")
|
256
303
|
continue
|
257
304
|
|
258
|
-
|
259
|
-
|
260
|
-
path = [p for p in (getattr(module, "__path__", None) or []) if not seen(p)]
|
261
|
-
|
262
|
-
submodules = []
|
263
|
-
for submodule in pkgutil.iter_modules(path, f"{mod.name}."):
|
264
|
-
name = submodule.name.rpartition(".")[2]
|
265
|
-
if name == "__main__":
|
266
|
-
continue # https://github.com/mitmproxy/pdoc/issues/438
|
267
|
-
if mod_all is None or name in mod_all:
|
268
|
-
submodules.append(submodule)
|
269
|
-
|
270
|
-
yield from walk_packages2(submodules)
|
305
|
+
submodules = iter_modules2(module)
|
306
|
+
yield from walk_packages2(submodules.values())
|
271
307
|
|
272
308
|
|
273
309
|
def module_mtime(modulename: str) -> float | None:
|
pdoc/search.py
CHANGED
@@ -5,6 +5,11 @@ and works without any third-party services in a privacy-preserving way. When a u
|
|
5
5
|
search box for the first time, pdoc will fetch the search index (`search.js`) and use that to
|
6
6
|
answer all upcoming queries.
|
7
7
|
|
8
|
+
##### Single-Page Documentation
|
9
|
+
|
10
|
+
If pdoc is documenting a single module only, search functionality will be disabled.
|
11
|
+
The browser's built-in search functionality will provide a better user experience in these cases.
|
12
|
+
|
8
13
|
##### Search Coverage
|
9
14
|
|
10
15
|
The search functionality covers all documented elements and their docstrings.
|
@@ -177,6 +177,7 @@ See https://pdoc.dev/docs/pdoc/render_helpers.html#DefaultMacroExtension for an
|
|
177
177
|
{% endif %}
|
178
178
|
{% enddefaultmacro %}
|
179
179
|
{% defaultmacro variable(var) -%}
|
180
|
+
{%- if var.is_type_alias_type %}<span class="def">type</span> {% endif -%}
|
180
181
|
<span class="name">{{ var.name }}</span>{{ annotation(var) }}{{ default_value(var) }}
|
181
182
|
{% enddefaultmacro %}
|
182
183
|
{% defaultmacro submodule(mod) -%}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pdoc
|
3
|
-
Version: 14.
|
3
|
+
Version: 14.2.0
|
4
4
|
Summary: API Documentation for Python Projects
|
5
5
|
Author-email: Maximilian Hils <pdoc@maximilianhils.com>
|
6
6
|
License: Unlicense
|
@@ -32,7 +32,6 @@ Requires-Dist: astunparse ; python_version < "3.9"
|
|
32
32
|
Provides-Extra: dev
|
33
33
|
Requires-Dist: tox ; extra == 'dev'
|
34
34
|
Requires-Dist: ruff ; extra == 'dev'
|
35
|
-
Requires-Dist: black ; extra == 'dev'
|
36
35
|
Requires-Dist: mypy ; extra == 'dev'
|
37
36
|
Requires-Dist: types-pygments ; extra == 'dev'
|
38
37
|
Requires-Dist: pytest ; extra == 'dev'
|
@@ -40,6 +39,7 @@ Requires-Dist: pytest-cov ; extra == 'dev'
|
|
40
39
|
Requires-Dist: pytest-timeout ; extra == 'dev'
|
41
40
|
Requires-Dist: hypothesis ; extra == 'dev'
|
42
41
|
Requires-Dist: pygments (>=2.14.0) ; extra == 'dev'
|
42
|
+
Requires-Dist: pdoc-pyo3-sample-library (==1.0.11) ; extra == 'dev'
|
43
43
|
|
44
44
|
<p align="center">
|
45
45
|
<a href="https://pdoc.dev/"><img alt="pdoc" src="https://pdoc.dev/logo.svg" width="200" height="100" /></a>
|
@@ -1,16 +1,16 @@
|
|
1
|
-
pdoc/__init__.py,sha256=
|
2
|
-
pdoc/__main__.py,sha256=
|
3
|
-
pdoc/_compat.py,sha256=
|
4
|
-
pdoc/doc.py,sha256=
|
5
|
-
pdoc/doc_ast.py,sha256=
|
1
|
+
pdoc/__init__.py,sha256=YOPJ3nMnuABKGuQUQ1YNWhLXV8ANjZ917wU3jzn3ddI,20792
|
2
|
+
pdoc/__main__.py,sha256=79uLvuQ8eHvU_tzXy4akpKMdDF2DN0xg5VPgv4pmyGo,8418
|
3
|
+
pdoc/_compat.py,sha256=wKGKTxTTxfNjEcKPwvtuvNeOyiozPfL52h8PArKky-0,3843
|
4
|
+
pdoc/doc.py,sha256=4FtcX8Pa3YJpY5-dobUcf7oAFypmjD232XSc6UEJeIg,47993
|
5
|
+
pdoc/doc_ast.py,sha256=LBYx8NuXsoxqD_MsmDsI9ShMvOK0tnCDvu0Hv1hBies,11405
|
6
6
|
pdoc/doc_pyi.py,sha256=u2PhgUEx46SUr3wZrlhkUVcs5mbzxuAizKYQevWRJys,3906
|
7
|
-
pdoc/doc_types.py,sha256=
|
8
|
-
pdoc/docstrings.py,sha256=
|
9
|
-
pdoc/extract.py,sha256=
|
7
|
+
pdoc/doc_types.py,sha256=P6HwAIKotcE7iKJtKpZPvbok7LpeqYEtrgUcknuMcek,8467
|
8
|
+
pdoc/docstrings.py,sha256=F_knLP93uD5RiHUN1Ha7mGTxzadiG1880-Go0dXmdh0,14990
|
9
|
+
pdoc/extract.py,sha256=G8mGJRHzhbckXGNuYO-hQUL51HItNkJ7ehK5g7By3o8,14277
|
10
10
|
pdoc/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
11
|
pdoc/render.py,sha256=-gbybpZQUJICYABZr4HJLBsX43vsMOl1Vo1FIshz9pU,7054
|
12
12
|
pdoc/render_helpers.py,sha256=clTbaHYpyK2rMvjhUQpdO0bqrjjcAgFkimuJMZ-uCXc,18708
|
13
|
-
pdoc/search.py,sha256=
|
13
|
+
pdoc/search.py,sha256=tlde_X-Z9CTwQCYr_GSiHy8PKSOtjo0GoDORTcPJn-8,7247
|
14
14
|
pdoc/web.py,sha256=ez0lEqwlmpQnkaVfOWglht7e7bvLQXWnJPBp9usgf3k,6895
|
15
15
|
pdoc/markdown2/LICENSE,sha256=BfcOT5Iu-7wDaKcbIta8wkP-pFncOu4yXeBlMfbeYGI,1116
|
16
16
|
pdoc/markdown2/README.md,sha256=-b2NGwLPzTBnaCGPSqRCzHxSrqArlXxGG5w0c6pOqFk,200
|
@@ -30,7 +30,7 @@ pdoc/templates/theme.css,sha256=yjnbtPVmqaifTINsA5sK2a3e1aoFO0UlOMgOSKUgLvI,397
|
|
30
30
|
pdoc/templates/default/error.html.jinja2,sha256=RqH14o6ZV79uBO14gKSjwObXFKKczkcLTMe1orurEJk,970
|
31
31
|
pdoc/templates/default/frame.html.jinja2,sha256=Qp5zlts8Bl-O2f0cxJHH_QdmAkMtJJjNVA0ZU2Mbwl8,2164
|
32
32
|
pdoc/templates/default/index.html.jinja2,sha256=MkzVYMWUuJgscty3jVbDtcEfB1vz-bp3v_sMa5MzevU,2381
|
33
|
-
pdoc/templates/default/module.html.jinja2,sha256=
|
33
|
+
pdoc/templates/default/module.html.jinja2,sha256=KuBvhTefUteJ1unUA5DVedbjTTqkfA86nU4s_CF23aA,13123
|
34
34
|
pdoc/templates/deprecated/README.md,sha256=8HPj4Bu6EPAdHbH5CQVYgcD580zpkhqbwiSFoLAVB1Q,339
|
35
35
|
pdoc/templates/deprecated/bootstrap-reboot.min.css,sha256=-u1DTWljwtvjAc8X-ihFhIixKaPcs4w_uZ_CYvvP9-o,207
|
36
36
|
pdoc/templates/deprecated/box-arrow-in-left.svg,sha256=-u1DTWljwtvjAc8X-ihFhIixKaPcs4w_uZ_CYvvP9-o,207
|
@@ -47,9 +47,9 @@ pdoc/templates/resources/info-circle-fill.svg,sha256=kO3AMXfWtacpJPzC8Pvihf46OZd
|
|
47
47
|
pdoc/templates/resources/lightning-fill.svg,sha256=XEyCtbgxeAlwCezdsf7N0NFd5aMjwqyJJDpaFbYYTFA,265
|
48
48
|
pdoc/templates/resources/navtoggle.svg,sha256=WVR0BJIucX0MgwwEawmfX0qYD1i_dSbUhoGnqPef3jw,187
|
49
49
|
pdoc/templates/resources/pdoc-logo.svg,sha256=w5OsMmytDaA2Fr9CobeQQFxBNx4-wFFHtLvkORj0gjk,6989
|
50
|
-
pdoc-14.
|
51
|
-
pdoc-14.
|
52
|
-
pdoc-14.
|
53
|
-
pdoc-14.
|
54
|
-
pdoc-14.
|
55
|
-
pdoc-14.
|
50
|
+
pdoc-14.2.0.dist-info/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
|
51
|
+
pdoc-14.2.0.dist-info/METADATA,sha256=J-DPKCEO0J898f_48qs9pspc_uoJvZTVoZDcYCrs5DU,7470
|
52
|
+
pdoc-14.2.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
53
|
+
pdoc-14.2.0.dist-info/entry_points.txt,sha256=-bK-S1ZvmqCWqi1hGnsl5nayWkzXB1BEs-Cynh5QZaI,43
|
54
|
+
pdoc-14.2.0.dist-info/top_level.txt,sha256=rg5eIToBHzwTfZZi1E7NVHgie5joQuSuU1rWV0qKS9k,5
|
55
|
+
pdoc-14.2.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|