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 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.1.0" # this is read from setup.py
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 pkgutil.iter_modules(self.obj.__path__, f"{self.fullname}."):
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(p.annotation, globalns, localns, mod, self.fullname) # type: ignore
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, ast.AnnAssign) and isinstance(a.target, ast.Name) and a.simple:
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
- code = compile(type_checking_sections(module), "<string>", "exec")
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
- return safe_eval_type(t, {mod: val, **globalns}, localns, module, fullname)
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
- elif type == "versionadded":
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 respects a package's `__all__` attribute if specified.
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
- mod_all = getattr(module, "__all__", None)
259
- # don't traverse path items we've seen before
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.1.0
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=o2yQAgRXRnoA-iHww7ZhtA96vfVJBR_6aP6QpHZBj0E,20792
2
- pdoc/__main__.py,sha256=YITnpb8Z3umr9R9ON8pM67VCn23tAkH0fVqD_V_NLQ8,8383
3
- pdoc/_compat.py,sha256=WY9q6C8oebb8tLQr7irndml5Wbc8vZwC8Y0nzY0Oumk,3343
4
- pdoc/doc.py,sha256=bEMXh43Ow4CPPVUS9G_OyyWq4syflEV01dK5l3RMzTo,46426
5
- pdoc/doc_ast.py,sha256=mNzq0REOh77zQgL2G8KEupHpWE36ECq-x5rEN51lp7Y,11202
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=NMIBtmoeEnDgDuw7rCKou2ARSIWO20SOaFwSzQuM5As,7474
8
- pdoc/docstrings.py,sha256=VMBMacrijV8iC6149QOGtq6rzDk9sqHghdWb657TcWw,14893
9
- pdoc/extract.py,sha256=paF8U6rdInUt3P1We3xTvw-O_gJJaLoxbPRET1aY_pM,12771
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=J8RnV-QRFQf4rznrP2NwbUhOWG2FwD7IKJNCtttoVf8,7031
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=tm7tcaXaSIUUPpUsikOHMYo8_2QyUMzxWVZbMPx8sFk,13044
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.1.0.dist-info/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
51
- pdoc-14.1.0.dist-info/METADATA,sha256=K50roH2PkOs8yl5TfAdlEbn8l-w9gg6bisaxo2I5hy0,7440
52
- pdoc-14.1.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
53
- pdoc-14.1.0.dist-info/entry_points.txt,sha256=-bK-S1ZvmqCWqi1hGnsl5nayWkzXB1BEs-Cynh5QZaI,43
54
- pdoc-14.1.0.dist-info/top_level.txt,sha256=rg5eIToBHzwTfZZi1E7NVHgie5joQuSuU1rWV0qKS9k,5
55
- pdoc-14.1.0.dist-info/RECORD,,
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