pdoc 15.0.4__py3-none-any.whl → 16.0.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 +20 -1
- pdoc/_compat.py +1 -26
- pdoc/_pydantic.py +54 -0
- pdoc/doc.py +23 -12
- pdoc/doc_types.py +17 -33
- pdoc/docstrings.py +3 -1
- pdoc/render_helpers.py +6 -5
- pdoc/templates/content.css +3 -3
- pdoc/templates/default/index.html.jinja2 +1 -1
- pdoc/templates/resources/pdoc-logo.svg +1 -1
- {pdoc-15.0.4.dist-info → pdoc-16.0.0.dist-info}/METADATA +7 -6
- {pdoc-15.0.4.dist-info → pdoc-16.0.0.dist-info}/RECORD +16 -18
- pdoc/markdown2/LICENSE +0 -23
- pdoc/markdown2/README.md +0 -2
- pdoc/markdown2/__init__.py +0 -4029
- {pdoc-15.0.4.dist-info → pdoc-16.0.0.dist-info}/LICENSE +0 -0
- {pdoc-15.0.4.dist-info → pdoc-16.0.0.dist-info}/WHEEL +0 -0
- {pdoc-15.0.4.dist-info → pdoc-16.0.0.dist-info}/entry_points.txt +0 -0
- {pdoc-15.0.4.dist-info → pdoc-16.0.0.dist-info}/top_level.txt +0 -0
pdoc/__init__.py
CHANGED
|
@@ -260,6 +260,25 @@ pdoc only interprets a subset of the reStructuredText specification.
|
|
|
260
260
|
Adding additional syntax elements is usually easy. If you feel that pdoc doesn't parse a docstring element properly,
|
|
261
261
|
please amend `pdoc.docstrings` and send us a pull request!
|
|
262
262
|
|
|
263
|
+
## ...document Pydantic models?
|
|
264
|
+
|
|
265
|
+
For [Pydantic models](https://docs.pydantic.dev/latest/concepts/models/), pdoc
|
|
266
|
+
will extract [field](https://docs.pydantic.dev/latest/concepts/fields/)
|
|
267
|
+
descriptions and treat them just like [documented
|
|
268
|
+
variables](#document-variables). For example, the following two Pydantic models
|
|
269
|
+
would have identical pdoc-rendered documentation:
|
|
270
|
+
|
|
271
|
+
```python
|
|
272
|
+
from pydantic import BaseModel, Field
|
|
273
|
+
|
|
274
|
+
class Foo(BaseModel):
|
|
275
|
+
a: int = Field(description="Docs for field a.")
|
|
276
|
+
|
|
277
|
+
class OtherFoo(BaseModel):
|
|
278
|
+
a: int
|
|
279
|
+
"""Docs for field a."""
|
|
280
|
+
|
|
281
|
+
```
|
|
263
282
|
|
|
264
283
|
## ...render math formulas?
|
|
265
284
|
|
|
@@ -481,7 +500,7 @@ You can find an example in [`examples/library-usage`](https://github.com/mitmpro
|
|
|
481
500
|
from __future__ import annotations
|
|
482
501
|
|
|
483
502
|
__docformat__ = "markdown" # explicitly disable rST processing in the examples above.
|
|
484
|
-
__version__ = "
|
|
503
|
+
__version__ = "16.0.0" # this is read from setup.py
|
|
485
504
|
|
|
486
505
|
from pathlib import Path
|
|
487
506
|
from typing import overload
|
pdoc/_compat.py
CHANGED
|
@@ -13,20 +13,7 @@ else: # pragma: no cover
|
|
|
13
13
|
class TypeAliasType:
|
|
14
14
|
"""Placeholder class for TypeAliasType"""
|
|
15
15
|
|
|
16
|
-
if sys.version_info
|
|
17
|
-
from typing import TypeAlias
|
|
18
|
-
else: # pragma: no cover
|
|
19
|
-
class TypeAlias:
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
|
-
if sys.version_info >= (3, 10):
|
|
23
|
-
from types import UnionType # type: ignore
|
|
24
|
-
else: # pragma: no cover
|
|
25
|
-
class UnionType:
|
|
26
|
-
pass
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (3, 9) <= sys.version_info < (3, 9, 8) or (3, 10) <= sys.version_info < (3, 10, 1): # pragma: no cover
|
|
16
|
+
if (3, 10) <= sys.version_info < (3, 10, 1): # pragma: no cover
|
|
30
17
|
import inspect
|
|
31
18
|
import types
|
|
32
19
|
|
|
@@ -40,21 +27,9 @@ if (3, 9) <= sys.version_info < (3, 9, 8) or (3, 10) <= sys.version_info < (3, 1
|
|
|
40
27
|
else:
|
|
41
28
|
from inspect import formatannotation
|
|
42
29
|
|
|
43
|
-
if sys.version_info >= (3, 10):
|
|
44
|
-
from typing import is_typeddict
|
|
45
|
-
else: # pragma: no cover
|
|
46
|
-
def is_typeddict(tp):
|
|
47
|
-
try:
|
|
48
|
-
return tp.__orig_bases__[-1].__name__ == "TypedDict"
|
|
49
|
-
except Exception:
|
|
50
|
-
return False
|
|
51
|
-
|
|
52
30
|
|
|
53
31
|
__all__ = [
|
|
54
32
|
"ast_TypeAlias",
|
|
55
33
|
"TypeAliasType",
|
|
56
|
-
"TypeAlias",
|
|
57
|
-
"UnionType",
|
|
58
34
|
"formatannotation",
|
|
59
|
-
"is_typeddict",
|
|
60
35
|
]
|
pdoc/_pydantic.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Work with Pydantic models."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import types
|
|
6
|
+
from typing import Any
|
|
7
|
+
from typing import TypeAlias
|
|
8
|
+
from typing import TypeGuard
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
import pydantic
|
|
12
|
+
except ImportError: # pragma: no cover
|
|
13
|
+
pydantic = None # type: ignore
|
|
14
|
+
|
|
15
|
+
ClassOrModule: TypeAlias = type | types.ModuleType
|
|
16
|
+
"""Type alias for the type of `Namespace.obj`."""
|
|
17
|
+
|
|
18
|
+
IGNORED_FIELDS: frozenset[str] = frozenset(
|
|
19
|
+
(["__fields__"] + list(pydantic.BaseModel.__dict__.keys()))
|
|
20
|
+
if pydantic is not None
|
|
21
|
+
else []
|
|
22
|
+
)
|
|
23
|
+
"""Fields to ignore when generating docs, e.g. those that emit deprecation
|
|
24
|
+
warnings or that are not relevant to users of BaseModel-derived classes."""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def is_pydantic_model(obj: ClassOrModule) -> TypeGuard[pydantic.BaseModel]:
|
|
28
|
+
"""Returns whether an object is a Pydantic model."""
|
|
29
|
+
if pydantic is None: # pragma: no cover
|
|
30
|
+
# classes that subclass pydantic.BaseModel can only be instantiated if pydantic is importable
|
|
31
|
+
# => if we cannot import pydantic, the passed object cannot be a subclass of BaseModel.
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
return isinstance(obj, type) and issubclass(obj, pydantic.BaseModel)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def default_value(parent: ClassOrModule, name: str, obj: Any) -> Any:
|
|
38
|
+
"""Determine the default value of obj.
|
|
39
|
+
|
|
40
|
+
For pydantic BaseModels, extract the default value from field metadata.
|
|
41
|
+
For all other objects, return `obj` as-is.
|
|
42
|
+
"""
|
|
43
|
+
if is_pydantic_model(parent):
|
|
44
|
+
pydantic_fields = parent.__pydantic_fields__
|
|
45
|
+
return pydantic_fields[name].default if name in pydantic_fields else obj
|
|
46
|
+
|
|
47
|
+
return obj
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def get_field_docstring(parent: ClassOrModule, field_name: str) -> str | None:
|
|
51
|
+
if is_pydantic_model(parent):
|
|
52
|
+
if field := parent.__pydantic_fields__.get(field_name, None):
|
|
53
|
+
return field.description
|
|
54
|
+
return None
|
pdoc/doc.py
CHANGED
|
@@ -38,19 +38,20 @@ import types
|
|
|
38
38
|
from typing import Any
|
|
39
39
|
from typing import ClassVar
|
|
40
40
|
from typing import Generic
|
|
41
|
+
from typing import TypeAlias
|
|
41
42
|
from typing import TypedDict
|
|
42
43
|
from typing import TypeVar
|
|
43
|
-
from typing import
|
|
44
|
+
from typing import cast
|
|
44
45
|
from typing import get_origin
|
|
46
|
+
from typing import is_typeddict
|
|
45
47
|
import warnings
|
|
46
48
|
|
|
49
|
+
from pdoc import _pydantic
|
|
47
50
|
from pdoc import doc_ast
|
|
48
51
|
from pdoc import doc_pyi
|
|
49
52
|
from pdoc import extract
|
|
50
|
-
from pdoc._compat import TypeAlias
|
|
51
53
|
from pdoc._compat import TypeAliasType
|
|
52
54
|
from pdoc._compat import formatannotation
|
|
53
|
-
from pdoc._compat import is_typeddict
|
|
54
55
|
from pdoc.doc_types import GenericAlias
|
|
55
56
|
from pdoc.doc_types import NonUserDefinedCallables
|
|
56
57
|
from pdoc.doc_types import empty
|
|
@@ -210,7 +211,10 @@ class Doc(Generic[T]):
|
|
|
210
211
|
)
|
|
211
212
|
|
|
212
213
|
|
|
213
|
-
|
|
214
|
+
U = TypeVar("U", bound=types.ModuleType | type)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class Namespace(Doc[U], metaclass=ABCMeta):
|
|
214
218
|
"""
|
|
215
219
|
A documentation object that can have children. In other words, either a module or a class.
|
|
216
220
|
"""
|
|
@@ -319,13 +323,17 @@ class Namespace(Doc[T], metaclass=ABCMeta):
|
|
|
319
323
|
qualname,
|
|
320
324
|
docstring="",
|
|
321
325
|
annotation=self._var_annotations.get(name, empty),
|
|
322
|
-
default_value=obj,
|
|
326
|
+
default_value=_pydantic.default_value(self.obj, name, obj),
|
|
323
327
|
taken_from=taken_from,
|
|
324
328
|
)
|
|
325
|
-
|
|
329
|
+
|
|
330
|
+
if _doc := _pydantic.get_field_docstring(cast(type, self.obj), name):
|
|
331
|
+
doc.docstring = _doc
|
|
332
|
+
elif self._var_docstrings.get(name):
|
|
326
333
|
doc.docstring = self._var_docstrings[name]
|
|
327
|
-
|
|
334
|
+
elif self._func_docstrings.get(name) and not doc.docstring:
|
|
328
335
|
doc.docstring = self._func_docstrings[name]
|
|
336
|
+
|
|
329
337
|
members[doc.name] = doc
|
|
330
338
|
|
|
331
339
|
if isinstance(self, Module):
|
|
@@ -775,6 +783,12 @@ class Class(Namespace[type]):
|
|
|
775
783
|
for cls in self._bases:
|
|
776
784
|
sorted, unsorted = doc_ast.sort_by_source(cls, sorted, unsorted)
|
|
777
785
|
sorted.update(unsorted)
|
|
786
|
+
|
|
787
|
+
if _pydantic.is_pydantic_model(self.obj):
|
|
788
|
+
sorted = {
|
|
789
|
+
k: v for k, v in sorted.items() if k not in _pydantic.IGNORED_FIELDS
|
|
790
|
+
}
|
|
791
|
+
|
|
778
792
|
return sorted
|
|
779
793
|
|
|
780
794
|
@cached_property
|
|
@@ -868,10 +882,7 @@ class Class(Namespace[type]):
|
|
|
868
882
|
]
|
|
869
883
|
|
|
870
884
|
|
|
871
|
-
|
|
872
|
-
WrappedFunction = types.FunctionType | staticmethod | classmethod
|
|
873
|
-
else: # pragma: no cover
|
|
874
|
-
WrappedFunction = Union[types.FunctionType, staticmethod, classmethod]
|
|
885
|
+
WrappedFunction = types.FunctionType | staticmethod | classmethod
|
|
875
886
|
|
|
876
887
|
|
|
877
888
|
class Function(Doc[types.FunctionType]):
|
|
@@ -908,7 +919,7 @@ class Function(Doc[types.FunctionType]):
|
|
|
908
919
|
else:
|
|
909
920
|
unwrapped = func
|
|
910
921
|
super().__init__(modulename, qualname, unwrapped, taken_from)
|
|
911
|
-
self.wrapped = func
|
|
922
|
+
self.wrapped = func # type: ignore
|
|
912
923
|
|
|
913
924
|
@cache
|
|
914
925
|
@_include_fullname_in_traceback
|
pdoc/doc_types.py
CHANGED
|
@@ -16,6 +16,7 @@ import types
|
|
|
16
16
|
from types import BuiltinFunctionType
|
|
17
17
|
from types import GenericAlias
|
|
18
18
|
from types import ModuleType
|
|
19
|
+
from types import UnionType
|
|
19
20
|
import typing
|
|
20
21
|
from typing import TYPE_CHECKING
|
|
21
22
|
from typing import Any
|
|
@@ -25,7 +26,6 @@ from typing import get_origin
|
|
|
25
26
|
import warnings
|
|
26
27
|
|
|
27
28
|
from . import extract
|
|
28
|
-
from ._compat import UnionType
|
|
29
29
|
from .doc_ast import type_checking_sections
|
|
30
30
|
|
|
31
31
|
if TYPE_CHECKING:
|
|
@@ -108,19 +108,7 @@ def safe_eval_type(
|
|
|
108
108
|
err = str(e)
|
|
109
109
|
_, mod, _ = err.split("'")
|
|
110
110
|
except Exception as e:
|
|
111
|
-
|
|
112
|
-
py_ver = ".".join(str(x) for x in sys.version_info[:3])
|
|
113
|
-
warnings.warn(
|
|
114
|
-
f"Error parsing type annotation {t} for {fullname}: {e}. "
|
|
115
|
-
f"You are likely attempting to use Python 3.10 syntax (PEP 604 union types) with an older Python "
|
|
116
|
-
f"release. `X | Y`-style type annotations are invalid syntax on Python {py_ver}, which is what your "
|
|
117
|
-
f"pdoc instance is using. `from __future__ import annotations` (PEP 563) postpones evaluation of "
|
|
118
|
-
f"annotations, which is why your program won't crash right away. However, pdoc needs to evaluate your "
|
|
119
|
-
f"type annotations and is unable to do so on Python {py_ver}. To fix this issue, either invoke pdoc "
|
|
120
|
-
f"from Python 3.10+, or switch to `typing.Union[]` syntax."
|
|
121
|
-
)
|
|
122
|
-
else:
|
|
123
|
-
warnings.warn(f"Error parsing type annotation {t} for {fullname}: {e}")
|
|
111
|
+
warnings.warn(f"Error parsing type annotation {t} for {fullname}: {e}")
|
|
124
112
|
return t
|
|
125
113
|
|
|
126
114
|
# Simple _eval_type has failed. We now execute all TYPE_CHECKING sections in the module and try again.
|
|
@@ -185,8 +173,6 @@ def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
|
|
|
185
173
|
# Added a special check for typing.Literal, whose literal strings would otherwise be evaluated.
|
|
186
174
|
|
|
187
175
|
if isinstance(t, str):
|
|
188
|
-
if sys.version_info < (3, 9): # pragma: no cover
|
|
189
|
-
t = t.strip("\"'")
|
|
190
176
|
t = typing.ForwardRef(t)
|
|
191
177
|
|
|
192
178
|
if get_origin(t) is Literal:
|
|
@@ -197,24 +183,22 @@ def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
|
|
|
197
183
|
# https://github.com/python/cpython/blob/4f51fa9e2d3ea9316e674fb9a9f3e3112e83661c/Lib/typing.py#L684-L707
|
|
198
184
|
if t.__forward_arg__ in recursive_guard: # pragma: no cover
|
|
199
185
|
return t
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
)
|
|
212
|
-
(type_,) = (eval(t.__forward_code__, globalns, localns),)
|
|
213
|
-
t.__forward_value__ = _eval_type(
|
|
214
|
-
type_, globalns, localns, recursive_guard | {t.__forward_arg__}
|
|
186
|
+
|
|
187
|
+
if globalns is None and localns is None: # pragma: no cover
|
|
188
|
+
globalns = localns = {}
|
|
189
|
+
elif globalns is None: # pragma: no cover
|
|
190
|
+
globalns = localns
|
|
191
|
+
elif localns is None: # pragma: no cover
|
|
192
|
+
localns = globalns
|
|
193
|
+
__forward_module__ = getattr(t, "__forward_module__", None)
|
|
194
|
+
if __forward_module__ is not None:
|
|
195
|
+
globalns = getattr(
|
|
196
|
+
sys.modules.get(__forward_module__, None), "__dict__", globalns
|
|
215
197
|
)
|
|
216
|
-
|
|
217
|
-
return
|
|
198
|
+
(type_,) = (eval(t.__forward_code__, globalns, localns),)
|
|
199
|
+
return _eval_type(
|
|
200
|
+
type_, globalns, localns, recursive_guard | {t.__forward_arg__}
|
|
201
|
+
)
|
|
218
202
|
|
|
219
203
|
# https://github.com/python/cpython/blob/main/Lib/typing.py#L333-L343
|
|
220
204
|
# fmt: off
|
pdoc/docstrings.py
CHANGED
|
@@ -104,13 +104,15 @@ def google(docstring: str) -> str:
|
|
|
104
104
|
)
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
GOOGLE_LIST_SECTIONS = ["Args", "Raises", "Attributes"]
|
|
107
|
+
GOOGLE_LIST_SECTIONS = ["Args", "Raises", "Attributes", "Keyword Args"]
|
|
108
108
|
"""Section headers listed in the official Google docstring style guide."""
|
|
109
109
|
|
|
110
110
|
GOOGLE_LIST_SECTION_ALIASES = {
|
|
111
111
|
"Parameters": "Args",
|
|
112
112
|
"Params": "Args",
|
|
113
113
|
"Arguments": "Args",
|
|
114
|
+
"Raise": "Raises",
|
|
115
|
+
"Keyword Arguments": "Keyword Args",
|
|
114
116
|
}
|
|
115
117
|
"""
|
|
116
118
|
Alternative section headers that are not listed in the official Google
|
pdoc/render_helpers.py
CHANGED
|
@@ -24,9 +24,10 @@ except ImportError: # pragma: no cover
|
|
|
24
24
|
from jinja2 import contextfilter as pass_context # type: ignore
|
|
25
25
|
|
|
26
26
|
from jinja2.runtime import Context
|
|
27
|
+
import markdown2
|
|
27
28
|
from markupsafe import Markup
|
|
28
29
|
|
|
29
|
-
import pdoc
|
|
30
|
+
import pdoc
|
|
30
31
|
|
|
31
32
|
from . import docstrings
|
|
32
33
|
|
|
@@ -175,7 +176,7 @@ def to_html(docstring: str) -> str:
|
|
|
175
176
|
# careful: markdown2 returns a subclass of str with an extra
|
|
176
177
|
# .toc_html attribute. don't further process the result,
|
|
177
178
|
# otherwise this attribute will be lost.
|
|
178
|
-
return
|
|
179
|
+
return markdown2.markdown( # type: ignore
|
|
179
180
|
docstring,
|
|
180
181
|
extras=markdown_extensions,
|
|
181
182
|
link_patterns=markdown_link_patterns,
|
|
@@ -408,7 +409,7 @@ def linkify(
|
|
|
408
409
|
# First part of the identifier (e.g. "foo") - this is optional for relative references.
|
|
409
410
|
(?:
|
|
410
411
|
\b
|
|
411
|
-
(?!\d)
|
|
412
|
+
(?!\d)\w+
|
|
412
413
|
|
|
|
413
414
|
\.* # We may also start with multiple dots.
|
|
414
415
|
)
|
|
@@ -416,7 +417,7 @@ def linkify(
|
|
|
416
417
|
(?:
|
|
417
418
|
# A single dot or a dot surrounded with pygments highlighting.
|
|
418
419
|
(?:\.|</span><span\ class="o">\.</span><span\ class="n">)
|
|
419
|
-
(?!\d)
|
|
420
|
+
(?!\d)\w+
|
|
420
421
|
)+
|
|
421
422
|
(?:\(\)|\b(?!\(\))) # we either end on () or on a word boundary.
|
|
422
423
|
(?!</a>) # not an existing link
|
|
@@ -424,7 +425,7 @@ def linkify(
|
|
|
424
425
|
|
|
425
426
|
| # Part 2: `foo` or `foo()`. `foo.bar` is already covered with part 1.
|
|
426
427
|
(?<=<code>)
|
|
427
|
-
(?!\d)
|
|
428
|
+
(?!\d)\w+
|
|
428
429
|
(?:\(\))?
|
|
429
430
|
(?=</code>(?!</a>))
|
|
430
431
|
""",
|
pdoc/templates/content.css
CHANGED
|
@@ -445,9 +445,9 @@ This makes sure that the pdoc styling doesn't leak to the rest of the page when
|
|
|
445
445
|
|
|
446
446
|
.pdoc .attribution img {
|
|
447
447
|
margin-left: 5px;
|
|
448
|
-
height:
|
|
449
|
-
vertical-align:
|
|
450
|
-
width:
|
|
448
|
+
height: 27px;
|
|
449
|
+
vertical-align: bottom;
|
|
450
|
+
width: 50px;
|
|
451
451
|
transition: all 200ms;
|
|
452
452
|
}
|
|
453
453
|
|
|
@@ -14,7 +14,7 @@ A custom template could override this by setting root_module_name to false befor
|
|
|
14
14
|
</html>
|
|
15
15
|
{% else %}
|
|
16
16
|
{% extends "frame.html.jinja2" %}
|
|
17
|
-
{% block title %}Module List
|
|
17
|
+
{% block title %}Module List{% endblock %}
|
|
18
18
|
{% block style %}
|
|
19
19
|
{{ super() | safe }}
|
|
20
20
|
<style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="pdoc logo" width="300" height="
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="pdoc logo" width="300" height="160" viewBox="0 0 150 80"><title>pdoc</title><path d="M132.316 48.886c.276-4.679 2.342-6.698 4.409-7.982s4.27-1.165 6.751-1.055c1.586.07 3.044.156 4.222-.482 1.142-.619 2.026-1.932 2.162-3.739.268-3.576-1.929-5.368-5.006-5.551s-7.599.524-10.517 1.606c-4.455 1.652-8.588 6.606-9.552 8.992s-2.342 6.193-1.745 10.873 2.664 9.221 5.878 11.79 5.878 3.808 10.103 4.312 3.444.229 6.062.229 5.006-2.202 4.914-4.909-2.296-5.001-4.501-4.863-3.077.505-5.281.229-7.715-2.064-7.899-9.451z" fill="#198754"/><circle cx="101.504" cy="48.943" r="14.208" fill="none" stroke="#198754" stroke-width="9.354"/><path d="M87.81.002c-3.637.065-5.001.454-7.014 1.232s-3.443 1.363-6.3 4.282c-1.723 1.76-3.148 5.019-3.776 7.329-.413 1.521-.316 2.63-.316 2.63l-.195 34.612c.065 5.774-6.755 8.305-9.612 8.37s-9.678-1.038-9.743-9.408 7.128-9.521 8.362-9.521c1.413-.13 2.526-.021 3.718-.016 2.071.009 4.157-.778 4.092-4.671s-4.157-4.736-4.157-4.736c-6.3-.843-11.43 2.206-11.43 2.206S40.917 38.15 41.372 49.634 51.568 68.19 61.311 68.125s18.316-7.007 18.445-17.193l.13-22.772c.046-2.291 2.683-3.644 4.476-4.203.745-.232 1.694-.274 1.694-.274l10.457-.13s4.871-.324 7.729-3.114 4.352-6.294 4.352-6.294.974-3.049.13-4.606-.195-1.233-2.792-3.309-8.573-4.477-8.573-4.477S91.447-.063 87.81.002zM0 47.169l.065 28.417S0 80.127 4.481 79.997s5.072-3.866 5.049-4.152l-.113-28.482s1.624-7.656 9.937-7.721 10.002 6.942 10.002 8.499-.909 10.51-9.093 10.51c-.948 0-2.99-.567-4.145-.272-3.919 1-3.194 4.554-3.194 4.554s.065 5.061 7.404 4.996 18.575-6.034 18.575-19.074S26.953 30.04 19.549 29.91 1.234 35.296 0 47.169z" fill="#198754"/><g transform="matrix(.325601 0 0 .325256 -10.32669 -45.802786)"><circle cx="297.554" cy="172.286" r="16.5" fill="#fff"/><ellipse cx="297.709" cy="172.642" rx="11.071" ry="10.871" fill="#105a48"/><circle cx="304.104" cy="167.667" r="4.5" fill="#fff"/></g><path d="M94.661 17.032l.893-1.476s.99.714 1.916.925 1.575.114 2.955.114l14.565-.162c1.283-.032 3.085-.762 3.02-3.293s-.373-3.503-.373-3.503l1.283-.487s.52.503.877 1.573.309 1.995.292 2.66-.227 1.541-.227 1.541 1.564-.308 2.359-1.038.823-.779 1.489-1.508.812-.86.812-.86.552-.13.877.26.341.957.065 1.46-1.672 2.206-3.247 3.066-2.76 1.427-3.929 1.768-3.848.73-7.063.714l-10.944-.114s-2.143-.081-3.02-.373-2.241-.973-2.598-1.265z" fill="#d36d49"/><g fill="#105a48"><ellipse cx="93.052" cy="43.567" rx=".869" ry="1.014" transform="rotate(341.022)"/><ellipse cx="104.3" cy="-16.184" rx=".865" ry="1.009" transform="rotate(14.786)"/></g></svg>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pdoc
|
|
3
|
-
Version:
|
|
3
|
+
Version: 16.0.0
|
|
4
4
|
Summary: API Documentation for Python Projects
|
|
5
5
|
Author-email: Maximilian Hils <pdoc@maximilianhils.com>
|
|
6
6
|
License: MIT-0
|
|
@@ -16,24 +16,25 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
16
16
|
Classifier: Environment :: Console
|
|
17
17
|
Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Operating System :: OS Independent
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
24
|
Classifier: Typing :: Typed
|
|
25
|
-
Requires-Python: >=3.
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
License-File: LICENSE
|
|
28
28
|
Requires-Dist: Jinja2>=2.11.0
|
|
29
29
|
Requires-Dist: pygments>=2.12.0
|
|
30
30
|
Requires-Dist: MarkupSafe>=1.1.1
|
|
31
|
+
Requires-Dist: markdown2>=2.5.4
|
|
31
32
|
|
|
32
33
|
<p align="center">
|
|
33
34
|
<a href="https://pdoc.dev/"><img alt="pdoc" src="https://pdoc.dev/logo.svg" width="200" height="100" /></a>
|
|
34
35
|
<br><br>
|
|
35
|
-
<a href="https://pdoc.dev/docs/pdoc.html"><img height="20" alt="pdoc documentation" src="https://shields.mitmproxy.org/badge/docs-pdoc.dev-brightgreen.svg"></a>
|
|
36
|
-
<img height="20" alt="CI Status" src="https://shields.mitmproxy.org/github/actions/workflow/status/mitmproxy/pdoc/main.yml?label=CI&logo=github">
|
|
36
|
+
<a href="https://pdoc.dev/docs/pdoc.html"><img height="20" alt="pdoc documentation" src="https://shields.mitmproxy.org/badge/docs-pdoc.dev-brightgreen.svg?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOTIiIGhlaWdodD0iMTkyIj48cGF0aCBkPSJNNjcuODA3IDIzLjI0NGMtMTguMDMyIDUuNTIzLTI0LjI3MyA5LjQxMS0zMy4xOTMgMTYuMTY5UzE5LjQwNyA1MS4xMjUgOS4zNCA2OS43NkMzLjI3IDgwLjk5Ni44MjcgOTkuMjcxIDEgMTExLjY3OWMuMTE0IDguMTY5IDIuMTg4IDEzLjU1OSAyLjE4OCAxMy41NTlTNDIuMzI2IDI0Ny4yNyAyMC40MzUgMjc4LjEwNWMtMTAuNDg4IDE0Ljc3MyA4NC40MjIgMjcuMDA3IDgwLjA0NyAxMC40NS0xMC4zOTctMzkuMzQ4LTI3LjU5NS05Ny40MDktMzEuOTA4LTExMy42NjctMy4wNDctMTEuNDg0IDguMTYtMjEuOTk1IDE2LjI5NS0yNy4zNDMgMy4zODMtMi4yMjQgOC4wNTEtMy43ODYgOC4wNTEtMy43ODZsNTEuOTI0LTE1LjU5NXMyMy44MDktOC41NzkgMzQuMDYyLTI2LjU2NyAxMi42ODktMzcuNTg0IDEyLjY4OS0zNy41ODQuNDk1LTE2LjU4OC01LjkzOS0yMy4xNC0yLjczMi01Ljg2Ni0xOC42NDYtMTIuNDk4LTQ5LjEyMi0xMC4wNTMtNDkuMTIyLTEwLjA1My0zMi4wNDktLjYwMi01MC4wODEgNC45MjF6IiBmaWxsPSIjMjBhZDZjIi8+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMzQzLjk5MykiPjxlbGxpcHNlIGN4PSI1Mi4yNzYiIGN5PSI5NC4wODkiIGZpbGw9IiNmZmYiIHJ4PSIyNy44NTIiIHJ5PSIyNy44MjMiLz48ZWxsaXBzZSBjeD0iNTIuNTM4IiBjeT0iOTQuNjg5IiByeD0iMTguNjg4IiByeT0iMTguMzMxIiBmaWxsPSIjMTA1YTQ4Ii8+PGVsbGlwc2UgY3g9IjYzLjMzMyIgY3k9Ijg2LjMiIGZpbGw9IiNmZmYiIHJ4PSI3LjU5NiIgcnk9IjcuNTg4Ii8+PC9nPjxnIGZpbGw9IiMxMDVhNDgiPjxlbGxpcHNlIGN4PSI5NC4xNTQiIGN5PSIxMzUuNzM0IiByeD0iNC41MDUiIHJ5PSI1LjI1NyIgdHJhbnNmb3JtPSJyb3RhdGUoMzI1LjAxNSkiLz48ZWxsaXBzZSBjeD0iMTY3Ljg2IiBjeT0iNTYuOTUxIiByeD0iNC40ODQiIHJ5PSI1LjIzMSIgdHJhbnNmb3JtPSJyb3RhdGUoMzU4Ljc3OSkiLz48L2c+PHBhdGggZD0iTTE4OC45NjIgNzcuNDU4bC0zNC4yNDggMTAuMTcxYy02Ljg3OCAxLjk3My05Ljk3NCAzLjM4OC0xNC44ODggMy42NnMtMTAuODY4LTEuODY5LTEwLjg2OC0xLjg2OWwtMi4zNDIgOC42MzNjMi4xOTcuOTQ0IDkuOTY5IDIuMzkgMTQuNzU2IDIuNTkyczE1LjU4Mi0yLjQ2IDE1LjU4Mi0yLjQ2bDI3LjQ3MS03LjUzNGMxLjk1MS00LjcwOSAzLjQzMi05LjIzOCA0LjUzNy0xMy4xOTN6IiBmaWxsPSIjZTc4MzYxIi8+PC9zdmc+"></a>
|
|
37
|
+
<a href="https://github.com/mitmproxy/pdoc/actions"><img height="20" alt="CI Status" src="https://shields.mitmproxy.org/github/actions/workflow/status/mitmproxy/pdoc/main.yml?label=CI&logo=github"></a>
|
|
37
38
|
<img height="20" alt="Code Coverage" src="https://shields.mitmproxy.org/badge/coverage-100%25-brightgreen">
|
|
38
39
|
<a href="https://autofix.ci"><img height="20" alt="autofix.ci: yes" src="https://shields.mitmproxy.org/badge/autofix.ci-yes-success?logo=data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjZmZmIiB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCB0cmFuc2Zvcm09InNjYWxlKDAuMDYxLC0wLjA2MSkgdHJhbnNsYXRlKC0yNTAsLTE3NTApIiBkPSJNMTMyNSAtMzQwcS0xMTUgMCAtMTY0LjUgMzIuNXQtNDkuNSAxMTQuNXEwIDMyIDUgNzAuNXQxMC41IDcyLjV0NS41IDU0djIyMHEtMzQgLTkgLTY5LjUgLTE0dC03MS41IC01cS0xMzYgMCAtMjUxLjUgNjJ0LTE5MSAxNjl0LTkyLjUgMjQxcS05MCAxMjAgLTkwIDI2NnEwIDEwOCA0OC41IDIwMC41dDEzMiAxNTUuNXQxODguNSA4MXExNSA5OSAxMDAuNSAxODAuNXQyMTcgMTMwLjV0MjgyLjUgNDlxMTM2IDAgMjU2LjUgLTQ2IHQyMDkgLTEyNy41dDEyOC41IC0xODkuNXExNDkgLTgyIDIyNyAtMjEzLjV0NzggLTI5OS41cTAgLTEzNiAtNTggLTI0NnQtMTY1LjUgLTE4NC41dC0yNTYuNSAtMTAzLjVsLTI0MyAtMzAwdi01MnEwIC0yNyAzLjUgLTU2LjV0Ni41IC01Ny41dDMgLTUycTAgLTg1IC00MS41IC0xMTguNXQtMTU3LjUgLTMzLjV6TTEzMjUgLTI2MHE3NyAwIDk4IDE0LjV0MjEgNTcuNXEwIDI5IC0zIDY4dC02LjUgNzN0LTMuNSA0OHY2NGwyMDcgMjQ5IHEtMzEgMCAtNjAgNS41dC01NCAxMi41bC0xMDQgLTEyM3EtMSAzNCAtMiA2My41dC0xIDU0LjVxMCA2OSA5IDEyM2wzMSAyMDBsLTExNSAtMjhsLTQ2IC0yNzFsLTIwNSAyMjZxLTE5IC0xNSAtNDMgLTI4LjV0LTU1IC0yNi41bDIxOSAtMjQydi0yNzZxMCAtMjAgLTUuNSAtNjB0LTEwLjUgLTc5dC01IC01OHEwIC00MCAzMCAtNTMuNXQxMDQgLTEzLjV6TTEyNjIgNjE2cS0xMTkgMCAtMjI5LjUgMzQuNXQtMTkzLjUgOTYuNWw0OCA2NCBxNzMgLTU1IDE3MC41IC04NXQyMDQuNSAtMzBxMTM3IDAgMjQ5IDQ1LjV0MTc5IDEyMXQ2NyAxNjUuNWg4MHEwIC0xMTQgLTc3LjUgLTIwNy41dC0yMDggLTE0OXQtMjg5LjUgLTU1LjV6TTgwMyA1OTVxODAgMCAxNDkgMjkuNXQxMDggNzIuNWwyMjEgLTY3bDMwOSA4NnE0NyAtMzIgMTA0LjUgLTUwdDExNy41IC0xOHE5MSAwIDE2NSAzOHQxMTguNSAxMDMuNXQ0NC41IDE0Ni41cTAgNzYgLTM0LjUgMTQ5dC05NS41IDEzNHQtMTQzIDk5IHEtMzcgMTA3IC0xMTUuNSAxODMuNXQtMTg2IDExNy41dC0yMzAuNSA0MXEtMTAzIDAgLTE5Ny41IC0yNnQtMTY5IC03Mi41dC0xMTcuNSAtMTA4dC00MyAtMTMxLjVxMCAtMzQgMTQuNSAtNjIuNXQ0MC41IC01MC41bC01NSAtNTlxLTM0IDI5IC01NCA2NS41dC0yNSA4MS41cS04MSAtMTggLTE0NSAtNzB0LTEwMSAtMTI1LjV0LTM3IC0xNTguNXEwIC0xMDIgNDguNSAtMTgwLjV0MTI5LjUgLTEyM3QxNzkgLTQ0LjV6Ii8+PC9zdmc+"></a>
|
|
39
40
|
<a href="https://pypi.python.org/pypi/pdoc"><img height="20" alt="PyPI Version" src="https://shields.mitmproxy.org/pypi/v/pdoc.svg"></a>
|
|
@@ -52,7 +53,7 @@ API Documentation for Python Projects.
|
|
|
52
53
|
pip install pdoc
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
pdoc is compatible with Python 3.
|
|
56
|
+
pdoc is compatible with Python 3.10 and newer.
|
|
56
57
|
|
|
57
58
|
|
|
58
59
|
# Usage
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
pdoc/__init__.py,sha256=
|
|
1
|
+
pdoc/__init__.py,sha256=5iHC0eiDDulwMpXoCxNPXdx7zuONa_hlbJkC1IRs1-w,22016
|
|
2
2
|
pdoc/__main__.py,sha256=DOXWKG7I0M-E9uSs8a--9RGJNI266_2VKZpVQR4paj0,8416
|
|
3
|
-
pdoc/_compat.py,sha256=
|
|
4
|
-
pdoc/
|
|
3
|
+
pdoc/_compat.py,sha256=o27PtYYvvb12_SQT5ATEOecNeld26NjNQzDhsKjI8C8,833
|
|
4
|
+
pdoc/_pydantic.py,sha256=uxbHsOfgVVjM0tdhz3SAWY9dqh6jpUHk-18__45kTL0,1812
|
|
5
|
+
pdoc/doc.py,sha256=sp967RQfOIyw7SJvHaLZav8oVpKf3E_dPwUnEllDSuk,50382
|
|
5
6
|
pdoc/doc_ast.py,sha256=qoWLta30b2XTlwj9fI15IM0687T0dIp9Vk5bB325O60,11345
|
|
6
7
|
pdoc/doc_pyi.py,sha256=r2QdI8WeUxY6jQ9O4xmL3m1zPVmIpxEAviqLYt_M5gk,5078
|
|
7
|
-
pdoc/doc_types.py,sha256=
|
|
8
|
-
pdoc/docstrings.py,sha256=
|
|
8
|
+
pdoc/doc_types.py,sha256=VlhKZJ9-j3I7LrRMZdWa_8RtAoT0RAEhpTocld4si0g,7201
|
|
9
|
+
pdoc/docstrings.py,sha256=r7tgaEIsgdyv4tEuRM_6cqFcbhRcgtypa0roqYWetaw,17267
|
|
9
10
|
pdoc/extract.py,sha256=8WAtzxjkTmUrGb4q4T4URyr8-Y0WM0FDEb5DcTH0TMA,14237
|
|
10
11
|
pdoc/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
12
|
pdoc/render.py,sha256=8vXpDlqzRayJdaH0oU6nA6aApFYeGrtxVLOmCD7EbIU,7081
|
|
12
|
-
pdoc/render_helpers.py,sha256=
|
|
13
|
+
pdoc/render_helpers.py,sha256=0R3Q25_-66v2fF2XxqHdSJJqm3KVjAupBQVsAIaB6ao,20415
|
|
13
14
|
pdoc/search.py,sha256=RGFaRftEQOg1Mw4FEOmJVRY9DhBncBYSFi5r4MSknTM,7248
|
|
14
15
|
pdoc/web.py,sha256=9pRpukVWMEoWbthB1E9Yrg86KoSNmXMeBicno_cVcPQ,6933
|
|
15
|
-
pdoc/markdown2/LICENSE,sha256=BfcOT5Iu-7wDaKcbIta8wkP-pFncOu4yXeBlMfbeYGI,1116
|
|
16
|
-
pdoc/markdown2/README.md,sha256=-b2NGwLPzTBnaCGPSqRCzHxSrqArlXxGG5w0c6pOqFk,200
|
|
17
|
-
pdoc/markdown2/__init__.py,sha256=guvOlezAha8NQBH8TFkEwiP4zFy5tsV2NVYiEOWD2jg,159248
|
|
18
16
|
pdoc/templates/README.md,sha256=ukxrGoYYCIYkScS5j2Dge8c3VEd01AzOiIKq6yl5OqE,1780
|
|
19
17
|
pdoc/templates/build-search-index.js,sha256=igiRW84j_aRFmGv5j48e8gnWeTgfdL8Rs930vHOUYyU,982
|
|
20
|
-
pdoc/templates/content.css,sha256=
|
|
18
|
+
pdoc/templates/content.css,sha256=cx6Al7Zv1ab12wj6Cjg2dWPvWXJjL1OSYJ3wffQF8Bc,10060
|
|
21
19
|
pdoc/templates/custom.css,sha256=62cn8AmBJiplFJyAKXoZSlVa1s3lNOjkYwDp20pF-ew,106
|
|
22
20
|
pdoc/templates/layout.css,sha256=xv7AgPtHiazW7S2AtNebRr2BKmOSPmX2wwcejXBRfQ0,4670
|
|
23
21
|
pdoc/templates/livereload.html.jinja2,sha256=VHbZWN_dBRgBpaRzszvXbbX278-fzbok0JRIOeLep_E,566
|
|
@@ -29,7 +27,7 @@ pdoc/templates/syntax-highlighting.css,sha256=h8SkYVmzf9s4bZiHDPQPytCBuJCeIOK2Kj
|
|
|
29
27
|
pdoc/templates/theme.css,sha256=yjnbtPVmqaifTINsA5sK2a3e1aoFO0UlOMgOSKUgLvI,397
|
|
30
28
|
pdoc/templates/default/error.html.jinja2,sha256=RqH14o6ZV79uBO14gKSjwObXFKKczkcLTMe1orurEJk,970
|
|
31
29
|
pdoc/templates/default/frame.html.jinja2,sha256=Qp5zlts8Bl-O2f0cxJHH_QdmAkMtJJjNVA0ZU2Mbwl8,2164
|
|
32
|
-
pdoc/templates/default/index.html.jinja2,sha256=
|
|
30
|
+
pdoc/templates/default/index.html.jinja2,sha256=rhb3L0YMrOoGKHqmZyBe-nvLqu80wjeqACa74GtoGQU,2350
|
|
33
31
|
pdoc/templates/default/module.html.jinja2,sha256=LI2I58Kv8s87C4QQ2wZMg2qtelGCRKBQSXteyNSOYQE,13546
|
|
34
32
|
pdoc/templates/deprecated/README.md,sha256=8HPj4Bu6EPAdHbH5CQVYgcD580zpkhqbwiSFoLAVB1Q,339
|
|
35
33
|
pdoc/templates/deprecated/bootstrap-reboot.min.css,sha256=-u1DTWljwtvjAc8X-ihFhIixKaPcs4w_uZ_CYvvP9-o,207
|
|
@@ -49,10 +47,10 @@ pdoc/templates/resources/info-circle-fill.svg,sha256=kO3AMXfWtacpJPzC8Pvihf46OZd
|
|
|
49
47
|
pdoc/templates/resources/lightbulb.svg,sha256=vjDgQP8uYPryTQgSKnK_bywjX9ob-we5kTySyJ3DI9s,510
|
|
50
48
|
pdoc/templates/resources/lightning-fill.svg,sha256=XEyCtbgxeAlwCezdsf7N0NFd5aMjwqyJJDpaFbYYTFA,265
|
|
51
49
|
pdoc/templates/resources/navtoggle.svg,sha256=WVR0BJIucX0MgwwEawmfX0qYD1i_dSbUhoGnqPef3jw,187
|
|
52
|
-
pdoc/templates/resources/pdoc-logo.svg,sha256=
|
|
53
|
-
pdoc-
|
|
54
|
-
pdoc-
|
|
55
|
-
pdoc-
|
|
56
|
-
pdoc-
|
|
57
|
-
pdoc-
|
|
58
|
-
pdoc-
|
|
50
|
+
pdoc/templates/resources/pdoc-logo.svg,sha256=7z-1Z4u0J3CkE8Qlc_dj65SrF-LnrWV0umF_WR37mR0,2572
|
|
51
|
+
pdoc-16.0.0.dist-info/LICENSE,sha256=LrhIeJ7gKTDPyOX9YVuZGr9mpmyjpkvqH6LjxvE0szM,898
|
|
52
|
+
pdoc-16.0.0.dist-info/METADATA,sha256=srlYoK7wVrTv3u03_nvkwYmp1WoQc1qCsexinwCFjl0,8614
|
|
53
|
+
pdoc-16.0.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
54
|
+
pdoc-16.0.0.dist-info/entry_points.txt,sha256=-bK-S1ZvmqCWqi1hGnsl5nayWkzXB1BEs-Cynh5QZaI,43
|
|
55
|
+
pdoc-16.0.0.dist-info/top_level.txt,sha256=rg5eIToBHzwTfZZi1E7NVHgie5joQuSuU1rWV0qKS9k,5
|
|
56
|
+
pdoc-16.0.0.dist-info/RECORD,,
|
pdoc/markdown2/LICENSE
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
The MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2012 Trent Mick
|
|
4
|
-
Copyright (c) 2010 ActiveState Software Inc.
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a
|
|
7
|
-
copy of this software and associated documentation files (the
|
|
8
|
-
"Software"), to deal in the Software without restriction, including
|
|
9
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
10
|
-
distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
11
|
-
persons to whom the Software is furnished to do so, subject to the
|
|
12
|
-
following conditions:
|
|
13
|
-
|
|
14
|
-
The above copyright notice and this permission notice shall be included
|
|
15
|
-
in all copies or substantial portions of the Software.
|
|
16
|
-
|
|
17
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
18
|
-
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
20
|
-
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
21
|
-
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
22
|
-
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
23
|
-
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
pdoc/markdown2/README.md
DELETED