pyrefdev 2025.5__tar.gz → 2025.6__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 (119) hide show
  1. {pyrefdev-2025.5 → pyrefdev-2025.6}/.gitignore +1 -1
  2. pyrefdev-2025.6/.pre-commit-config.yaml +10 -0
  3. {pyrefdev-2025.5 → pyrefdev-2025.6}/CHANGELOG.md +6 -0
  4. pyrefdev-2025.6/CLAUDE.md +51 -0
  5. {pyrefdev-2025.5 → pyrefdev-2025.6}/PKG-INFO +11 -9
  6. {pyrefdev-2025.5 → pyrefdev-2025.6}/README.md +5 -5
  7. {pyrefdev-2025.5 → pyrefdev-2025.6}/pyproject.toml +7 -4
  8. pyrefdev-2025.6/src/pyrefdev/__main__.py +42 -0
  9. pyrefdev-2025.6/src/pyrefdev/_version.py +1 -0
  10. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/config.py +2 -0
  11. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/crawl_docs.py +4 -6
  12. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/requests.py +2 -6
  13. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/update_landing_page.py +1 -1
  14. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/__init__.py +1 -1
  15. pyrefdev-2025.6/src/pyrefdev/mapping/cyclopts.py +257 -0
  16. pyrefdev-2025.6/src/pyrefdev/mapping/yib.py +10 -0
  17. pyrefdev-2025.6/src/pyrefdev/server.py +35 -0
  18. pyrefdev-2025.6/static/logo128.png +0 -0
  19. {pyrefdev-2025.5 → pyrefdev-2025.6/templates}/index.html +40 -32
  20. {pyrefdev-2025.5 → pyrefdev-2025.6}/uv.lock +167 -7
  21. pyrefdev-2025.5/src/pyrefdev/__main__.py +0 -27
  22. pyrefdev-2025.5/src/pyrefdev/_version.py +0 -1
  23. pyrefdev-2025.5/src/pyrefdev/server.py +0 -21
  24. {pyrefdev-2025.5 → pyrefdev-2025.6}/.github/workflows/ci.yml +0 -0
  25. {pyrefdev-2025.5 → pyrefdev-2025.6}/.github/workflows/pypi_upload.yml +0 -0
  26. {pyrefdev-2025.5 → pyrefdev-2025.6}/LICENSE +0 -0
  27. {pyrefdev-2025.5 → pyrefdev-2025.6}/pyrefdev.service +0 -0
  28. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/__init__.py +0 -0
  29. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/__main__.py +0 -0
  30. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/add_docs.py +0 -0
  31. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/parse_docs.py +0 -0
  32. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/schema.py +0 -0
  33. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/indexer/update_docs.py +0 -0
  34. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/__python__.py +0 -0
  35. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/aiohttp.py +0 -0
  36. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/aioitertools.py +0 -0
  37. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/aiosignal.py +0 -0
  38. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/anyio.py +0 -0
  39. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/apache-beam.py +0 -0
  40. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/arrow.py +0 -0
  41. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/attrs.py +0 -0
  42. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/azure-identity.py +0 -0
  43. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/boto3.py +0 -0
  44. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/botocore.py +0 -0
  45. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/cachetools.py +0 -0
  46. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/cattrs.py +0 -0
  47. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/charset-normalizer.py +0 -0
  48. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/click.py +0 -0
  49. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/coverage.py +0 -0
  50. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/cryptography.py +0 -0
  51. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/distlib.py +0 -0
  52. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/fastapi.py +0 -0
  53. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/fastjsonschema.py +0 -0
  54. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/filelock.py +0 -0
  55. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/flask.py +0 -0
  56. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/frozenlist.py +0 -0
  57. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/fsspec.py +0 -0
  58. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/google-api-core.py +0 -0
  59. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/google-auth.py +0 -0
  60. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/grpcio.py +0 -0
  61. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/h11.py +0 -0
  62. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/h5py.py +0 -0
  63. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/httplib2.py +0 -0
  64. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/ipython.py +0 -0
  65. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/jinja2.py +0 -0
  66. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/jsonschema.py +0 -0
  67. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/jupyter-core.py +0 -0
  68. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/libcst.py +0 -0
  69. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/markupsafe.py +0 -0
  70. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/matplotlib.py +0 -0
  71. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/more-itertools.py +0 -0
  72. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/multidict.py +0 -0
  73. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/nbformat.py +0 -0
  74. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/networkx.py +0 -0
  75. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/numba.py +0 -0
  76. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/numpy.py +0 -0
  77. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/oauthlib.py +0 -0
  78. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/packaging.py +0 -0
  79. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pandas.py +0 -0
  80. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pathspec.py +0 -0
  81. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pillow.py +0 -0
  82. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/platformdirs.py +0 -0
  83. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pluggy.py +0 -0
  84. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/propcache.py +0 -0
  85. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/protobuf.py +0 -0
  86. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/psutil.py +0 -0
  87. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pyOpenSSL.py +0 -0
  88. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pyarrow.py +0 -0
  89. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pyasn1.py +0 -0
  90. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pydantic-core.py +0 -0
  91. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pydantic.py +0 -0
  92. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pygments.py +0 -0
  93. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pyjwt.py +0 -0
  94. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pyparsing.py +0 -0
  95. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/pytest.py +0 -0
  96. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/python-dateutil.py +0 -0
  97. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/requests-oauthlib.py +0 -0
  98. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/requests-toolbelt.py +0 -0
  99. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/requests.py +0 -0
  100. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/rich.py +0 -0
  101. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/rpds-py.py +0 -0
  102. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/s3fs.py +0 -0
  103. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/scikit-learn.py +0 -0
  104. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/scipy.py +0 -0
  105. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/semver.py +0 -0
  106. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/setuptools.py +0 -0
  107. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/six.py +0 -0
  108. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/sniffio.py +0 -0
  109. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/sqlalchemy.py +0 -0
  110. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/tomlkit.py +0 -0
  111. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/torch.py +0 -0
  112. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/tox.py +0 -0
  113. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/trio.py +0 -0
  114. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/typing-extensions.py +0 -0
  115. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/urllib3.py +0 -0
  116. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/werkzeug.py +0 -0
  117. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/wrapt.py +0 -0
  118. {pyrefdev-2025.5 → pyrefdev-2025.6}/src/pyrefdev/mapping/yarl.py +0 -0
  119. {pyrefdev-2025.5 → pyrefdev-2025.6}/tests/test_pyrefdev.py +0 -0
@@ -1,5 +1,5 @@
1
1
  .DS_Store
2
- docs/
2
+ api-docs/
3
3
 
4
4
  # Hatch-managed version file
5
5
  src/pyrefdev/_version.py
@@ -0,0 +1,10 @@
1
+ repos:
2
+ - repo: local
3
+ hooks:
4
+ - id: update-landing-page
5
+ name: Update landing page
6
+ language: system
7
+ entry: uv run pyrefdev-indexer update-landing-page
8
+ pass_filenames: false
9
+ files: \.(py|yaml)$
10
+ verbose: true
@@ -4,6 +4,12 @@
4
4
 
5
5
  Nothing noticeable unreleased.
6
6
 
7
+ ## v2025.6
8
+
9
+ - Added a `-p/--print` flag to the `pyrefdev` CLI to print the URL instead of opening it in the browser.
10
+ - Support [cyclopts](https://cyclopts.readthedocs.io/en/latest/).
11
+ - Support [yib](https://yib.readthedocs.io/en/latest/).
12
+
7
13
  ## v2025.5
8
14
 
9
15
  - Added `add-docs`, `update-docs`, and `update-landing-page` commands to `pyrefdev-indexer`.
@@ -0,0 +1,51 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Architecture
6
+
7
+ The project has several components:
8
+
9
+ 1. **Web Server** (`src/pyrefdev/server.py`): FastAPI application that serves redirects based on symbol lookup. `index.html` is the landing page of the server
10
+ 2. **CLI Tool** (`src/pyrefdev/__main__.py`): Command-line interface that opens documentation in browser
11
+ 3. **Indexer** (`src/pyrefdev/indexer/`): Tools for crawling, parsing, and managing documentation mappings
12
+ 4. **Mapping System** (`src/pyrefdev/mapping/`): Individual Python files per package containing symbol-to-URL mappings
13
+
14
+ ## Common Commands
15
+
16
+ ### Development Setup
17
+ ```bash
18
+ uv sync --all-extras --locked
19
+ ```
20
+
21
+ ### Testing
22
+ ```bash
23
+ uv run pytest
24
+ ```
25
+
26
+ ### Run Web Server
27
+ ```bash
28
+ uv run uvicorn pyrefdev.server:app --reload
29
+ ```
30
+
31
+ ### Run CLI Tool
32
+ ```bash
33
+ pyrefdev <symbol>
34
+ ```
35
+
36
+ ### Indexer Operations
37
+ ```bash
38
+ pyrefdev-indexer add-docs --docs-directory api-docs --package <package> --url <API reference doc root URL>
39
+ pyrefdev-indexer crawl-docs --docs-directory api-docs --package <package>
40
+ pyrefdev-indexer parse-docs --docs-directory api-docs --package <package>
41
+ pyrefdev-indexer update-docs --docs-directory api-docs --package <package>
42
+ pyrefdev-indexer update-landing-page
43
+ ```
44
+
45
+ ## Development Workflow
46
+
47
+ - **Testing**: Run pytest to ensure mappings work correctly
48
+
49
+ ## Important Notes
50
+
51
+ - Server deployment uses systemd and is configured in `pyrefdev.service`
@@ -1,9 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyrefdev
3
- Version: 2025.5
3
+ Version: 2025.6
4
4
  Summary: The entry point to Python reference docs
5
- Project-URL: Home, https://pyref.dev
5
+ Project-URL: Homepage, https://pyref.dev
6
6
  Project-URL: Source, https://github.com/mangoumbrella/pyref.dev
7
+ Project-URL: Changelog, https://github.com/mangoumbrella/pyref.dev/blob/main/CHANGELOG.md
7
8
  Author-email: Mango Umbrella LLC <hi@mangoumbrella.com>
8
9
  License-Expression: Apache-2.0
9
10
  License-File: LICENSE
@@ -22,11 +23,12 @@ Classifier: Programming Language :: Python :: 3.14
22
23
  Classifier: Programming Language :: Python :: Free Threading
23
24
  Classifier: Topic :: Documentation
24
25
  Requires-Python: >=3.10
26
+ Requires-Dist: cyclopts>=3.19.0
27
+ Requires-Dist: jinja2>=3.1.6
25
28
  Requires-Dist: packaging>=25.0
26
- Requires-Dist: yib>=0.2.0
29
+ Requires-Dist: yib>=0.3.0
27
30
  Provides-Extra: indexer
28
31
  Requires-Dist: beautifulsoup4>=4.13.4; extra == 'indexer'
29
- Requires-Dist: cyclopts>=3.19.0; extra == 'indexer'
30
32
  Requires-Dist: rich>=14.0.0; extra == 'indexer'
31
33
  Provides-Extra: server
32
34
  Requires-Dist: fastapi<1,>=0.115.12; extra == 'server'
@@ -53,10 +55,10 @@ Alternatively, you could also `pip install pyrefdev` and run the `pyrefdev` CLI
53
55
 
54
56
  ## Examples
55
57
 
56
- * https://pyref.dev/json
57
- * https://pyref.dev/pathlib.Path
58
- * https://pyref.dev/datetime.datetime.strftime
59
- * https://pyref.dev/numpy.array
58
+ * [pyref.dev/json](https://pyref.dev/json)
59
+ * [pyref.dev/pathlib.Path](https://pyref.dev/pathlib.Path)
60
+ * [pyref.dev/datetime.datetime.strftime](https://pyref.dev/datetime.datetime.strftime)
61
+ * [pyref.dev/numpy.array](https://pyref.dev/numpy.array)
60
62
 
61
63
  ## Supported packages
62
64
 
@@ -82,7 +84,7 @@ To update to a new version:
82
84
  ```bash
83
85
  > cd pyref.dev
84
86
  > git pull
85
- > uv sync --all-extras
87
+ > uv sync --all-extras --locked
86
88
  > systemctl restart pyrefdev.service
87
89
  ```
88
90
 
@@ -18,10 +18,10 @@ Alternatively, you could also `pip install pyrefdev` and run the `pyrefdev` CLI
18
18
 
19
19
  ## Examples
20
20
 
21
- * https://pyref.dev/json
22
- * https://pyref.dev/pathlib.Path
23
- * https://pyref.dev/datetime.datetime.strftime
24
- * https://pyref.dev/numpy.array
21
+ * [pyref.dev/json](https://pyref.dev/json)
22
+ * [pyref.dev/pathlib.Path](https://pyref.dev/pathlib.Path)
23
+ * [pyref.dev/datetime.datetime.strftime](https://pyref.dev/datetime.datetime.strftime)
24
+ * [pyref.dev/numpy.array](https://pyref.dev/numpy.array)
25
25
 
26
26
  ## Supported packages
27
27
 
@@ -47,7 +47,7 @@ To update to a new version:
47
47
  ```bash
48
48
  > cd pyref.dev
49
49
  > git pull
50
- > uv sync --all-extras
50
+ > uv sync --all-extras --locked
51
51
  > systemctl restart pyrefdev.service
52
52
  ```
53
53
 
@@ -30,14 +30,17 @@ keywords = [
30
30
  ]
31
31
  requires-python = ">=3.10"
32
32
  dependencies = [
33
+ "cyclopts>=3.19.0",
34
+ "jinja2>=3.1.6",
33
35
  "packaging>=25.0",
34
- "yib>=0.2.0",
36
+ "yib>=0.3.0",
35
37
  ]
36
38
  dynamic = ["version"]
37
39
 
38
40
  [project.urls]
39
- Home = "https://pyref.dev"
41
+ Homepage = "https://pyref.dev"
40
42
  Source = "https://github.com/mangoumbrella/pyref.dev"
43
+ Changelog = "https://github.com/mangoumbrella/pyref.dev/blob/main/CHANGELOG.md"
41
44
 
42
45
  [project.optional-dependencies]
43
46
  server = [
@@ -45,13 +48,12 @@ server = [
45
48
  "fastapi>=0.115.12,<1",
46
49
  ]
47
50
  indexer = [
48
- "cyclopts>=3.19.0",
49
51
  "rich>=14.0.0",
50
52
  "Beautifulsoup4>=4.13.4",
51
53
  ]
52
54
 
53
55
  [project.scripts]
54
- pyrefdev = "pyrefdev.__main__:main"
56
+ pyrefdev = "pyrefdev.__main__:app"
55
57
  pyrefdev-indexer = "pyrefdev.indexer.__main__:app"
56
58
 
57
59
  [tool.hatch.version]
@@ -66,4 +68,5 @@ version = "{version}"
66
68
  [dependency-groups]
67
69
  dev = [
68
70
  "pytest>=8.4.1",
71
+ "pre-commit>=4.2.0",
69
72
  ]
@@ -0,0 +1,42 @@
1
+ import webbrowser
2
+ import sys
3
+ from typing import Annotated
4
+
5
+ import cyclopts
6
+ from cyclopts import Parameter
7
+
8
+ import pyrefdev
9
+ from pyrefdev.mapping import MAPPING
10
+
11
+
12
+ app = cyclopts.App("pyrefdev", help=pyrefdev.__doc__)
13
+
14
+
15
+ @app.default
16
+ def main(
17
+ symbol: str,
18
+ /,
19
+ *,
20
+ should_print: Annotated[
21
+ bool,
22
+ Parameter(
23
+ name=["--print", "-p"],
24
+ negative="--no-print",
25
+ help="When true, print the API reference URL instead of opening it in the browser.",
26
+ ),
27
+ ] = False,
28
+ ):
29
+ if not (url := MAPPING.get(symbol)):
30
+ url = MAPPING.get(symbol.lower())
31
+ if url:
32
+ if should_print:
33
+ print(url)
34
+ else:
35
+ webbrowser.open_new_tab(url)
36
+ else:
37
+ print(f"{symbol} not found", file=sys.stderr)
38
+ sys.exit(1)
39
+
40
+
41
+ if __name__ == "__main__":
42
+ app()
@@ -0,0 +1 @@
1
+ version = "2025.6"
@@ -115,6 +115,8 @@ _packages = [
115
115
  Package(pypi="networkx", index_url="https://networkx.org/documentation/stable/reference/index.html"),
116
116
  Package(pypi="ipython", index_url="https://ipython.readthedocs.io/en/stable/"),
117
117
  Package(pypi="httplib2", index_url="https://httplib2.readthedocs.io/en/latest/"),
118
+ Package(pypi="cyclopts", index_url="https://cyclopts.readthedocs.io/en/latest/"),
119
+ Package(pypi="yib", index_url="https://yib.readthedocs.io/en/latest/"),
118
120
  # ENTRY-LINE-MARKER
119
121
  ]
120
122
  # fmt: on
@@ -64,8 +64,8 @@ def crawl_docs(
64
64
  )
65
65
  crawl_state = None
66
66
  elif package_version < crawled_version:
67
- console.print(
68
- f"[yellow]WARNING:[/yellow] {pkg}'s latest version {package_version!s} is older than previously crawled {crawl_state.package_version}"
67
+ console.warning(
68
+ f"{pkg}'s latest version {package_version!s} is older than previously crawled {crawl_state.package_version}"
69
69
  )
70
70
  else:
71
71
  crawl_state = None
@@ -196,9 +196,7 @@ class _Crawler:
196
196
  with urlopen(url) as f:
197
197
  content = f.read().decode("utf-8", "backslashreplace")
198
198
  except error.URLError as e:
199
- console.print(
200
- f"[yellow]WARNING:[/yellow] Failed to fetch url {url}, error: {e}"
201
- )
199
+ console.warning(f"Failed to fetch url {url}, error: {e}")
202
200
  self._failed_urls.append(url)
203
201
  return None
204
202
  maybe_redirected_url = f.url
@@ -233,7 +231,7 @@ class _Crawler:
233
231
  existing_content = output.read_text()
234
232
  if content == existing_content:
235
233
  return output
236
- console.print(f"[yellow]WARNING:[/yellow] Overriding {output!s}")
234
+ console.warning(f"Overriding {output!s}")
237
235
  output.write_text(content)
238
236
  return output
239
237
 
@@ -35,9 +35,7 @@ def fetch_package_version(package: Package) -> version.Version | None:
35
35
  pypi_info = json.loads(content)
36
36
  return version.parse(pypi_info["info"]["version"])
37
37
  except error.URLError as e:
38
- console.print(
39
- f"[yellow]WARNING:[/yellow] Failed to fetch pypi version for {package.pypi}, error: {e}"
40
- )
38
+ console.warning(f"Failed to fetch pypi version for {package.pypi}, error: {e}")
41
39
  return None
42
40
 
43
41
 
@@ -52,7 +50,5 @@ def _fetch_latest_cpython_version() -> version.Version | None:
52
50
  latest_version = latest
53
51
  return latest_version
54
52
  except error.URLError as e:
55
- console.print(
56
- f"[yellow]WARNING:[/yellow] Failed to fetch latest CPython version, error: {e}"
57
- )
53
+ console.warning(f"Failed to fetch latest CPython version, error: {e}")
58
54
  return None
@@ -13,7 +13,7 @@ def update_landing_page_with_packages(
13
13
  packages: dict[str, Package], file: Path | None = None
14
14
  ) -> None:
15
15
  if file is None:
16
- file = Path(__file__).parent.parent.parent.parent / "index.html"
16
+ file = Path(__file__).parent.parent.parent.parent / "templates" / "index.html"
17
17
  if not file.exists():
18
18
  console.fatal(f"{file} does not exist")
19
19
 
@@ -9,7 +9,7 @@ def load_mapping(verify_duplicates: bool) -> dict[str, str]:
9
9
  try:
10
10
  package_module = importlib.import_module(f"pyrefdev.mapping.{package}")
11
11
  except ImportError:
12
- console.print(f"[yellow]WARNING:[/yellow] Missing mapping for {package}")
12
+ console.warning(f"Missing mapping for {package}")
13
13
  continue
14
14
  package_mapping = getattr(package_module, "MAPPING")
15
15
  if verify_duplicates:
@@ -0,0 +1,257 @@
1
+ # fmt: off
2
+
3
+ MAPPING = {
4
+ "cyclopts": "https://cyclopts.readthedocs.io/en/latest/",
5
+ "cyclopts.app": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App",
6
+ "cyclopts.app.__call__": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.__call__",
7
+ "cyclopts.app.__getitem__": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.__getitem__",
8
+ "cyclopts.app.__iter__": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.__iter__",
9
+ "cyclopts.app.assemble_argument_collection": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.assemble_argument_collection",
10
+ "cyclopts.app.command": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.command",
11
+ "cyclopts.app.config": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.config",
12
+ "cyclopts.app.console": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.console",
13
+ "cyclopts.app.default": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.default",
14
+ "cyclopts.app.default_parameter": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.default_parameter",
15
+ "cyclopts.app.end_of_options_delimiter": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.end_of_options_delimiter",
16
+ "cyclopts.app.group": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.group",
17
+ "cyclopts.app.group_arguments": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.group_arguments",
18
+ "cyclopts.app.group_commands": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.group_commands",
19
+ "cyclopts.app.group_parameters": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.group_parameters",
20
+ "cyclopts.app.help": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.help",
21
+ "cyclopts.app.help_flags": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.help_flags",
22
+ "cyclopts.app.help_format": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.help_format",
23
+ "cyclopts.app.help_on_error": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.help_on_error",
24
+ "cyclopts.app.help_print": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.help_print",
25
+ "cyclopts.app.interactive_shell": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.interactive_shell",
26
+ "cyclopts.app.name": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.name",
27
+ "cyclopts.app.name_transform": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.name_transform",
28
+ "cyclopts.app.parse_args": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.parse_args",
29
+ "cyclopts.app.parse_commands": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.parse_commands",
30
+ "cyclopts.app.parse_known_args": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.parse_known_args",
31
+ "cyclopts.app.show": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.show",
32
+ "cyclopts.app.sort_key": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.sort_key",
33
+ "cyclopts.app.suppress_keyboard_interrupt": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.suppress_keyboard_interrupt",
34
+ "cyclopts.app.update": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.update",
35
+ "cyclopts.app.usage": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.usage",
36
+ "cyclopts.app.validator": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.validator",
37
+ "cyclopts.app.version": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.version",
38
+ "cyclopts.app.version_flags": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.version_flags",
39
+ "cyclopts.app.version_format": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.version_format",
40
+ "cyclopts.app.version_print": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.App.version_print",
41
+ "cyclopts.argument": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument",
42
+ "cyclopts.argument.append": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.append",
43
+ "cyclopts.argument.children": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.children",
44
+ "cyclopts.argument.children_recursive": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.children_recursive",
45
+ "cyclopts.argument.convert": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.convert",
46
+ "cyclopts.argument.convert_and_validate": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.convert_and_validate",
47
+ "cyclopts.argument.env_var_split": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.env_var_split",
48
+ "cyclopts.argument.field_info": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.field_info",
49
+ "cyclopts.argument.has_tokens": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.has_tokens",
50
+ "cyclopts.argument.hint": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.hint",
51
+ "cyclopts.argument.index": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.index",
52
+ "cyclopts.argument.keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.keys",
53
+ "cyclopts.argument.match": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.match",
54
+ "cyclopts.argument.name": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.name",
55
+ "cyclopts.argument.names": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.names",
56
+ "cyclopts.argument.negatives": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.negatives",
57
+ "cyclopts.argument.parameter": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.parameter",
58
+ "cyclopts.argument.required": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.required",
59
+ "cyclopts.argument.show": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.show",
60
+ "cyclopts.argument.show_default": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.show_default",
61
+ "cyclopts.argument.token_count": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.token_count",
62
+ "cyclopts.argument.tokens": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.tokens",
63
+ "cyclopts.argument.validate": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.validate",
64
+ "cyclopts.argument.value": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Argument.value",
65
+ "cyclopts.argumentcollection": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ArgumentCollection",
66
+ "cyclopts.argumentcollection.copy": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ArgumentCollection.copy",
67
+ "cyclopts.argumentcollection.filter_by": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ArgumentCollection.filter_by",
68
+ "cyclopts.argumentcollection.groups": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ArgumentCollection.groups",
69
+ "cyclopts.argumentcollection.match": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ArgumentCollection.match",
70
+ "cyclopts.coercionerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CoercionError",
71
+ "cyclopts.coercionerror.target_type": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CoercionError.target_type",
72
+ "cyclopts.coercionerror.token": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CoercionError.token",
73
+ "cyclopts.combinedshortoptionerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CombinedShortOptionError",
74
+ "cyclopts.commandcollisionerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CommandCollisionError",
75
+ "cyclopts.config": "https://cyclopts.readthedocs.io/en/latest/api.html",
76
+ "cyclopts.config.env": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Env",
77
+ "cyclopts.config.env.command": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Env.command",
78
+ "cyclopts.config.env.prefix": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Env.prefix",
79
+ "cyclopts.config.env.show": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Env.show",
80
+ "cyclopts.config.json": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Json",
81
+ "cyclopts.config.json.allow_unknown": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Json.allow_unknown",
82
+ "cyclopts.config.json.must_exist": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Json.must_exist",
83
+ "cyclopts.config.json.path": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Json.path",
84
+ "cyclopts.config.json.root_keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Json.root_keys",
85
+ "cyclopts.config.json.search_parents": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Json.search_parents",
86
+ "cyclopts.config.json.use_commands_as_keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Json.use_commands_as_keys",
87
+ "cyclopts.config.toml": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Toml",
88
+ "cyclopts.config.toml.allow_unknown": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Toml.allow_unknown",
89
+ "cyclopts.config.toml.must_exist": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Toml.must_exist",
90
+ "cyclopts.config.toml.path": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Toml.path",
91
+ "cyclopts.config.toml.root_keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Toml.root_keys",
92
+ "cyclopts.config.toml.search_parents": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Toml.search_parents",
93
+ "cyclopts.config.toml.use_commands_as_keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Toml.use_commands_as_keys",
94
+ "cyclopts.config.yaml": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Yaml",
95
+ "cyclopts.config.yaml.allow_unknown": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Yaml.allow_unknown",
96
+ "cyclopts.config.yaml.must_exist": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Yaml.must_exist",
97
+ "cyclopts.config.yaml.path": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Yaml.path",
98
+ "cyclopts.config.yaml.root_keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Yaml.root_keys",
99
+ "cyclopts.config.yaml.search_parents": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Yaml.search_parents",
100
+ "cyclopts.config.yaml.use_commands_as_keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.config.Yaml.use_commands_as_keys",
101
+ "cyclopts.cycloptserror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError",
102
+ "cyclopts.cycloptserror.app": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.app",
103
+ "cyclopts.cycloptserror.argument": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.argument",
104
+ "cyclopts.cycloptserror.command_chain": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.command_chain",
105
+ "cyclopts.cycloptserror.console": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.console",
106
+ "cyclopts.cycloptserror.msg": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.msg",
107
+ "cyclopts.cycloptserror.root_input_tokens": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.root_input_tokens",
108
+ "cyclopts.cycloptserror.target": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.target",
109
+ "cyclopts.cycloptserror.unused_tokens": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.unused_tokens",
110
+ "cyclopts.cycloptserror.verbose": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsError.verbose",
111
+ "cyclopts.cycloptspanel": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.CycloptsPanel",
112
+ "cyclopts.default_name_transform": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.default_name_transform",
113
+ "cyclopts.edit": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.edit",
114
+ "cyclopts.editordidnotchangeerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.EditorDidNotChangeError",
115
+ "cyclopts.editordidnotsaveerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.EditorDidNotSaveError",
116
+ "cyclopts.editorerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.EditorError",
117
+ "cyclopts.editornotfounderror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.EditorNotFoundError",
118
+ "cyclopts.env_var_split": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.env_var_split",
119
+ "cyclopts.field_info": "https://cyclopts.readthedocs.io/en/latest/api.html",
120
+ "cyclopts.field_info.fieldinfo": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.field_info.FieldInfo",
121
+ "cyclopts.group": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group",
122
+ "cyclopts.group.create_ordered": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group.create_ordered",
123
+ "cyclopts.group.default_parameter": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group.default_parameter",
124
+ "cyclopts.group.help": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group.help",
125
+ "cyclopts.group.name": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group.name",
126
+ "cyclopts.group.show": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group.show",
127
+ "cyclopts.group.sort_key": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group.sort_key",
128
+ "cyclopts.group.validator": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Group.validator",
129
+ "cyclopts.invalidcommanderror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError",
130
+ "cyclopts.invalidcommanderror.app": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.app",
131
+ "cyclopts.invalidcommanderror.argument": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.argument",
132
+ "cyclopts.invalidcommanderror.command_chain": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.command_chain",
133
+ "cyclopts.invalidcommanderror.console": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.console",
134
+ "cyclopts.invalidcommanderror.msg": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.msg",
135
+ "cyclopts.invalidcommanderror.root_input_tokens": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.root_input_tokens",
136
+ "cyclopts.invalidcommanderror.target": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.target",
137
+ "cyclopts.invalidcommanderror.unused_tokens": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.unused_tokens",
138
+ "cyclopts.invalidcommanderror.verbose": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.InvalidCommandError.verbose",
139
+ "cyclopts.missingargumenterror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.MissingArgumentError",
140
+ "cyclopts.missingargumenterror.tokens_so_far": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.MissingArgumentError.tokens_so_far",
141
+ "cyclopts.mixedargumenterror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.MixedArgumentError",
142
+ "cyclopts.parameter": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter",
143
+ "cyclopts.parameter.__call__": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.__call__",
144
+ "cyclopts.parameter.accepts_keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.accepts_keys",
145
+ "cyclopts.parameter.alias": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.alias",
146
+ "cyclopts.parameter.allow_leading_hyphen": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.allow_leading_hyphen",
147
+ "cyclopts.parameter.combine": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.combine",
148
+ "cyclopts.parameter.consume_multiple": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.consume_multiple",
149
+ "cyclopts.parameter.converter": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.converter",
150
+ "cyclopts.parameter.default": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.default",
151
+ "cyclopts.parameter.env_var": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.env_var",
152
+ "cyclopts.parameter.env_var_split": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.env_var_split",
153
+ "cyclopts.parameter.group": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.group",
154
+ "cyclopts.parameter.help": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.help",
155
+ "cyclopts.parameter.json_dict": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.json_dict",
156
+ "cyclopts.parameter.json_list": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.json_list",
157
+ "cyclopts.parameter.name": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.name",
158
+ "cyclopts.parameter.name_transform": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.name_transform",
159
+ "cyclopts.parameter.negative": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.negative",
160
+ "cyclopts.parameter.negative_bool": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.negative_bool",
161
+ "cyclopts.parameter.negative_iterable": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.negative_iterable",
162
+ "cyclopts.parameter.negative_none": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.negative_none",
163
+ "cyclopts.parameter.parse": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.parse",
164
+ "cyclopts.parameter.required": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.required",
165
+ "cyclopts.parameter.show": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.show",
166
+ "cyclopts.parameter.show_choices": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.show_choices",
167
+ "cyclopts.parameter.show_default": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.show_default",
168
+ "cyclopts.parameter.show_env_var": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.show_env_var",
169
+ "cyclopts.parameter.validator": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Parameter.validator",
170
+ "cyclopts.repeatargumenterror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.RepeatArgumentError",
171
+ "cyclopts.repeatargumenterror.token": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.RepeatArgumentError.token",
172
+ "cyclopts.run": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.run",
173
+ "cyclopts.token": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Token",
174
+ "cyclopts.token.implicit_value": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Token.implicit_value",
175
+ "cyclopts.token.index": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Token.index",
176
+ "cyclopts.token.keys": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Token.keys",
177
+ "cyclopts.token.keyword": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Token.keyword",
178
+ "cyclopts.token.source": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Token.source",
179
+ "cyclopts.token.value": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.Token.value",
180
+ "cyclopts.types": "https://cyclopts.readthedocs.io/en/latest/api.html",
181
+ "cyclopts.types.binpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.BinPath",
182
+ "cyclopts.types.csvpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.CsvPath",
183
+ "cyclopts.types.directory": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Directory",
184
+ "cyclopts.types.email": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Email",
185
+ "cyclopts.types.existingbinpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingBinPath",
186
+ "cyclopts.types.existingcsvpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingCsvPath",
187
+ "cyclopts.types.existingdirectory": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingDirectory",
188
+ "cyclopts.types.existingfile": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingFile",
189
+ "cyclopts.types.existingimagepath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingImagePath",
190
+ "cyclopts.types.existingjsonpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingJsonPath",
191
+ "cyclopts.types.existingmp4path": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingMp4Path",
192
+ "cyclopts.types.existingpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingPath",
193
+ "cyclopts.types.existingtomlpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingTomlPath",
194
+ "cyclopts.types.existingtxtpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingTxtPath",
195
+ "cyclopts.types.existingyamlpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ExistingYamlPath",
196
+ "cyclopts.types.file": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.File",
197
+ "cyclopts.types.hexuint16": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.HexUInt16",
198
+ "cyclopts.types.hexuint32": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.HexUInt32",
199
+ "cyclopts.types.hexuint64": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.HexUInt64",
200
+ "cyclopts.types.hexuint8": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.HexUInt8",
201
+ "cyclopts.types.imagepath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ImagePath",
202
+ "cyclopts.types.int16": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Int16",
203
+ "cyclopts.types.int32": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Int32",
204
+ "cyclopts.types.int64": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Int64",
205
+ "cyclopts.types.int8": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Int8",
206
+ "cyclopts.types.json": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Json",
207
+ "cyclopts.types.jsonpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.JsonPath",
208
+ "cyclopts.types.mp4path": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Mp4Path",
209
+ "cyclopts.types.negativefloat": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.NegativeFloat",
210
+ "cyclopts.types.negativeint": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.NegativeInt",
211
+ "cyclopts.types.nonnegativefloat": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.NonNegativeFloat",
212
+ "cyclopts.types.nonnegativeint": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.NonNegativeInt",
213
+ "cyclopts.types.nonpositivefloat": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.NonPositiveFloat",
214
+ "cyclopts.types.nonpositiveint": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.NonPositiveInt",
215
+ "cyclopts.types.port": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.Port",
216
+ "cyclopts.types.positivefloat": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.PositiveFloat",
217
+ "cyclopts.types.positiveint": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.PositiveInt",
218
+ "cyclopts.types.resolveddirectory": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ResolvedDirectory",
219
+ "cyclopts.types.resolvedexistingdirectory": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ResolvedExistingDirectory",
220
+ "cyclopts.types.resolvedexistingfile": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ResolvedExistingFile",
221
+ "cyclopts.types.resolvedexistingpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ResolvedExistingPath",
222
+ "cyclopts.types.resolvedfile": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ResolvedFile",
223
+ "cyclopts.types.resolvedpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.ResolvedPath",
224
+ "cyclopts.types.tomlpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.TomlPath",
225
+ "cyclopts.types.txtpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.TxtPath",
226
+ "cyclopts.types.uint16": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.UInt16",
227
+ "cyclopts.types.uint32": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.UInt32",
228
+ "cyclopts.types.uint64": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.UInt64",
229
+ "cyclopts.types.uint8": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.UInt8",
230
+ "cyclopts.types.url": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.URL",
231
+ "cyclopts.types.yamlpath": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.types.YamlPath",
232
+ "cyclopts.unknownoptionerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.UnknownOptionError",
233
+ "cyclopts.unknownoptionerror.argument_collection": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.UnknownOptionError.argument_collection",
234
+ "cyclopts.unknownoptionerror.token": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.UnknownOptionError.token",
235
+ "cyclopts.unset": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.UNSET",
236
+ "cyclopts.unusedclitokenserror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.UnusedCliTokensError",
237
+ "cyclopts.validationerror": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ValidationError",
238
+ "cyclopts.validationerror.exception_message": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ValidationError.exception_message",
239
+ "cyclopts.validationerror.group": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ValidationError.group",
240
+ "cyclopts.validationerror.value": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.ValidationError.value",
241
+ "cyclopts.validators": "https://cyclopts.readthedocs.io/en/latest/api.html",
242
+ "cyclopts.validators.all_or_none": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.all_or_none",
243
+ "cyclopts.validators.limitedchoice": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.LimitedChoice",
244
+ "cyclopts.validators.mutually_exclusive": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.mutually_exclusive",
245
+ "cyclopts.validators.mutuallyexclusive": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.MutuallyExclusive",
246
+ "cyclopts.validators.number": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Number",
247
+ "cyclopts.validators.number.gt": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Number.gt",
248
+ "cyclopts.validators.number.gte": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Number.gte",
249
+ "cyclopts.validators.number.lt": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Number.lt",
250
+ "cyclopts.validators.number.lte": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Number.lte",
251
+ "cyclopts.validators.number.modulo": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Number.modulo",
252
+ "cyclopts.validators.path": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Path",
253
+ "cyclopts.validators.path.dir_okay": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Path.dir_okay",
254
+ "cyclopts.validators.path.exists": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Path.exists",
255
+ "cyclopts.validators.path.ext": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Path.ext",
256
+ "cyclopts.validators.path.file_okay": "https://cyclopts.readthedocs.io/en/latest/api.html#cyclopts.validators.Path.file_okay",
257
+ }
@@ -0,0 +1,10 @@
1
+ # fmt: off
2
+
3
+ MAPPING = {
4
+ "yib": "https://yib.readthedocs.io/en/latest/",
5
+ "yib.yconsole": "https://yib.readthedocs.io/en/latest/yib.yconsole.html",
6
+ "yib.yconsole.console": "https://yib.readthedocs.io/en/latest/yib.yconsole.html#yib.yconsole.Console",
7
+ "yib.yconsole.console.error": "https://yib.readthedocs.io/en/latest/yib.yconsole.html#yib.yconsole.Console.error",
8
+ "yib.yconsole.console.fatal": "https://yib.readthedocs.io/en/latest/yib.yconsole.html#yib.yconsole.Console.fatal",
9
+ "yib.yconsole.console.warning": "https://yib.readthedocs.io/en/latest/yib.yconsole.html#yib.yconsole.Console.warning",
10
+ }