griffe-runtime-objects 0.3.0__tar.gz → 0.3.1__tar.gz

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.
Files changed (48) hide show
  1. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/CHANGELOG.md +8 -0
  2. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/CONTRIBUTING.md +1 -2
  3. griffe_runtime_objects-0.3.1/PKG-INFO +131 -0
  4. griffe_runtime_objects-0.3.1/README.md +98 -0
  5. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/config/ruff.toml +8 -23
  6. griffe_runtime_objects-0.3.1/config/ty.toml +6 -0
  7. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/config/vscode/launch.json +1 -2
  8. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/config/vscode/settings.json +1 -3
  9. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/.overrides/partials/comments.html +1 -1
  10. griffe_runtime_objects-0.3.1/docs/css/apidocs.css +21 -0
  11. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/duties.py +38 -43
  12. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/pyproject.toml +10 -14
  13. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/scripts/gen_credits.py +14 -15
  14. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/scripts/get_version.py +1 -1
  15. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/scripts/make.py +7 -7
  16. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/src/griffe_runtime_objects/_internal/debug.py +1 -1
  17. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/tests/test_api.py +5 -5
  18. griffe_runtime_objects-0.3.1/zensical.toml +185 -0
  19. griffe_runtime_objects-0.3.0/PKG-INFO +0 -78
  20. griffe_runtime_objects-0.3.0/README.md +0 -46
  21. griffe_runtime_objects-0.3.0/config/mypy.ini +0 -5
  22. griffe_runtime_objects-0.3.0/docs/.overrides/partials/path-item.html +0 -22
  23. griffe_runtime_objects-0.3.0/docs/css/material.css +0 -4
  24. griffe_runtime_objects-0.3.0/docs/css/mkdocstrings.css +0 -72
  25. griffe_runtime_objects-0.3.0/mkdocs.yml +0 -173
  26. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/CODE_OF_CONDUCT.md +0 -0
  27. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/LICENSE +0 -0
  28. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/config/coverage.ini +0 -0
  29. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/config/git-changelog.toml +0 -0
  30. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/config/pytest.ini +0 -0
  31. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/config/vscode/tasks.json +0 -0
  32. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/.overrides/main.html +0 -0
  33. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/changelog.md +0 -0
  34. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/code_of_conduct.md +0 -0
  35. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/contributing.md +0 -0
  36. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/credits.md +0 -0
  37. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/index.md +0 -0
  38. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/js/feedback.js +0 -0
  39. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/license.md +0 -0
  40. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/docs/reference/api.md +0 -0
  41. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/scripts/make +0 -0
  42. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/src/griffe_runtime_objects/__init__.py +0 -0
  43. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/src/griffe_runtime_objects/_internal/__init__.py +0 -0
  44. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/src/griffe_runtime_objects/_internal/extension.py +0 -0
  45. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/src/griffe_runtime_objects/py.typed +0 -0
  46. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/tests/__init__.py +0 -0
  47. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/tests/conftest.py +0 -0
  48. {griffe_runtime_objects-0.3.0 → griffe_runtime_objects-0.3.1}/tests/test_extension.py +0 -0
@@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  <!-- insertion marker -->
9
+ ## [0.3.1](https://github.com/mkdocstrings/griffe-runtime-objects/releases/tag/0.3.1) - 2026-02-20
10
+
11
+ <small>[Compare with 0.3.0](https://github.com/mkdocstrings/griffe-runtime-objects/compare/0.3.0...0.3.1)</small>
12
+
13
+ ### Build
14
+
15
+ - Depend on griffelib 2.0 ([d2f015b](https://github.com/mkdocstrings/griffe-runtime-objects/commit/d2f015b341d1a275ebf57176c5edab7814bb479b) by Timothée Mazzucotelli).
16
+
9
17
  ## [0.3.0](https://github.com/mkdocstrings/griffe-runtime-objects/releases/tag/0.3.0) - 2025-11-09
10
18
 
11
19
  <small>[Compare with 0.2.0](https://github.com/mkdocstrings/griffe-runtime-objects/compare/0.2.0...0.3.0)</small>
@@ -29,8 +29,7 @@ Run `make help` to see all the available actions!
29
29
 
30
30
  ## Tasks
31
31
 
32
- The entry-point to run commands and tasks is the `make` Python script, located in the `scripts` directory. Try running `make` to show the available commands and tasks. The *commands* do not need the Python dependencies to be installed,
33
- while the *tasks* do. The cross-platform tasks are written in Python, thanks to [duty](https://github.com/pawamoy/duty).
32
+ The entry-point to run commands and tasks is the `make` Python script, located in the `scripts` directory. Try running `make` to show the available commands and tasks. The *commands* do not need the Python dependencies to be installed, while the *tasks* do. The cross-platform tasks are written in Python, thanks to [duty](https://github.com/pawamoy/duty).
34
33
 
35
34
  If you work in VSCode, we provide [an action to configure VSCode](https://pawamoy.github.io/copier-uv/work/#vscode-setup) for the project.
36
35
 
@@ -0,0 +1,131 @@
1
+ Metadata-Version: 2.4
2
+ Name: griffe-runtime-objects
3
+ Version: 0.3.1
4
+ Summary: Make runtime objects available through `extra`.
5
+ Author-Email: =?utf-8?q?Timoth=C3=A9e_Mazzucotelli?= <dev@pawamoy.fr>
6
+ License-Expression: ISC
7
+ License-File: LICENSE
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Programming Language :: Python
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3 :: Only
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Documentation
19
+ Classifier: Topic :: Software Development
20
+ Classifier: Topic :: Utilities
21
+ Classifier: Typing :: Typed
22
+ Project-URL: Homepage, https://mkdocstrings.github.io/griffe-runtime-objects
23
+ Project-URL: Documentation, https://mkdocstrings.github.io/griffe-runtime-objects
24
+ Project-URL: Changelog, https://mkdocstrings.github.io/griffe-runtime-objects/changelog
25
+ Project-URL: Repository, https://github.com/mkdocstrings/griffe-runtime-objects
26
+ Project-URL: Issues, https://github.com/mkdocstrings/griffe-runtime-objects/issues
27
+ Project-URL: Discussions, https://github.com/mkdocstrings/griffe-runtime-objects/discussions
28
+ Project-URL: Gitter, https://gitter.im/mkdocstrings/griffe-runtime-objects
29
+ Project-URL: Funding, https://github.com/sponsors/pawamoy
30
+ Requires-Python: >=3.10
31
+ Requires-Dist: griffelib>=2.0
32
+ Description-Content-Type: text/markdown
33
+
34
+ # griffe-runtime-objects
35
+
36
+ [![ci](https://github.com/mkdocstrings/griffe-runtime-objects/workflows/ci/badge.svg)](https://github.com/mkdocstrings/griffe-runtime-objects/actions?query=workflow%3Aci)
37
+ [![documentation](https://img.shields.io/badge/docs-zensical-FF9100.svg?style=flat)](https://mkdocstrings.github.io/griffe-runtime-objects/)
38
+ [![pypi version](https://img.shields.io/pypi/v/griffe-runtime-objects.svg)](https://pypi.org/project/griffe-runtime-objects/)
39
+ [![gitter](https://img.shields.io/badge/matrix-chat-4DB798.svg?style=flat)](https://app.gitter.im/#/room/#griffe-runtime-objects:gitter.im)
40
+
41
+ Make runtime objects available through `extra`.
42
+
43
+ ## Installation
44
+
45
+ ```bash
46
+ pip install griffe-runtime-objects
47
+ ```
48
+
49
+ ## Usage
50
+
51
+ [Enable](https://mkdocstrings.github.io/griffe/guide/users/extending/#using-extensions) the `griffe_runtime_objects` extension. Now all Griffe objects will have access to the corresponding runtime objects in their `extra` attribute, under the `runtime-objects` namespace:
52
+
53
+ ```pycon
54
+ >>> import griffe
55
+ >>> griffe_data = griffe.load("griffe", extensions=griffe.load_extensions("griffe_runtime_objects"), resolve_aliases=True)
56
+ >>> griffe_data["parse"].extra
57
+ defaultdict(<class 'dict'>, {'runtime-objects': {'object': <function parse at 0x78685c951260>}})
58
+ >>> griffe_data["Module"].extra
59
+ defaultdict(<class 'dict'>, {'runtime-objects': {'object': <class '_griffe.models.Module'>}})
60
+ ```
61
+
62
+ This extension can be useful in custom templates of mkdocstrings-python, to iterate on an object value or attributes.
63
+
64
+ With MkDocs:
65
+
66
+ ```yaml
67
+ plugins:
68
+ - mkdocstrings:
69
+ handlers:
70
+ python:
71
+ options:
72
+ extensions:
73
+ - griffe_runtime_objects
74
+ ```
75
+
76
+ ## Sponsors
77
+
78
+ <!-- sponsors-start -->
79
+
80
+ <div id="premium-sponsors" style="text-align: center;">
81
+
82
+ <div id="silver-sponsors"><b>Silver sponsors</b><p>
83
+ <a href="https://fastapi.tiangolo.com/"><img alt="FastAPI" src="https://raw.githubusercontent.com/tiangolo/fastapi/master/docs/en/docs/img/logo-margin/logo-teal.png" style="height: 200px; "></a><br>
84
+ </p></div>
85
+
86
+ <div id="bronze-sponsors"><b>Bronze sponsors</b><p>
87
+ <a href="https://www.nixtla.io/"><picture><source media="(prefers-color-scheme: light)" srcset="https://www.nixtla.io/img/logo/full-black.svg"><source media="(prefers-color-scheme: dark)" srcset="https://www.nixtla.io/img/logo/full-white.svg"><img alt="Nixtla" src="https://www.nixtla.io/img/logo/full-black.svg" style="height: 60px; "></picture></a><br>
88
+ </p></div>
89
+ </div>
90
+
91
+ ---
92
+
93
+ <div id="sponsors"><p>
94
+ <a href="https://github.com/ofek"><img alt="ofek" src="https://avatars.githubusercontent.com/u/9677399?u=386c330f212ce467ce7119d9615c75d0e9b9f1ce&v=4" style="height: 32px; border-radius: 100%;"></a>
95
+ <a href="https://github.com/samuelcolvin"><img alt="samuelcolvin" src="https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4" style="height: 32px; border-radius: 100%;"></a>
96
+ <a href="https://github.com/tlambert03"><img alt="tlambert03" src="https://avatars.githubusercontent.com/u/1609449?u=922abf0524b47739b37095e553c99488814b05db&v=4" style="height: 32px; border-radius: 100%;"></a>
97
+ <a href="https://github.com/ssbarnea"><img alt="ssbarnea" src="https://avatars.githubusercontent.com/u/102495?u=c7bd9ddf127785286fc939dd18cb02db0a453bce&v=4" style="height: 32px; border-radius: 100%;"></a>
98
+ <a href="https://github.com/femtomc"><img alt="femtomc" src="https://avatars.githubusercontent.com/u/34410036?u=f13a71daf2a9f0d2da189beaa94250daa629e2d8&v=4" style="height: 32px; border-radius: 100%;"></a>
99
+ <a href="https://github.com/cmarqu"><img alt="cmarqu" src="https://avatars.githubusercontent.com/u/360986?v=4" style="height: 32px; border-radius: 100%;"></a>
100
+ <a href="https://github.com/kolenaIO"><img alt="kolenaIO" src="https://avatars.githubusercontent.com/u/77010818?v=4" style="height: 32px; border-radius: 100%;"></a>
101
+ <a href="https://github.com/ramnes"><img alt="ramnes" src="https://avatars.githubusercontent.com/u/835072?u=3fca03c3ba0051e2eb652b1def2188a94d1e1dc2&v=4" style="height: 32px; border-radius: 100%;"></a>
102
+ <a href="https://github.com/machow"><img alt="machow" src="https://avatars.githubusercontent.com/u/2574498?u=c41e3d2f758a05102d8075e38d67b9c17d4189d7&v=4" style="height: 32px; border-radius: 100%;"></a>
103
+ <a href="https://github.com/BenHammersley"><img alt="BenHammersley" src="https://avatars.githubusercontent.com/u/99436?u=4499a7b507541045222ee28ae122dbe3c8d08ab5&v=4" style="height: 32px; border-radius: 100%;"></a>
104
+ <a href="https://github.com/trevorWieland"><img alt="trevorWieland" src="https://avatars.githubusercontent.com/u/28811461?u=74cc0e3756c1d4e3d66b5c396e1d131ea8a10472&v=4" style="height: 32px; border-radius: 100%;"></a>
105
+ <a href="https://github.com/MarcoGorelli"><img alt="MarcoGorelli" src="https://avatars.githubusercontent.com/u/33491632?u=7de3a749cac76a60baca9777baf71d043a4f884d&v=4" style="height: 32px; border-radius: 100%;"></a>
106
+ <a href="https://github.com/analog-cbarber"><img alt="analog-cbarber" src="https://avatars.githubusercontent.com/u/7408243?u=642fc2bdcc9904089c62fe5aec4e03ace32da67d&v=4" style="height: 32px; border-radius: 100%;"></a>
107
+ <a href="https://github.com/OdinManiac"><img alt="OdinManiac" src="https://avatars.githubusercontent.com/u/22727172?u=36ab20970f7f52ae8e7eb67b7fcf491fee01ac22&v=4" style="height: 32px; border-radius: 100%;"></a>
108
+ <a href="https://github.com/rstudio-sponsorship"><img alt="rstudio-sponsorship" src="https://avatars.githubusercontent.com/u/58949051?u=0c471515dd18111be30dfb7669ed5e778970959b&v=4" style="height: 32px; border-radius: 100%;"></a>
109
+ <a href="https://github.com/schlich"><img alt="schlich" src="https://avatars.githubusercontent.com/u/21191435?u=6f1240adb68f21614d809ae52d66509f46b1e877&v=4" style="height: 32px; border-radius: 100%;"></a>
110
+ <a href="https://github.com/butterlyn"><img alt="butterlyn" src="https://avatars.githubusercontent.com/u/53323535?v=4" style="height: 32px; border-radius: 100%;"></a>
111
+ <a href="https://github.com/livingbio"><img alt="livingbio" src="https://avatars.githubusercontent.com/u/10329983?v=4" style="height: 32px; border-radius: 100%;"></a>
112
+ <a href="https://github.com/NemetschekAllplan"><img alt="NemetschekAllplan" src="https://avatars.githubusercontent.com/u/912034?v=4" style="height: 32px; border-radius: 100%;"></a>
113
+ <a href="https://github.com/EricJayHartman"><img alt="EricJayHartman" src="https://avatars.githubusercontent.com/u/9259499?u=7e58cc7ec0cd3e85b27aec33656aa0f6612706dd&v=4" style="height: 32px; border-radius: 100%;"></a>
114
+ <a href="https://github.com/15r10nk"><img alt="15r10nk" src="https://avatars.githubusercontent.com/u/44680962?u=f04826446ff165742efa81e314bd03bf1724d50e&v=4" style="height: 32px; border-radius: 100%;"></a>
115
+ <a href="https://github.com/activeloopai"><img alt="activeloopai" src="https://avatars.githubusercontent.com/u/34816118?v=4" style="height: 32px; border-radius: 100%;"></a>
116
+ <a href="https://github.com/roboflow"><img alt="roboflow" src="https://avatars.githubusercontent.com/u/53104118?v=4" style="height: 32px; border-radius: 100%;"></a>
117
+ <a href="https://github.com/cmclaughlin"><img alt="cmclaughlin" src="https://avatars.githubusercontent.com/u/1061109?u=ddf6eec0edd2d11c980f8c3aa96e3d044d4e0468&v=4" style="height: 32px; border-radius: 100%;"></a>
118
+ <a href="https://github.com/blaisep"><img alt="blaisep" src="https://avatars.githubusercontent.com/u/254456?u=97d584b7c0a6faf583aa59975df4f993f671d121&v=4" style="height: 32px; border-radius: 100%;"></a>
119
+ <a href="https://github.com/RapidataAI"><img alt="RapidataAI" src="https://avatars.githubusercontent.com/u/104209891?v=4" style="height: 32px; border-radius: 100%;"></a>
120
+ <a href="https://github.com/rodolphebarbanneau"><img alt="rodolphebarbanneau" src="https://avatars.githubusercontent.com/u/46493454?u=6c405452a40c231cdf0b68e97544e07ee956a733&v=4" style="height: 32px; border-radius: 100%;"></a>
121
+ <a href="https://github.com/theSymbolSyndicate"><img alt="theSymbolSyndicate" src="https://avatars.githubusercontent.com/u/111542255?v=4" style="height: 32px; border-radius: 100%;"></a>
122
+ <a href="https://github.com/blakeNaccarato"><img alt="blakeNaccarato" src="https://avatars.githubusercontent.com/u/20692450?u=bb919218be30cfa994514f4cf39bb2f7cf952df4&v=4" style="height: 32px; border-radius: 100%;"></a>
123
+ <a href="https://github.com/ChargeStorm"><img alt="ChargeStorm" src="https://avatars.githubusercontent.com/u/26000165?v=4" style="height: 32px; border-radius: 100%;"></a>
124
+ <a href="https://github.com/Alphadelta14"><img alt="Alphadelta14" src="https://avatars.githubusercontent.com/u/480845?v=4" style="height: 32px; border-radius: 100%;"></a>
125
+ <a href="https://github.com/Cusp-AI"><img alt="Cusp-AI" src="https://avatars.githubusercontent.com/u/178170649?v=4" style="height: 32px; border-radius: 100%;"></a>
126
+ </p></div>
127
+
128
+
129
+ *And 7 more private sponsor(s).*
130
+
131
+ <!-- sponsors-end -->
@@ -0,0 +1,98 @@
1
+ # griffe-runtime-objects
2
+
3
+ [![ci](https://github.com/mkdocstrings/griffe-runtime-objects/workflows/ci/badge.svg)](https://github.com/mkdocstrings/griffe-runtime-objects/actions?query=workflow%3Aci)
4
+ [![documentation](https://img.shields.io/badge/docs-zensical-FF9100.svg?style=flat)](https://mkdocstrings.github.io/griffe-runtime-objects/)
5
+ [![pypi version](https://img.shields.io/pypi/v/griffe-runtime-objects.svg)](https://pypi.org/project/griffe-runtime-objects/)
6
+ [![gitter](https://img.shields.io/badge/matrix-chat-4DB798.svg?style=flat)](https://app.gitter.im/#/room/#griffe-runtime-objects:gitter.im)
7
+
8
+ Make runtime objects available through `extra`.
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ pip install griffe-runtime-objects
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ [Enable](https://mkdocstrings.github.io/griffe/guide/users/extending/#using-extensions) the `griffe_runtime_objects` extension. Now all Griffe objects will have access to the corresponding runtime objects in their `extra` attribute, under the `runtime-objects` namespace:
19
+
20
+ ```pycon
21
+ >>> import griffe
22
+ >>> griffe_data = griffe.load("griffe", extensions=griffe.load_extensions("griffe_runtime_objects"), resolve_aliases=True)
23
+ >>> griffe_data["parse"].extra
24
+ defaultdict(<class 'dict'>, {'runtime-objects': {'object': <function parse at 0x78685c951260>}})
25
+ >>> griffe_data["Module"].extra
26
+ defaultdict(<class 'dict'>, {'runtime-objects': {'object': <class '_griffe.models.Module'>}})
27
+ ```
28
+
29
+ This extension can be useful in custom templates of mkdocstrings-python, to iterate on an object value or attributes.
30
+
31
+ With MkDocs:
32
+
33
+ ```yaml
34
+ plugins:
35
+ - mkdocstrings:
36
+ handlers:
37
+ python:
38
+ options:
39
+ extensions:
40
+ - griffe_runtime_objects
41
+ ```
42
+
43
+ ## Sponsors
44
+
45
+ <!-- sponsors-start -->
46
+
47
+ <div id="premium-sponsors" style="text-align: center;">
48
+
49
+ <div id="silver-sponsors"><b>Silver sponsors</b><p>
50
+ <a href="https://fastapi.tiangolo.com/"><img alt="FastAPI" src="https://raw.githubusercontent.com/tiangolo/fastapi/master/docs/en/docs/img/logo-margin/logo-teal.png" style="height: 200px; "></a><br>
51
+ </p></div>
52
+
53
+ <div id="bronze-sponsors"><b>Bronze sponsors</b><p>
54
+ <a href="https://www.nixtla.io/"><picture><source media="(prefers-color-scheme: light)" srcset="https://www.nixtla.io/img/logo/full-black.svg"><source media="(prefers-color-scheme: dark)" srcset="https://www.nixtla.io/img/logo/full-white.svg"><img alt="Nixtla" src="https://www.nixtla.io/img/logo/full-black.svg" style="height: 60px; "></picture></a><br>
55
+ </p></div>
56
+ </div>
57
+
58
+ ---
59
+
60
+ <div id="sponsors"><p>
61
+ <a href="https://github.com/ofek"><img alt="ofek" src="https://avatars.githubusercontent.com/u/9677399?u=386c330f212ce467ce7119d9615c75d0e9b9f1ce&v=4" style="height: 32px; border-radius: 100%;"></a>
62
+ <a href="https://github.com/samuelcolvin"><img alt="samuelcolvin" src="https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4" style="height: 32px; border-radius: 100%;"></a>
63
+ <a href="https://github.com/tlambert03"><img alt="tlambert03" src="https://avatars.githubusercontent.com/u/1609449?u=922abf0524b47739b37095e553c99488814b05db&v=4" style="height: 32px; border-radius: 100%;"></a>
64
+ <a href="https://github.com/ssbarnea"><img alt="ssbarnea" src="https://avatars.githubusercontent.com/u/102495?u=c7bd9ddf127785286fc939dd18cb02db0a453bce&v=4" style="height: 32px; border-radius: 100%;"></a>
65
+ <a href="https://github.com/femtomc"><img alt="femtomc" src="https://avatars.githubusercontent.com/u/34410036?u=f13a71daf2a9f0d2da189beaa94250daa629e2d8&v=4" style="height: 32px; border-radius: 100%;"></a>
66
+ <a href="https://github.com/cmarqu"><img alt="cmarqu" src="https://avatars.githubusercontent.com/u/360986?v=4" style="height: 32px; border-radius: 100%;"></a>
67
+ <a href="https://github.com/kolenaIO"><img alt="kolenaIO" src="https://avatars.githubusercontent.com/u/77010818?v=4" style="height: 32px; border-radius: 100%;"></a>
68
+ <a href="https://github.com/ramnes"><img alt="ramnes" src="https://avatars.githubusercontent.com/u/835072?u=3fca03c3ba0051e2eb652b1def2188a94d1e1dc2&v=4" style="height: 32px; border-radius: 100%;"></a>
69
+ <a href="https://github.com/machow"><img alt="machow" src="https://avatars.githubusercontent.com/u/2574498?u=c41e3d2f758a05102d8075e38d67b9c17d4189d7&v=4" style="height: 32px; border-radius: 100%;"></a>
70
+ <a href="https://github.com/BenHammersley"><img alt="BenHammersley" src="https://avatars.githubusercontent.com/u/99436?u=4499a7b507541045222ee28ae122dbe3c8d08ab5&v=4" style="height: 32px; border-radius: 100%;"></a>
71
+ <a href="https://github.com/trevorWieland"><img alt="trevorWieland" src="https://avatars.githubusercontent.com/u/28811461?u=74cc0e3756c1d4e3d66b5c396e1d131ea8a10472&v=4" style="height: 32px; border-radius: 100%;"></a>
72
+ <a href="https://github.com/MarcoGorelli"><img alt="MarcoGorelli" src="https://avatars.githubusercontent.com/u/33491632?u=7de3a749cac76a60baca9777baf71d043a4f884d&v=4" style="height: 32px; border-radius: 100%;"></a>
73
+ <a href="https://github.com/analog-cbarber"><img alt="analog-cbarber" src="https://avatars.githubusercontent.com/u/7408243?u=642fc2bdcc9904089c62fe5aec4e03ace32da67d&v=4" style="height: 32px; border-radius: 100%;"></a>
74
+ <a href="https://github.com/OdinManiac"><img alt="OdinManiac" src="https://avatars.githubusercontent.com/u/22727172?u=36ab20970f7f52ae8e7eb67b7fcf491fee01ac22&v=4" style="height: 32px; border-radius: 100%;"></a>
75
+ <a href="https://github.com/rstudio-sponsorship"><img alt="rstudio-sponsorship" src="https://avatars.githubusercontent.com/u/58949051?u=0c471515dd18111be30dfb7669ed5e778970959b&v=4" style="height: 32px; border-radius: 100%;"></a>
76
+ <a href="https://github.com/schlich"><img alt="schlich" src="https://avatars.githubusercontent.com/u/21191435?u=6f1240adb68f21614d809ae52d66509f46b1e877&v=4" style="height: 32px; border-radius: 100%;"></a>
77
+ <a href="https://github.com/butterlyn"><img alt="butterlyn" src="https://avatars.githubusercontent.com/u/53323535?v=4" style="height: 32px; border-radius: 100%;"></a>
78
+ <a href="https://github.com/livingbio"><img alt="livingbio" src="https://avatars.githubusercontent.com/u/10329983?v=4" style="height: 32px; border-radius: 100%;"></a>
79
+ <a href="https://github.com/NemetschekAllplan"><img alt="NemetschekAllplan" src="https://avatars.githubusercontent.com/u/912034?v=4" style="height: 32px; border-radius: 100%;"></a>
80
+ <a href="https://github.com/EricJayHartman"><img alt="EricJayHartman" src="https://avatars.githubusercontent.com/u/9259499?u=7e58cc7ec0cd3e85b27aec33656aa0f6612706dd&v=4" style="height: 32px; border-radius: 100%;"></a>
81
+ <a href="https://github.com/15r10nk"><img alt="15r10nk" src="https://avatars.githubusercontent.com/u/44680962?u=f04826446ff165742efa81e314bd03bf1724d50e&v=4" style="height: 32px; border-radius: 100%;"></a>
82
+ <a href="https://github.com/activeloopai"><img alt="activeloopai" src="https://avatars.githubusercontent.com/u/34816118?v=4" style="height: 32px; border-radius: 100%;"></a>
83
+ <a href="https://github.com/roboflow"><img alt="roboflow" src="https://avatars.githubusercontent.com/u/53104118?v=4" style="height: 32px; border-radius: 100%;"></a>
84
+ <a href="https://github.com/cmclaughlin"><img alt="cmclaughlin" src="https://avatars.githubusercontent.com/u/1061109?u=ddf6eec0edd2d11c980f8c3aa96e3d044d4e0468&v=4" style="height: 32px; border-radius: 100%;"></a>
85
+ <a href="https://github.com/blaisep"><img alt="blaisep" src="https://avatars.githubusercontent.com/u/254456?u=97d584b7c0a6faf583aa59975df4f993f671d121&v=4" style="height: 32px; border-radius: 100%;"></a>
86
+ <a href="https://github.com/RapidataAI"><img alt="RapidataAI" src="https://avatars.githubusercontent.com/u/104209891?v=4" style="height: 32px; border-radius: 100%;"></a>
87
+ <a href="https://github.com/rodolphebarbanneau"><img alt="rodolphebarbanneau" src="https://avatars.githubusercontent.com/u/46493454?u=6c405452a40c231cdf0b68e97544e07ee956a733&v=4" style="height: 32px; border-radius: 100%;"></a>
88
+ <a href="https://github.com/theSymbolSyndicate"><img alt="theSymbolSyndicate" src="https://avatars.githubusercontent.com/u/111542255?v=4" style="height: 32px; border-radius: 100%;"></a>
89
+ <a href="https://github.com/blakeNaccarato"><img alt="blakeNaccarato" src="https://avatars.githubusercontent.com/u/20692450?u=bb919218be30cfa994514f4cf39bb2f7cf952df4&v=4" style="height: 32px; border-radius: 100%;"></a>
90
+ <a href="https://github.com/ChargeStorm"><img alt="ChargeStorm" src="https://avatars.githubusercontent.com/u/26000165?v=4" style="height: 32px; border-radius: 100%;"></a>
91
+ <a href="https://github.com/Alphadelta14"><img alt="Alphadelta14" src="https://avatars.githubusercontent.com/u/480845?v=4" style="height: 32px; border-radius: 100%;"></a>
92
+ <a href="https://github.com/Cusp-AI"><img alt="Cusp-AI" src="https://avatars.githubusercontent.com/u/178170649?v=4" style="height: 32px; border-radius: 100%;"></a>
93
+ </p></div>
94
+
95
+
96
+ *And 7 more private sponsor(s).*
97
+
98
+ <!-- sponsors-end -->
@@ -1,34 +1,14 @@
1
- target-version = "py39"
1
+ target-version = "py310"
2
2
  line-length = 120
3
+ output-format = "concise"
3
4
 
4
5
  [lint]
5
6
  exclude = [
6
7
  "tests/fixtures/*.py",
7
8
  ]
8
- select = [
9
- "A", "ANN", "ARG",
10
- "B", "BLE",
11
- "C", "C4",
12
- "COM",
13
- "D", "DTZ",
14
- "E", "ERA", "EXE",
15
- "F", "FBT",
16
- "G",
17
- "I", "ICN", "INP", "ISC",
18
- "N",
19
- "PGH", "PIE", "PL", "PLC", "PLE", "PLR", "PLW", "PT", "PYI",
20
- "Q",
21
- "RUF", "RSE", "RET",
22
- "S", "SIM", "SLF",
23
- "T", "T10", "T20", "TCH", "TID", "TRY",
24
- "UP",
25
- "W",
26
- "YTT",
27
- ]
9
+ select = ["ALL"]
28
10
  ignore = [
29
11
  "A001", # Variable is shadowing a Python builtin
30
- "ANN101", # Missing type annotation for self
31
- "ANN102", # Missing type annotation for cls
32
12
  "ANN204", # Missing return type annotation for special method __str__
33
13
  "ANN401", # Dynamically typed expressions (typing.Any) are disallowed
34
14
  "ARG005", # Unused lambda argument
@@ -36,13 +16,18 @@ ignore = [
36
16
  "D105", # Missing docstring in magic method
37
17
  "D417", # Missing argument description in the docstring
38
18
  "E501", # Line too long
19
+ "EM101", # String literal when raising exception
20
+ "EM102", # f-string when raising exception
39
21
  "ERA001", # Commented out code
22
+ "FIX", # TODO, FIXME, etc.
40
23
  "G004", # Logging statement uses f-string
41
24
  "PLR0911", # Too many return statements
42
25
  "PLR0912", # Too many branches
43
26
  "PLR0913", # Too many arguments to function call
44
27
  "PLR0915", # Too many statements
45
28
  "SLF001", # Private member accessed
29
+ "TD002", # Missing author in TODO
30
+ "TD003", # Missing issue link for TODO
46
31
  "TRY003", # Avoid specifying long messages outside the exception class
47
32
  ]
48
33
 
@@ -0,0 +1,6 @@
1
+ [src]
2
+ exclude = ["tests/fixtures"]
3
+
4
+ [terminal]
5
+ error-on-warning = true
6
+ output-format = "concise"
@@ -23,11 +23,10 @@
23
23
  "name": "docs",
24
24
  "type": "debugpy",
25
25
  "request": "launch",
26
- "module": "mkdocs",
26
+ "module": "zensical",
27
27
  "justMyCode": false,
28
28
  "args": [
29
29
  "serve",
30
- "-v"
31
30
  ]
32
31
  },
33
32
  {
@@ -4,9 +4,6 @@
4
4
  "**/.venvs*/**": true,
5
5
  "**/venv*/**": true
6
6
  },
7
- "mypy-type-checker.args": [
8
- "--config-file=config/mypy.ini"
9
- ],
10
7
  "python.testing.unittestEnabled": false,
11
8
  "python.testing.pytestEnabled": true,
12
9
  "python.testing.pytestArgs": [
@@ -19,6 +16,7 @@
19
16
  "ruff.lint.args": [
20
17
  "--config=config/ruff.toml"
21
18
  ],
19
+ "ty.configurationFile": "config/ty.toml",
22
20
  "yaml.schemas": {
23
21
  "https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml"
24
22
  },
@@ -1,5 +1,5 @@
1
1
  <!-- Giscus -->
2
- <!-- https://squidfunk.github.io/mkdocs-material/setup/adding-a-comment-system/#giscus-integration -->
2
+ <!-- https://zensical.org/docs/setup/comment-system/#giscus-integration -->
3
3
  <div id="feedback" style="display: none;">
4
4
  <h2 id="__comments">Feedback</h2>
5
5
  <script src="https://giscus.app/client.js"
@@ -0,0 +1,21 @@
1
+ /* Mark external links as such. */
2
+ a.external::after,
3
+ a.autorefs-external::after {
4
+ /* https://primer.style/octicons/arrow-up-right-24 */
5
+ mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.25 15.5a.75.75 0 00.75-.75v-9a.75.75 0 00-.75-.75h-9a.75.75 0 000 1.5h7.19L6.22 16.72a.75.75 0 101.06 1.06L17.5 7.56v7.19c0 .414.336.75.75.75z"></path></svg>');
6
+ -webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.25 15.5a.75.75 0 00.75-.75v-9a.75.75 0 00-.75-.75h-9a.75.75 0 000 1.5h7.19L6.22 16.72a.75.75 0 101.06 1.06L17.5 7.56v7.19c0 .414.336.75.75.75z"></path></svg>');
7
+ content: ' ';
8
+
9
+ display: inline-block;
10
+ vertical-align: middle;
11
+ position: relative;
12
+
13
+ height: 1em;
14
+ width: 1em;
15
+ background-color: currentColor;
16
+ }
17
+
18
+ a.external:hover::after,
19
+ a.autorefs-external:hover::after {
20
+ background-color: var(--md-accent-fg-color);
21
+ }
@@ -5,16 +5,12 @@ from __future__ import annotations
5
5
  import os
6
6
  import re
7
7
  import sys
8
- from contextlib import contextmanager
9
- from importlib.metadata import version as pkgversion
10
8
  from pathlib import Path
11
9
  from typing import TYPE_CHECKING
12
10
 
13
11
  from duty import duty, tools
14
12
 
15
13
  if TYPE_CHECKING:
16
- from collections.abc import Iterator
17
-
18
14
  from duty.context import Context
19
15
 
20
16
 
@@ -26,7 +22,7 @@ WINDOWS = os.name == "nt"
26
22
  PTY = not WINDOWS and not CI
27
23
  MULTIRUN = os.environ.get("MULTIRUN", "0") == "1"
28
24
  PY_VERSION = f"{sys.version_info.major}{sys.version_info.minor}"
29
- PY_DEV = "314"
25
+ PY_DEV = "315"
30
26
 
31
27
 
32
28
  def pyprefix(title: str) -> str:
@@ -36,22 +32,10 @@ def pyprefix(title: str) -> str:
36
32
  return title
37
33
 
38
34
 
39
- @contextmanager
40
- def material_insiders() -> Iterator[bool]:
41
- if "+insiders" in pkgversion("mkdocs-material"):
42
- os.environ["MATERIAL_INSIDERS"] = "true"
43
- try:
44
- yield True
45
- finally:
46
- os.environ.pop("MATERIAL_INSIDERS")
47
- else:
48
- yield False
49
-
50
-
51
35
  def _get_changelog_version() -> str:
52
36
  changelog_version_re = re.compile(r"^## \[(\d+\.\d+\.\d+)\].*$")
53
37
  with Path(__file__).parent.joinpath("CHANGELOG.md").open("r", encoding="utf8") as file:
54
- return next(filter(bool, map(changelog_version_re.match, file))).group(1) # type: ignore[union-attr]
38
+ return next(filter(bool, map(changelog_version_re.match, file))).group(1) # ty: ignore[invalid-argument-type]
55
39
 
56
40
 
57
41
  @duty
@@ -74,7 +58,7 @@ def check(ctx: Context) -> None:
74
58
  def check_quality(ctx: Context) -> None:
75
59
  """Check the code quality."""
76
60
  ctx.run(
77
- tools.ruff.check(*PY_SRC_LIST, config="config/ruff.toml"),
61
+ tools.ruff.check(*PY_SRC_LIST, config="config/ruff.toml", color=True),
78
62
  title=pyprefix("Checking code quality"),
79
63
  )
80
64
 
@@ -82,21 +66,23 @@ def check_quality(ctx: Context) -> None:
82
66
  @duty(nofail=PY_VERSION == PY_DEV)
83
67
  def check_docs(ctx: Context) -> None:
84
68
  """Check if the documentation builds correctly."""
85
- Path("htmlcov").mkdir(parents=True, exist_ok=True)
86
- Path("htmlcov/index.html").touch(exist_ok=True)
87
- with material_insiders():
88
- ctx.run(
89
- tools.mkdocs.build(strict=True, verbose=True),
90
- title=pyprefix("Building documentation"),
91
- )
69
+ ctx.run(
70
+ tools.zensical.build(strict=True),
71
+ title=pyprefix("Building documentation"),
72
+ )
92
73
 
93
74
 
94
75
  @duty(nofail=PY_VERSION == PY_DEV)
95
76
  def check_types(ctx: Context) -> None:
96
77
  """Check that the code is correctly typed."""
97
- os.environ["FORCE_COLOR"] = "1"
78
+ py = f"{sys.version_info.major}.{sys.version_info.minor}"
98
79
  ctx.run(
99
- tools.mypy(*PY_SRC_LIST, config_file="config/mypy.ini"),
80
+ tools.ty.check(
81
+ *PY_SRC_LIST,
82
+ config_file="config/ty.toml",
83
+ color=True,
84
+ python_version=py,
85
+ ),
100
86
  title=pyprefix("Type-checking"),
101
87
  )
102
88
 
@@ -119,22 +105,31 @@ def docs(ctx: Context, *cli_args: str, host: str = "127.0.0.1", port: int = 8000
119
105
  host: The host to serve the docs from.
120
106
  port: The port to serve the docs on.
121
107
  """
122
- with material_insiders():
123
- ctx.run(
124
- tools.mkdocs.serve(dev_addr=f"{host}:{port}").add_args(*cli_args),
125
- title="Serving documentation",
126
- capture=False,
127
- )
108
+ ctx.run(
109
+ tools.zensical.serve(dev_addr=f"{host}:{port}").add_args(*cli_args),
110
+ title="Serving documentation",
111
+ capture=False,
112
+ )
128
113
 
129
114
 
130
115
  @duty
131
116
  def docs_deploy(ctx: Context) -> None:
132
117
  """Deploy the documentation to GitHub pages."""
133
- os.environ["DEPLOY"] = "true"
134
- with material_insiders() as insiders:
135
- if not insiders:
136
- ctx.run(lambda: False, title="Not deploying docs without Material for MkDocs Insiders!")
137
- ctx.run(tools.mkdocs.gh_deploy(force=True), title="Deploying documentation")
118
+ from ghp_import import ghp_import # noqa: PLC0415
119
+
120
+ ctx.run(tools.zensical.build(), title="Building documentation site")
121
+ ctx.run(
122
+ ghp_import,
123
+ kwargs={
124
+ "srcdir": "site",
125
+ "mesg": "chore: Update documentation",
126
+ "push": True,
127
+ "force": True,
128
+ },
129
+ title="Deploying site to GitHub Pages",
130
+ command="ghp-import site -fpm 'chore: Update documentation'",
131
+ pty=PTY,
132
+ )
138
133
 
139
134
 
140
135
  @duty
@@ -151,8 +146,8 @@ def format(ctx: Context) -> None:
151
146
  def build(ctx: Context) -> None:
152
147
  """Build source and wheel distributions."""
153
148
  ctx.run(
154
- tools.build(),
155
- title="Building source and wheel distributions",
149
+ ["uv", "build"],
150
+ title="Building distributions",
156
151
  pty=PTY,
157
152
  )
158
153
 
@@ -162,10 +157,10 @@ def publish(ctx: Context) -> None:
162
157
  """Publish source and wheel distributions to PyPI."""
163
158
  if not Path("dist").exists():
164
159
  ctx.run("false", title="No distribution files found")
165
- dists = [str(dist) for dist in Path("dist").iterdir()]
160
+ dists = [str(dist) for dist in Path("dist").iterdir() if dist.suffix in (".tar.gz", ".whl")]
166
161
  ctx.run(
167
162
  tools.twine.upload(*dists, skip_existing=True),
168
- title="Publishing source and wheel distributions to PyPI",
163
+ title="Publishing distributions to PyPI",
169
164
  pty=PTY,
170
165
  )
171
166
 
@@ -34,8 +34,10 @@ classifiers = [
34
34
  "Topic :: Utilities",
35
35
  "Typing :: Typed",
36
36
  ]
37
- dependencies = []
38
- version = "0.3.0"
37
+ dependencies = [
38
+ "griffelib>=2.0",
39
+ ]
40
+ version = "0.3.1"
39
41
 
40
42
  [project.urls]
41
43
  Homepage = "https://mkdocstrings.github.io/griffe-runtime-objects"
@@ -54,7 +56,6 @@ getter = "scripts.get_version:get_version"
54
56
  [tool.pdm.build]
55
57
  excludes = [
56
58
  "**/.pytest_cache",
57
- "**/.mypy_cache",
58
59
  ]
59
60
  source-includes = [
60
61
  "config",
@@ -63,7 +64,7 @@ source-includes = [
63
64
  "share",
64
65
  "tests",
65
66
  "duties.py",
66
- "mkdocs.yml",
67
+ "zensical.toml",
67
68
  "*.md",
68
69
  "LICENSE",
69
70
  ]
@@ -82,32 +83,27 @@ default-groups = [
82
83
 
83
84
  [dependency-groups]
84
85
  maintain = [
85
- "build>=1.2",
86
86
  "git-changelog>=2.5",
87
87
  "twine>=5.1",
88
88
  "yore>=0.3.3",
89
89
  ]
90
90
  ci = [
91
91
  "duty>=1.6",
92
- "ruff>=0.4",
92
+ "griffe>=2.0",
93
93
  "pytest>=8.2",
94
94
  "pytest-cov>=5.0",
95
95
  "pytest-randomly>=3.15",
96
96
  "pytest-xdist>=3.6",
97
- "mypy>=1.10",
97
+ "ruff>=0.4",
98
+ "ty>=0.0.14",
98
99
  "types-markdown>=3.6",
99
100
  "types-pyyaml>=6.0",
100
101
  ]
101
102
  docs = [
103
+ "ghp-import>=2.1",
102
104
  "markdown-callouts>=0.4",
103
105
  "markdown-exec>=1.8",
104
- "mkdocs>=1.6",
105
- "mkdocs-coverage>=1.0",
106
- "mkdocs-git-revision-date-localized-plugin>=1.2",
107
- "mkdocs-llmstxt>=0.2",
108
- "mkdocs-material>=9.5",
109
- "mkdocs-minify-plugin>=0.8",
110
- "mkdocs-section-index>=0.3",
111
106
  "mkdocstrings[python]>=0.29",
112
107
  "tomli>=2.0; python_version < '3.11'",
108
+ "zensical>=0.0.21",
113
109
  ]