clear-skies-doc-builder 2.0.7__tar.gz → 2.0.9__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.
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/CHANGELOG.md +18 -0
- clear_skies_doc_builder-2.0.9/LATEST_CHANGELOG.md +5 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/PKG-INFO +105 -1
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/README.md +104 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/pyproject.toml +1 -1
- clear_skies_doc_builder-2.0.9/src/clearskies_doc_builder/build_callable.py +107 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/builders/module.py +1 -1
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/uv.lock +1 -1
- clear_skies_doc_builder-2.0.7/LATEST_CHANGELOG.md +0 -5
- clear_skies_doc_builder-2.0.7/src/clearskies_doc_builder/build_callable.py +0 -39
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.copier-answers.yml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.editorconfig +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/create-version.yaml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/docs.yaml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/run-tests.yml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/tests-matrix.yaml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/tests.yaml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.gitignore +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.pre-commit-config.yaml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.python-version +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.vscode/settings.json +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/LICENSE +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/cliff.toml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/ruff.toml +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/__init__.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/backends/__init__.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/backends/attribute_backend.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/backends/class_backend.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/backends/module_backend.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/backends/python.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/builders/__init__.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/builders/builder.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/builders/single_class.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/builders/single_class_to_section.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/__init__.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/any.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/attribute.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/attributes.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/base_classes.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/class_column.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/method.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/module.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/columns/module_classes.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/configs/__init__.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/__init__.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/arg.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/attribute.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/attribute_reference.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/class_model.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/class_reference.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/method.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/method_reference.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/module.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/module_reference.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/models/property.py +0 -0
- {clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/src/clearskies_doc_builder/prepare_doc_space.py +0 -0
|
@@ -5,11 +5,27 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.9] - 2026-01-28
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Add ordering
|
|
12
|
+
|
|
13
|
+
## [2.0.8] - 2026-01-28
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- Add support for just headings
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Bump version to v2.0.8 by @github-actions[bot]
|
|
20
|
+
|
|
8
21
|
## [2.0.7] - 2026-01-28
|
|
9
22
|
|
|
10
23
|
### Added
|
|
11
24
|
- Add multi hierarchy
|
|
12
25
|
|
|
26
|
+
### Changed
|
|
27
|
+
- Bump version to v2.0.7 by @github-actions[bot]
|
|
28
|
+
|
|
13
29
|
## [2.0.6] - 2026-01-28
|
|
14
30
|
|
|
15
31
|
### Added
|
|
@@ -75,6 +91,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
75
91
|
* @ made their first contribution
|
|
76
92
|
* @tnijboer made their first contribution in [#1](https://github.com/clearskies-py/doc-builder/pull/1)
|
|
77
93
|
* @cmancone made their first contribution
|
|
94
|
+
[2.0.9]: https://github.com/clearskies-py/doc-builder/compare/v2.0.8..v2.0.9
|
|
95
|
+
[2.0.8]: https://github.com/clearskies-py/doc-builder/compare/v2.0.7..v2.0.8
|
|
78
96
|
[2.0.7]: https://github.com/clearskies-py/doc-builder/compare/v2.0.6..v2.0.7
|
|
79
97
|
[2.0.6]: https://github.com/clearskies-py/doc-builder/compare/v2.0.5..v2.0.6
|
|
80
98
|
[2.0.5]: https://github.com/clearskies-py/doc-builder/compare/v2.0.4..v2.0.5
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clear-skies-doc-builder
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.9
|
|
4
4
|
Summary: The docbuilder for all 'official' clearskies plugins (as well as the main clearskies docs)
|
|
5
5
|
Project-URL: repository, https://github.com/clearskies-py/docs
|
|
6
6
|
Project-URL: issues, https://github.com/clearskies-py/docs/issues
|
|
@@ -142,6 +142,38 @@ This creates:
|
|
|
142
142
|
|
|
143
143
|
The `grand_parent` field enables the Jekyll "just-the-docs" theme's three-level navigation, allowing you to document submodule classes under their logical grouping.
|
|
144
144
|
|
|
145
|
+
#### Parent-Only Sections (No Classes)
|
|
146
|
+
|
|
147
|
+
You can create a parent section that only serves as a navigation container without documenting any classes directly. This is useful when you want to group multiple submodules under a common heading:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"tree": [
|
|
152
|
+
{
|
|
153
|
+
"title": "Cursors",
|
|
154
|
+
"source": "clearskies.cursors.Cursor",
|
|
155
|
+
"builder": "clearskies_doc_builder.builders.Module"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"title": "IAM Cursors",
|
|
159
|
+
"source": "clearskies.cursors.iam.IamCursor",
|
|
160
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
161
|
+
"parent": "Cursors",
|
|
162
|
+
"classes": ["clearskies.cursors.iam.RdsMysql"]
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"title": "Port Forwarding",
|
|
166
|
+
"source": "clearskies.cursors.port_forwarding.PortForwarder",
|
|
167
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
168
|
+
"parent": "Cursors",
|
|
169
|
+
"classes": ["clearskies.cursors.port_forwarding.Ssm"]
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Note that the "Cursors" entry has no `classes` field - it just creates an index page with the overview from the source class docblock. The child sections ("IAM Cursors" and "Port Forwarding") will appear as sub-navigation items under "Cursors".
|
|
176
|
+
|
|
145
177
|
#### Using SingleClass for Individual Classes
|
|
146
178
|
|
|
147
179
|
You can also use `SingleClass` builder for documenting individual classes within a hierarchy:
|
|
@@ -163,3 +195,75 @@ You can also use `SingleClass` builder for documenting individual classes within
|
|
|
163
195
|
]
|
|
164
196
|
}
|
|
165
197
|
```
|
|
198
|
+
|
|
199
|
+
### Automatic Navigation Ordering
|
|
200
|
+
|
|
201
|
+
Child entries under a parent are automatically sorted so that submodules appear first (alphabetically), followed by individual classes (alphabetically). The entry type is **automatically inferred** from the builder:
|
|
202
|
+
|
|
203
|
+
- **`Module` builder** → treated as "submodule" (appears first)
|
|
204
|
+
- **`SingleClass` / `SingleClassToSection` builder** → treated as "class" (appears after submodules)
|
|
205
|
+
- **Other builders** → appear last
|
|
206
|
+
|
|
207
|
+
#### Example
|
|
208
|
+
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"tree": [
|
|
212
|
+
{
|
|
213
|
+
"title": "Cursors",
|
|
214
|
+
"source": "clearskies.cursors.Cursor",
|
|
215
|
+
"builder": "clearskies_doc_builder.builders.Module"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"title": "Memory Cursor",
|
|
219
|
+
"source": "clearskies.cursors.MemoryCursor",
|
|
220
|
+
"builder": "clearskies_doc_builder.builders.SingleClass",
|
|
221
|
+
"parent": "Cursors"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"title": "File Cursor",
|
|
225
|
+
"source": "clearskies.cursors.FileCursor",
|
|
226
|
+
"builder": "clearskies_doc_builder.builders.SingleClass",
|
|
227
|
+
"parent": "Cursors"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"title": "From Environment",
|
|
231
|
+
"source": "clearskies.cursors.from_environment.FromEnvironmentBase",
|
|
232
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
233
|
+
"parent": "Cursors",
|
|
234
|
+
"classes": ["clearskies.cursors.from_environment.EnvCursor"]
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"title": "AWS",
|
|
238
|
+
"source": "clearskies.cursors.aws.AWSBase",
|
|
239
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
240
|
+
"parent": "Cursors",
|
|
241
|
+
"classes": ["clearskies.cursors.aws.SecretsManager"]
|
|
242
|
+
}
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
This will generate navigation in the following order under "Cursors":
|
|
248
|
+
1. **AWS** (Module builder = submodule, alphabetically first)
|
|
249
|
+
2. **From Environment** (Module builder = submodule, alphabetically second)
|
|
250
|
+
3. **File Cursor** (SingleClass builder = class, alphabetically first)
|
|
251
|
+
4. **Memory Cursor** (SingleClass builder = class, alphabetically second)
|
|
252
|
+
|
|
253
|
+
This ensures a consistent navigation structure where submodules (which typically contain multiple classes) are grouped together at the top, followed by individual class documentation.
|
|
254
|
+
|
|
255
|
+
#### Manual Override with `entry_type`
|
|
256
|
+
|
|
257
|
+
If needed, you can explicitly set `entry_type` to override the automatic inference:
|
|
258
|
+
|
|
259
|
+
```json
|
|
260
|
+
{
|
|
261
|
+
"title": "Special Entry",
|
|
262
|
+
"source": "...",
|
|
263
|
+
"builder": "clearskies_doc_builder.builders.SingleClass",
|
|
264
|
+
"parent": "Cursors",
|
|
265
|
+
"entry_type": "submodule"
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Supported values: `"submodule"`, `"class"`, or omit for default behavior.
|
|
@@ -122,6 +122,38 @@ This creates:
|
|
|
122
122
|
|
|
123
123
|
The `grand_parent` field enables the Jekyll "just-the-docs" theme's three-level navigation, allowing you to document submodule classes under their logical grouping.
|
|
124
124
|
|
|
125
|
+
#### Parent-Only Sections (No Classes)
|
|
126
|
+
|
|
127
|
+
You can create a parent section that only serves as a navigation container without documenting any classes directly. This is useful when you want to group multiple submodules under a common heading:
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"tree": [
|
|
132
|
+
{
|
|
133
|
+
"title": "Cursors",
|
|
134
|
+
"source": "clearskies.cursors.Cursor",
|
|
135
|
+
"builder": "clearskies_doc_builder.builders.Module"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"title": "IAM Cursors",
|
|
139
|
+
"source": "clearskies.cursors.iam.IamCursor",
|
|
140
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
141
|
+
"parent": "Cursors",
|
|
142
|
+
"classes": ["clearskies.cursors.iam.RdsMysql"]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"title": "Port Forwarding",
|
|
146
|
+
"source": "clearskies.cursors.port_forwarding.PortForwarder",
|
|
147
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
148
|
+
"parent": "Cursors",
|
|
149
|
+
"classes": ["clearskies.cursors.port_forwarding.Ssm"]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Note that the "Cursors" entry has no `classes` field - it just creates an index page with the overview from the source class docblock. The child sections ("IAM Cursors" and "Port Forwarding") will appear as sub-navigation items under "Cursors".
|
|
156
|
+
|
|
125
157
|
#### Using SingleClass for Individual Classes
|
|
126
158
|
|
|
127
159
|
You can also use `SingleClass` builder for documenting individual classes within a hierarchy:
|
|
@@ -143,3 +175,75 @@ You can also use `SingleClass` builder for documenting individual classes within
|
|
|
143
175
|
]
|
|
144
176
|
}
|
|
145
177
|
```
|
|
178
|
+
|
|
179
|
+
### Automatic Navigation Ordering
|
|
180
|
+
|
|
181
|
+
Child entries under a parent are automatically sorted so that submodules appear first (alphabetically), followed by individual classes (alphabetically). The entry type is **automatically inferred** from the builder:
|
|
182
|
+
|
|
183
|
+
- **`Module` builder** → treated as "submodule" (appears first)
|
|
184
|
+
- **`SingleClass` / `SingleClassToSection` builder** → treated as "class" (appears after submodules)
|
|
185
|
+
- **Other builders** → appear last
|
|
186
|
+
|
|
187
|
+
#### Example
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"tree": [
|
|
192
|
+
{
|
|
193
|
+
"title": "Cursors",
|
|
194
|
+
"source": "clearskies.cursors.Cursor",
|
|
195
|
+
"builder": "clearskies_doc_builder.builders.Module"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"title": "Memory Cursor",
|
|
199
|
+
"source": "clearskies.cursors.MemoryCursor",
|
|
200
|
+
"builder": "clearskies_doc_builder.builders.SingleClass",
|
|
201
|
+
"parent": "Cursors"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"title": "File Cursor",
|
|
205
|
+
"source": "clearskies.cursors.FileCursor",
|
|
206
|
+
"builder": "clearskies_doc_builder.builders.SingleClass",
|
|
207
|
+
"parent": "Cursors"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"title": "From Environment",
|
|
211
|
+
"source": "clearskies.cursors.from_environment.FromEnvironmentBase",
|
|
212
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
213
|
+
"parent": "Cursors",
|
|
214
|
+
"classes": ["clearskies.cursors.from_environment.EnvCursor"]
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"title": "AWS",
|
|
218
|
+
"source": "clearskies.cursors.aws.AWSBase",
|
|
219
|
+
"builder": "clearskies_doc_builder.builders.Module",
|
|
220
|
+
"parent": "Cursors",
|
|
221
|
+
"classes": ["clearskies.cursors.aws.SecretsManager"]
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
This will generate navigation in the following order under "Cursors":
|
|
228
|
+
1. **AWS** (Module builder = submodule, alphabetically first)
|
|
229
|
+
2. **From Environment** (Module builder = submodule, alphabetically second)
|
|
230
|
+
3. **File Cursor** (SingleClass builder = class, alphabetically first)
|
|
231
|
+
4. **Memory Cursor** (SingleClass builder = class, alphabetically second)
|
|
232
|
+
|
|
233
|
+
This ensures a consistent navigation structure where submodules (which typically contain multiple classes) are grouped together at the top, followed by individual class documentation.
|
|
234
|
+
|
|
235
|
+
#### Manual Override with `entry_type`
|
|
236
|
+
|
|
237
|
+
If needed, you can explicitly set `entry_type` to override the automatic inference:
|
|
238
|
+
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"title": "Special Entry",
|
|
242
|
+
"source": "...",
|
|
243
|
+
"builder": "clearskies_doc_builder.builders.SingleClass",
|
|
244
|
+
"parent": "Cursors",
|
|
245
|
+
"entry_type": "submodule"
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Supported values: `"submodule"`, `"class"`, or omit for default behavior.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "clear-skies-doc-builder"
|
|
3
3
|
description = "The docbuilder for all 'official' clearskies plugins (as well as the main clearskies docs)"
|
|
4
|
-
version = "2.0.
|
|
4
|
+
version = "2.0.9"
|
|
5
5
|
license = "MIT"
|
|
6
6
|
readme = "./README.md"
|
|
7
7
|
authors = [{name = "Conor Mancone", email = "cmancone@gmail.com"}]
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from clearskies_doc_builder import models
|
|
4
|
+
from clearskies_doc_builder.prepare_doc_space import prepare_doc_space
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _infer_entry_type(entry: dict[str, Any]) -> str:
|
|
8
|
+
"""
|
|
9
|
+
Infer the entry type from the builder class name.
|
|
10
|
+
|
|
11
|
+
- Module builder -> "submodule" (contains multiple classes, acts as a section)
|
|
12
|
+
- SingleClass builder -> "class" (documents a single class)
|
|
13
|
+
- SingleClassToSection builder -> "class"
|
|
14
|
+
- Other/unknown -> "" (will be sorted last)
|
|
15
|
+
|
|
16
|
+
This can be overridden by explicitly setting "entry_type" in the config.
|
|
17
|
+
"""
|
|
18
|
+
# Allow explicit override
|
|
19
|
+
if "entry_type" in entry:
|
|
20
|
+
return entry["entry_type"]
|
|
21
|
+
|
|
22
|
+
builder = entry.get("builder", "")
|
|
23
|
+
if builder.endswith(".Module"):
|
|
24
|
+
return "submodule"
|
|
25
|
+
elif builder.endswith(".SingleClass") or builder.endswith(".SingleClassToSection"):
|
|
26
|
+
return "class"
|
|
27
|
+
return ""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _sort_key_for_entry(entry: dict[str, Any]) -> tuple[int, str]:
|
|
31
|
+
"""
|
|
32
|
+
Generate a sort key for navigation ordering.
|
|
33
|
+
|
|
34
|
+
Entries are sorted by:
|
|
35
|
+
1. entry_type priority: "submodule" (0) comes before "class" (1) and others (2)
|
|
36
|
+
2. title alphabetically (case-insensitive)
|
|
37
|
+
|
|
38
|
+
This ensures submodules appear first in navigation, followed by classes,
|
|
39
|
+
all sorted alphabetically within their group.
|
|
40
|
+
|
|
41
|
+
Entry type is automatically inferred from the builder:
|
|
42
|
+
- Module builder -> "submodule"
|
|
43
|
+
- SingleClass/SingleClassToSection builder -> "class"
|
|
44
|
+
"""
|
|
45
|
+
entry_type = _infer_entry_type(entry)
|
|
46
|
+
type_priority = {"submodule": 0, "class": 1}.get(entry_type, 2)
|
|
47
|
+
title = entry.get("title", "").lower()
|
|
48
|
+
return (type_priority, title)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _compute_nav_orders(tree: list[dict[str, Any]]) -> dict[int, int]:
|
|
52
|
+
"""
|
|
53
|
+
Compute nav_order for each entry in the tree based on sorting rules.
|
|
54
|
+
|
|
55
|
+
Returns a dict mapping original tree index to computed nav_order.
|
|
56
|
+
|
|
57
|
+
For entries with the same parent:
|
|
58
|
+
- Groups by entry_type (submodules first, then classes)
|
|
59
|
+
- Sorts alphabetically within each group
|
|
60
|
+
- Assigns sequential nav_order values
|
|
61
|
+
|
|
62
|
+
Top-level entries maintain their original order (index + 2).
|
|
63
|
+
"""
|
|
64
|
+
# Group entries by their parent
|
|
65
|
+
parent_groups: dict[str | None, list[tuple[int, dict[str, Any]]]] = {}
|
|
66
|
+
|
|
67
|
+
for index, entry in enumerate(tree):
|
|
68
|
+
parent = entry.get("parent")
|
|
69
|
+
if parent not in parent_groups:
|
|
70
|
+
parent_groups[parent] = []
|
|
71
|
+
parent_groups[parent].append((index, entry))
|
|
72
|
+
|
|
73
|
+
# Compute nav_order for each entry
|
|
74
|
+
nav_orders: dict[int, int] = {}
|
|
75
|
+
|
|
76
|
+
for parent, entries in parent_groups.items():
|
|
77
|
+
if parent is None:
|
|
78
|
+
# Top-level entries: use original index-based ordering
|
|
79
|
+
for original_index, entry in entries:
|
|
80
|
+
nav_orders[original_index] = original_index + 2
|
|
81
|
+
else:
|
|
82
|
+
# Child entries: sort by type then alphabetically
|
|
83
|
+
sorted_entries = sorted(entries, key=lambda x: _sort_key_for_entry(x[1]))
|
|
84
|
+
for nav_order, (original_index, entry) in enumerate(sorted_entries, start=1):
|
|
85
|
+
nav_orders[original_index] = nav_order
|
|
86
|
+
|
|
87
|
+
return nav_orders
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def build_callable(modules: models.Module, classes: models.Class, config: dict[str, Any], project_root: str):
|
|
91
|
+
doc_root = prepare_doc_space(project_root)
|
|
92
|
+
|
|
93
|
+
# Pre-compute nav_orders based on sorting rules
|
|
94
|
+
nav_orders = _compute_nav_orders(config["tree"])
|
|
95
|
+
|
|
96
|
+
for index, branch in enumerate(config["tree"]):
|
|
97
|
+
nav_order = nav_orders[index]
|
|
98
|
+
|
|
99
|
+
builder_class = classes.find("import_path=" + branch["builder"]).type
|
|
100
|
+
builder = builder_class(
|
|
101
|
+
branch,
|
|
102
|
+
modules,
|
|
103
|
+
classes,
|
|
104
|
+
doc_root,
|
|
105
|
+
nav_order=nav_order,
|
|
106
|
+
)
|
|
107
|
+
builder.build()
|
|
@@ -9,7 +9,7 @@ from .builder import Builder
|
|
|
9
9
|
class Module(Builder):
|
|
10
10
|
def __init__(self, branch, modules, classes, doc_root, nav_order):
|
|
11
11
|
super().__init__(branch, modules, classes, doc_root, nav_order)
|
|
12
|
-
self.class_list = branch
|
|
12
|
+
self.class_list = branch.get("classes", [])
|
|
13
13
|
self.args_to_additional_attributes_map = branch.get("args_to_additional_attributes_map", {})
|
|
14
14
|
self.parent = branch.get("parent", False)
|
|
15
15
|
self.grand_parent = branch.get("grand_parent", False)
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from clearskies_doc_builder import models
|
|
4
|
-
from clearskies_doc_builder.prepare_doc_space import prepare_doc_space
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def build_callable(modules: models.Module, classes: models.Class, config: dict[str, Any], project_root: str):
|
|
8
|
-
doc_root = prepare_doc_space(project_root)
|
|
9
|
-
nav_order_parent_count: dict[str, int] = {}
|
|
10
|
-
|
|
11
|
-
for index, branch in enumerate(config["tree"]):
|
|
12
|
-
# For nav_order tracking, we need to track by the immediate parent
|
|
13
|
-
# If there's a grand_parent, the parent is the immediate container
|
|
14
|
-
# If there's only a parent, that's the immediate container
|
|
15
|
-
# If neither, it's a top-level item (doesn't need tracking)
|
|
16
|
-
parent = branch.get("parent")
|
|
17
|
-
grand_parent = branch.get("grand_parent")
|
|
18
|
-
|
|
19
|
-
# Determine nav_order based on hierarchy level
|
|
20
|
-
if parent or grand_parent:
|
|
21
|
-
# Child items: track by their immediate parent
|
|
22
|
-
nav_order_title_tracker = parent
|
|
23
|
-
if nav_order_title_tracker not in nav_order_parent_count:
|
|
24
|
-
nav_order_parent_count[nav_order_title_tracker] = 0
|
|
25
|
-
nav_order_parent_count[nav_order_title_tracker] += 1
|
|
26
|
-
nav_order = nav_order_parent_count[nav_order_title_tracker]
|
|
27
|
-
else:
|
|
28
|
-
# Top-level items: use index-based nav_order
|
|
29
|
-
nav_order = index + 2
|
|
30
|
-
|
|
31
|
-
builder_class = classes.find("import_path=" + branch["builder"]).type
|
|
32
|
-
builder = builder_class(
|
|
33
|
-
branch,
|
|
34
|
-
modules,
|
|
35
|
-
classes,
|
|
36
|
-
doc_root,
|
|
37
|
-
nav_order=nav_order,
|
|
38
|
-
)
|
|
39
|
-
builder.build()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/run-tests.yml
RENAMED
|
File without changes
|
{clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/tests-matrix.yaml
RENAMED
|
File without changes
|
{clear_skies_doc_builder-2.0.7 → clear_skies_doc_builder-2.0.9}/.github/workflows/tests.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|