livery-toolroom 0.6.2__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 (103) hide show
  1. livery_toolroom-0.6.2/LICENSE +21 -0
  2. livery_toolroom-0.6.2/PKG-INFO +130 -0
  3. livery_toolroom-0.6.2/README.md +109 -0
  4. livery_toolroom-0.6.2/pyproject.toml +64 -0
  5. livery_toolroom-0.6.2/pyproject.toml.orig +74 -0
  6. livery_toolroom-0.6.2/src/livery/toolroom/__init__.py +1251 -0
  7. livery_toolroom-0.6.2/src/livery/toolroom/__init__.pyi +332 -0
  8. livery_toolroom-0.6.2/src/livery/toolroom/_colordata.py +47 -0
  9. livery_toolroom-0.6.2/src/livery/toolroom/_docs/api.md +41 -0
  10. livery_toolroom-0.6.2/src/livery/toolroom/_docs/assets/favicon.svg +1 -0
  11. livery_toolroom-0.6.2/src/livery/toolroom/_docs/assets/logo.svg +1 -0
  12. livery_toolroom-0.6.2/src/livery/toolroom/_docs/assets/playground.css +176 -0
  13. livery_toolroom-0.6.2/src/livery/toolroom/_docs/assets/playground.js +609 -0
  14. livery_toolroom-0.6.2/src/livery/toolroom/_docs/footman.md +86 -0
  15. livery_toolroom-0.6.2/src/livery/toolroom/_docs/index.md +83 -0
  16. livery_toolroom-0.6.2/src/livery/toolroom/_docs/nav.toml +68 -0
  17. livery_toolroom-0.6.2/src/livery/toolroom/_docs/playground.md +55 -0
  18. livery_toolroom-0.6.2/src/livery/toolroom/_docs/testing.md +117 -0
  19. livery_toolroom-0.6.2/src/livery/toolroom/_docs/typing.md +80 -0
  20. livery_toolroom-0.6.2/src/livery/toolroom/_docs/usage.md +161 -0
  21. livery_toolroom-0.6.2/src/livery/toolroom/_docsgen.py +34 -0
  22. livery_toolroom-0.6.2/src/livery/toolroom/_host.py +519 -0
  23. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/__init__.py +1 -0
  24. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_colorprobe.py +355 -0
  25. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_drivers.py +918 -0
  26. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/basedpyright.json +346 -0
  27. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/build.json +330 -0
  28. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/bun.json +4392 -0
  29. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/claude.json +1500 -0
  30. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/cmake.json +914 -0
  31. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/coverage.json +1155 -0
  32. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/cspell.json +877 -0
  33. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/djlint.json +639 -0
  34. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/docker.json +4279 -0
  35. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/eclint.json +170 -0
  36. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/gh.json +2666 -0
  37. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/git.json +8313 -0
  38. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/git_changelog.json +382 -0
  39. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/git_cliff.json +575 -0
  40. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/markdownlint.json +168 -0
  41. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/mkdocs.json +1117 -0
  42. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/mypy.json +1186 -0
  43. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/ninja.json +216 -0
  44. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/prek.json +1397 -0
  45. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/pytest.json +1205 -0
  46. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/python.json +378 -0
  47. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/ruff.json +1006 -0
  48. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/ruff_format.json +401 -0
  49. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/ssh.json +1589 -0
  50. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/ssh_keygen.json +1653 -0
  51. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/ssh_keyscan.json +896 -0
  52. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/tea.json +2682 -0
  53. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/twine.json +316 -0
  54. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/ty.json +486 -0
  55. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/uv.json +13137 -0
  56. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_history/zensical.json +255 -0
  57. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_provision.py +680 -0
  58. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_stubgen.py +633 -0
  59. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_tasks.py +2694 -0
  60. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_toolfetch.py +950 -0
  61. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_toolhelp.py +1446 -0
  62. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_toolhistory.py +1046 -0
  63. livery_toolroom-0.6.2/src/livery/toolroom/_machinery/_toolspec.py +318 -0
  64. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/__init__.pyi +4 -0
  65. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/basedpyright.pyi +71 -0
  66. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/bash.pyi +28 -0
  67. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/build.pyi +59 -0
  68. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/bun.pyi +1038 -0
  69. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/claude.pyi +785 -0
  70. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/cmake.pyi +174 -0
  71. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/cmd.pyi +28 -0
  72. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/coverage.pyi +336 -0
  73. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/cspell.pyi +241 -0
  74. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/djlint.pyi +127 -0
  75. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/docker.pyi +903 -0
  76. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/eclint.pyi +51 -0
  77. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/fish.pyi +28 -0
  78. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/gh.pyi +995 -0
  79. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/git.pyi +1748 -0
  80. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/git_changelog.pyi +75 -0
  81. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/git_cliff.pyi +119 -0
  82. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/markdownlint.pyi +39 -0
  83. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/mkdocs.pyi +192 -0
  84. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/mypy.pyi +211 -0
  85. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/ninja.pyi +51 -0
  86. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/nu.pyi +28 -0
  87. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/prek.pyi +369 -0
  88. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/pwsh.pyi +28 -0
  89. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/pytest.pyi +231 -0
  90. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/python.pyi +76 -0
  91. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/ruff.pyi +259 -0
  92. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/ruff_format.pyi +93 -0
  93. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/ssh.pyi +117 -0
  94. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/ssh_keygen.pyi +127 -0
  95. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/ssh_keyscan.pyi +49 -0
  96. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/tea.pyi +1042 -0
  97. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/twine.pyi +111 -0
  98. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/ty.pyi +110 -0
  99. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/uv.pyi +2666 -0
  100. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/zensical.pyi +92 -0
  101. livery_toolroom-0.6.2/src/livery/toolroom/_stubs/zsh.pyi +28 -0
  102. livery_toolroom-0.6.2/src/livery/toolroom/py.typed +0 -0
  103. livery_toolroom-0.6.2/src/livery/toolroom/testing.py +355 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Willem Kokke
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,130 @@
1
+ Metadata-Version: 2.4
2
+ Name: livery-toolroom
3
+ Version: 0.6.2
4
+ Summary: Typed surfaces for command-line tools, generated from the tools themselves.
5
+ Author: Willem Kokke
6
+ Author-email: Willem Kokke <mail@willem.net>
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3 :: Only
12
+ Classifier: Typing :: Typed
13
+ Requires-Dist: livery-footman>=0.52.2 ; extra == 'test'
14
+ Requires-Dist: footman>=0.52.2 ; extra == 'test'
15
+ Requires-Dist: mkdocs>=1.6 ; extra == 'test'
16
+ Requires-Dist: toolroom>=0.6.2 ; extra == 'test'
17
+ Requires-Python: >=3.11
18
+ Project-URL: Repository, https://github.com/willemkokke/livery
19
+ Provides-Extra: test
20
+ Description-Content-Type: text/markdown
21
+
22
+ # toolroom
23
+
24
+ Typed surfaces for command-line tools, generated from the tools
25
+ themselves.
26
+
27
+ ```python
28
+ from toolroom import git, cmake, ruff
29
+
30
+ git.switch("-c", "release/v1.4")
31
+ cmake.build("build", parallel=8)
32
+ ruff.check("src", fix=True, select=["E", "F"])
33
+ ```
34
+
35
+ A tool room is where precision tools are made, kept with their
36
+ measurements, repaired when they drift, and issued for use. That is the
37
+ whole design, one verb at a time: a stub generator reads each tool's own
38
+ `--help` and writes a typed surface for it; the surfaces are kept with
39
+ the version they were read from; a weekly refresh re-takes them when the
40
+ tool moves; and the bridge issues any tool as a Python handle —
41
+ including tools no stub has ever described.
42
+ `toolroom.terraform("plan")` runs whether or not toolroom has heard of
43
+ terraform.
44
+
45
+ > **Beta.** toolroom is pre-1.0: minor versions may include breaking
46
+ > changes — always called out in the
47
+ > [changelog](https://github.com/willemkokke/toolroom/blob/main/CHANGELOG.md),
48
+ > never in a patch release. Pin the minor (`toolroom~=0.6.0`) if you
49
+ > build on it.
50
+
51
+ ## No transcription
52
+
53
+ toolroom does **not** transcribe a tool's flags into Python parameters.
54
+ Transcription drifts: the wrapper pins the flag-set its author copied,
55
+ the tool moves on, and one day a call emits a flag the installed binary
56
+ rejects. Instead, keyword arguments translate *mechanically*, so the
57
+ installed tool's own CLI stays the single source of truth, at whatever
58
+ version it is:
59
+
60
+ - `fix=True` → `--fix` (`False`/`None` → omitted entirely)
61
+ - `strict=off` → `--no-strict` (`off` is the `toolroom.off` sentinel)
62
+ - `output_format="github"` → `--output-format github`
63
+ - `select=["E", "F"]` → `--select E --select F`
64
+ - `x=1` (single letter) → `-x 1`
65
+ - a trailing underscore escapes Python keywords: `import_="x"` → `--import x`
66
+
67
+ Attribute access chains subcommands
68
+ (`toolroom.docker.compose.up(detach=True)`), and positional strings pass
69
+ through verbatim. The typed stubs *suggest* — your editor knows the
70
+ flags and what each one does — but they never forbid: the hints decide
71
+ whether your editor can help, never whether a call works.
72
+ [Using the tools](https://willemkokke.github.io/toolroom/usage/) has the
73
+ full grammar.
74
+
75
+ ## Standalone, or hosted
76
+
77
+ With nothing else installed, a call spawns the tool with plain
78
+ `subprocess` and answers in a `Result` — the exit code as an `int`
79
+ subclass, carrying the captured streams. A failure raises `ToolError`
80
+ unless the call opted into `nofail`.
81
+
82
+ When [footman](https://willemkokke.github.io/footman/) is present in the
83
+ process, the same call routes through footman's `run()` instead and
84
+ inherits everything a task run means: capture, replay-on-failure,
85
+ dry-run, `recording()`, `--json` receipts, parallel lanes. Neither
86
+ package imports or depends on the other — they were designed together
87
+ and are better together, but each is useful with the other absent.
88
+ [With footman](https://willemkokke.github.io/toolroom/footman/) tells
89
+ that story.
90
+
91
+ ## Built, not run
92
+
93
+ `.argv` turns a handle's call into a command line instead of an
94
+ execution — an ordinary `list[str]`, with `.posix()` and `.windows()`
95
+ for the moment it crosses into a shell:
96
+
97
+ ```python
98
+ cmd = git.push.argv(force=True) # ["git", "push", "--force"]
99
+ cmd.posix() # "git push --force", quoted for a POSIX shell
100
+ ```
101
+
102
+ ## Testing
103
+
104
+ Code that calls tools is tested with `toolroom.testing.answers()`: the
105
+ handles stay real — chaining, flag translation, redaction are all
106
+ exercised — and only execution is replaced, answered from a table of
107
+ canned output and exit codes:
108
+
109
+ ```python
110
+ from toolroom.testing import answers
111
+
112
+ with answers({("git", "push"): 1}) as calls:
113
+ release() # exercises the failure path
114
+
115
+ assert calls[0].argv == ["git", "push"]
116
+ ```
117
+
118
+ [Testing](https://willemkokke.github.io/toolroom/testing/) has the whole
119
+ story.
120
+
121
+ ## Install
122
+
123
+ ```sh
124
+ uv add toolroom # or: pip install toolroom
125
+ ```
126
+
127
+ toolroom has **zero runtime dependencies** and needs Python 3.11+. The
128
+ docs live at
129
+ [willemkokke.github.io/toolroom](https://willemkokke.github.io/toolroom/).
130
+ MIT licensed.
@@ -0,0 +1,109 @@
1
+ # toolroom
2
+
3
+ Typed surfaces for command-line tools, generated from the tools
4
+ themselves.
5
+
6
+ ```python
7
+ from toolroom import git, cmake, ruff
8
+
9
+ git.switch("-c", "release/v1.4")
10
+ cmake.build("build", parallel=8)
11
+ ruff.check("src", fix=True, select=["E", "F"])
12
+ ```
13
+
14
+ A tool room is where precision tools are made, kept with their
15
+ measurements, repaired when they drift, and issued for use. That is the
16
+ whole design, one verb at a time: a stub generator reads each tool's own
17
+ `--help` and writes a typed surface for it; the surfaces are kept with
18
+ the version they were read from; a weekly refresh re-takes them when the
19
+ tool moves; and the bridge issues any tool as a Python handle —
20
+ including tools no stub has ever described.
21
+ `toolroom.terraform("plan")` runs whether or not toolroom has heard of
22
+ terraform.
23
+
24
+ > **Beta.** toolroom is pre-1.0: minor versions may include breaking
25
+ > changes — always called out in the
26
+ > [changelog](https://github.com/willemkokke/toolroom/blob/main/CHANGELOG.md),
27
+ > never in a patch release. Pin the minor (`toolroom~=0.6.0`) if you
28
+ > build on it.
29
+
30
+ ## No transcription
31
+
32
+ toolroom does **not** transcribe a tool's flags into Python parameters.
33
+ Transcription drifts: the wrapper pins the flag-set its author copied,
34
+ the tool moves on, and one day a call emits a flag the installed binary
35
+ rejects. Instead, keyword arguments translate *mechanically*, so the
36
+ installed tool's own CLI stays the single source of truth, at whatever
37
+ version it is:
38
+
39
+ - `fix=True` → `--fix` (`False`/`None` → omitted entirely)
40
+ - `strict=off` → `--no-strict` (`off` is the `toolroom.off` sentinel)
41
+ - `output_format="github"` → `--output-format github`
42
+ - `select=["E", "F"]` → `--select E --select F`
43
+ - `x=1` (single letter) → `-x 1`
44
+ - a trailing underscore escapes Python keywords: `import_="x"` → `--import x`
45
+
46
+ Attribute access chains subcommands
47
+ (`toolroom.docker.compose.up(detach=True)`), and positional strings pass
48
+ through verbatim. The typed stubs *suggest* — your editor knows the
49
+ flags and what each one does — but they never forbid: the hints decide
50
+ whether your editor can help, never whether a call works.
51
+ [Using the tools](https://willemkokke.github.io/toolroom/usage/) has the
52
+ full grammar.
53
+
54
+ ## Standalone, or hosted
55
+
56
+ With nothing else installed, a call spawns the tool with plain
57
+ `subprocess` and answers in a `Result` — the exit code as an `int`
58
+ subclass, carrying the captured streams. A failure raises `ToolError`
59
+ unless the call opted into `nofail`.
60
+
61
+ When [footman](https://willemkokke.github.io/footman/) is present in the
62
+ process, the same call routes through footman's `run()` instead and
63
+ inherits everything a task run means: capture, replay-on-failure,
64
+ dry-run, `recording()`, `--json` receipts, parallel lanes. Neither
65
+ package imports or depends on the other — they were designed together
66
+ and are better together, but each is useful with the other absent.
67
+ [With footman](https://willemkokke.github.io/toolroom/footman/) tells
68
+ that story.
69
+
70
+ ## Built, not run
71
+
72
+ `.argv` turns a handle's call into a command line instead of an
73
+ execution — an ordinary `list[str]`, with `.posix()` and `.windows()`
74
+ for the moment it crosses into a shell:
75
+
76
+ ```python
77
+ cmd = git.push.argv(force=True) # ["git", "push", "--force"]
78
+ cmd.posix() # "git push --force", quoted for a POSIX shell
79
+ ```
80
+
81
+ ## Testing
82
+
83
+ Code that calls tools is tested with `toolroom.testing.answers()`: the
84
+ handles stay real — chaining, flag translation, redaction are all
85
+ exercised — and only execution is replaced, answered from a table of
86
+ canned output and exit codes:
87
+
88
+ ```python
89
+ from toolroom.testing import answers
90
+
91
+ with answers({("git", "push"): 1}) as calls:
92
+ release() # exercises the failure path
93
+
94
+ assert calls[0].argv == ["git", "push"]
95
+ ```
96
+
97
+ [Testing](https://willemkokke.github.io/toolroom/testing/) has the whole
98
+ story.
99
+
100
+ ## Install
101
+
102
+ ```sh
103
+ uv add toolroom # or: pip install toolroom
104
+ ```
105
+
106
+ toolroom has **zero runtime dependencies** and needs Python 3.11+. The
107
+ docs live at
108
+ [willemkokke.github.io/toolroom](https://willemkokke.github.io/toolroom/).
109
+ MIT licensed.
@@ -0,0 +1,64 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.11,<0.13"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "livery-toolroom"
7
+ version = "0.6.2"
8
+ description = "Typed surfaces for command-line tools, generated from the tools themselves."
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ license-files = ["LICENSE"]
12
+ requires-python = ">=3.11"
13
+ classifiers = [
14
+ "Development Status :: 3 - Alpha",
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3 :: Only",
17
+ "Typing :: Typed",
18
+ ]
19
+ dependencies = []
20
+
21
+ [[project.authors]]
22
+ name = "Willem Kokke"
23
+ email = "mail@willem.net"
24
+
25
+ [project.optional-dependencies]
26
+ test = [
27
+ "livery-footman>=0.52.2",
28
+ "footman>=0.52.2",
29
+ "mkdocs>=1.6",
30
+ "toolroom>=0.6.2",
31
+ ]
32
+
33
+ [project.entry-points."footman.tasks"]
34
+ "livery.toolroom" = "livery.toolroom._docsgen"
35
+
36
+ [project.urls]
37
+ Repository = "https://github.com/willemkokke/livery"
38
+
39
+ [tool.uv.build-backend]
40
+ module-name = "livery.toolroom"
41
+
42
+ [tool.ruff]
43
+ extend = "../../pyproject.toml"
44
+
45
+ [tool.ruff.lint.per-file-ignores]
46
+ "src/**" = [
47
+ "D105",
48
+ "D102",
49
+ "D107",
50
+ "D205",
51
+ "D301",
52
+ "D415",
53
+ ]
54
+ "tests/**" = [
55
+ "D1",
56
+ "D205",
57
+ "D301",
58
+ "D415",
59
+ "E501",
60
+ ]
61
+ "src/livery/toolroom/_stubs/*.pyi" = [
62
+ "E501",
63
+ "D",
64
+ ]
@@ -0,0 +1,74 @@
1
+ # Seeded from the template channel (package-python kind) at
2
+ # birth; this file is the workspace's own. Edit it directly:
3
+ # the template never rewrites it.
4
+ [build-system]
5
+ requires = ["uv_build>=0.11,<0.13"]
6
+ build-backend = "uv_build"
7
+
8
+ [project]
9
+ name = "livery-toolroom"
10
+ version = "0.6.2"
11
+ description = "Typed surfaces for command-line tools, generated from the tools themselves."
12
+ readme = "README.md"
13
+ license = "MIT"
14
+ license-files = ["LICENSE"]
15
+ requires-python = ">=3.11"
16
+ authors = [{ name = "Willem Kokke", email = "mail@willem.net" }]
17
+ classifiers = [
18
+ "Development Status :: 3 - Alpha",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3 :: Only",
21
+ "Typing :: Typed",
22
+ ]
23
+
24
+ # Dependency-free at runtime, pinned by test: the one declared
25
+ # runtime dependency stays reserved for strongroom. The private
26
+ # _machinery and _docsgen modules import footman, and load only
27
+ # through footman's own plugin() - the livery.forge._dev precedent.
28
+ dependencies = []
29
+
30
+ # The suite's needs beyond the (empty) runtime dependencies: the
31
+ # hosted seam, the machinery, and the playground probe all drive
32
+ # footman for real. The isolated release legs install this extra;
33
+ # a consumer never sees it unasked.
34
+ [project.optional-dependencies]
35
+ test = [
36
+ "livery-footman>=0.52.2",
37
+ # The playground harness speaks the compat spelling on purpose
38
+ # (it is the spelling a browser consumer installs), so its probe
39
+ # needs the shim beside the real distribution.
40
+ "footman>=0.52.2",
41
+ # The driver suite interrogates mkdocs structurally (the click
42
+ # ladder) and reads its version; without a venv copy the finder
43
+ # meets whatever the machine carries, which the suite's python
44
+ # cannot introspect.
45
+ "mkdocs>=1.6",
46
+ # The playground writes a consumer tasks.py that imports the
47
+ # package by its index spelling; the suite drives that spelling
48
+ # on purpose, so it needs this package's own shim.
49
+ "toolroom>=0.6.2",
50
+ ]
51
+
52
+ [project.entry-points."footman.tasks"]
53
+ "livery.toolroom" = "livery.toolroom._docsgen"
54
+
55
+ [project.urls]
56
+ Repository = "https://github.com/willemkokke/livery"
57
+
58
+ [tool.uv.build-backend]
59
+ # PEP 420 namespace: the importable package is livery.toolroom and
60
+ # there is no livery/__init__.py anywhere in this repository.
61
+ module-name = "livery.toolroom"
62
+
63
+ [tool.ruff]
64
+ extend = "../../pyproject.toml"
65
+
66
+ [tool.ruff.lint.per-file-ignores]
67
+ # The imported sources predate the workspace's pydocstyle rule;
68
+ # their docstring conformance is a tracked content pass, not a
69
+ # cut-time rewrite. Retired by that pass.
70
+ "src/**" = ["D105", "D102", "D107", "D205", "D301", "D415"]
71
+ "tests/**" = ["D1", "D205", "D301", "D415", "E501"]
72
+ # The generated stubs' ruling rides here too when ruff resolves this
73
+ # nested config for the package's own tree.
74
+ "src/livery/toolroom/_stubs/*.pyi" = ["E501", "D"]