Marco Ricci commited on 2025-01-19 13:02:24
Zeige 3 geänderte Dateien mit 98 Einfügungen und 69 Löschungen.
Fix some links that were badly wrapped (line break between link text and link identifier/reference), causing MkDocs to not recognize them as a link. Also reformat the changelog in general such that sentence breaks occur only at line breaks. (Sentences may still take up multiple lines, however.) These are all whitespace-only changes.
... | ... |
@@ -1,6 +1,15 @@ |
1 | 1 |
### Changed |
2 | 2 |
|
3 |
- - The [export handler for storeroom][derivepassphrase.exporter.storeroom.export_storeroom_data] and for [vault-native][derivepassphrase.exporter.vault_native.export_vault_native_data] configuration data now [both support a unified interface][derivepassphrase.exporter.ExportVaultConfigDataFunction]. |
|
4 |
- A new dispatch function [`export_vault_config_data`][derivepassphrase.exporter.export_vault_config_data] automatically calls the correct backend, based on the requested format. |
|
3 |
+ - The export handlers for "storeroom" and "vault-native" configuration |
|
4 |
+ data, |
|
5 |
+ [`export_storeroom_data`][derivepassphrase.exporter.storeroom.export_storeroom_data] |
|
6 |
+ and |
|
7 |
+ [`export_vault_native_data`][derivepassphrase.exporter.vault_native.export_vault_native_data] |
|
8 |
+ configuration data now both support a unified interface: |
|
9 |
+ [`ExportVaultConfigDataFunction`][derivepassphrase.exporter.ExportVaultConfigDataFunction]. |
|
10 |
+ A new dispatch function |
|
11 |
+ [`export_vault_config_data`][derivepassphrase.exporter.export_vault_config_data] |
|
12 |
+ automatically calls the correct backend, based on the requested format. |
|
5 | 13 |
|
6 |
- This is a **breaking API change** due to the change in function parameter names and return types. |
|
14 |
+ This is a **breaking API change** due to the change in function |
|
15 |
+ parameter names and return types. |
... | ... |
@@ -1,7 +1,8 @@ |
1 | 1 |
### Fixed |
2 | 2 |
|
3 | 3 |
- Shell completion for `zsh` was misbehaving in the presence of colons in |
4 |
- the completion item. This was due to an overzealous workaround for |
|
4 |
+ the completion item. |
|
5 |
+ This was due to an overzealous workaround for |
|
5 | 6 |
[`pallets/click#2703`][CLICK_2703]. |
6 | 7 |
|
7 | 8 |
[CLICK_2703]: https://github.com/pallets/click/issues/2703 |
... | ... |
@@ -41,9 +41,11 @@ effectively constitute a new <q>major</q> release.) |
41 | 41 |
systems. |
42 | 42 |
|
43 | 43 |
- `derivepassphrase` now uses a central configuration file, and additional |
44 |
- data files, some of which are service-specific. (The `vault.json` |
|
45 |
- configuration file is now rebranded as a data file.) The configuration |
|
46 |
- files are user-editable, the data files are `derivepassphrase`-editable. |
|
44 |
+ data files, some of which are service-specific. |
|
45 |
+ (The `vault.json` |
|
46 |
+ configuration file is now rebranded as a data file.) |
|
47 |
+ The configuration files are user-editable, the data files are |
|
48 |
+ `derivepassphrase`-editable. |
|
47 | 49 |
|
48 | 50 |
The configuration files are in TOML format, so installing |
49 | 51 |
`derivepassphrase` on Python 3.10 and older requires the |
... | ... |
@@ -59,8 +61,8 @@ effectively constitute a new <q>major</q> release.) |
59 | 61 |
|
60 | 62 |
- `derivepassphrase` now includes basic support for localization: if the |
61 | 63 |
necessary translations are installed, then the diagnostics and help |
62 |
- texts can be emitted in different languages. Internally, this uses |
|
63 |
- Python's standard [`gettext`][] system. |
|
64 |
+ texts can be emitted in different languages. |
|
65 |
+ Internally, this uses Python's standard [`gettext`][] system. |
|
64 | 66 |
|
65 | 67 |
(As of this version, no translations have actually been prepared yet.) |
66 | 68 |
|
... | ... |
@@ -82,20 +84,19 @@ effectively constitute a new <q>major</q> release.) |
82 | 84 |
|
83 | 85 |
### Changed |
84 | 86 |
|
85 |
- - Calling [`derivepassphrase_export`] |
|
86 |
- [derivepassphrase.cli.derivepassphrase_export], |
|
87 |
- [`derivepassphrase_export_vault`] |
|
88 |
- [derivepassphrase.cli.derivepassphrase_export_vault] or |
|
89 |
- [`derivepassphrase_vault`] |
|
90 |
- [derivepassphrase.cli.derivepassphrase_vault], or calling |
|
91 |
- [`derivepassphrase`] [derivepassphrase.cli.derivepassphrase] via its |
|
92 |
- [`.main`][click.BaseCommand.main] method, causes those functions to use |
|
93 |
- the standard Python [logging][] and [warnings][] facilities to issue |
|
94 |
- diagnostic messages, without output to standard error. (This includes |
|
95 |
- using [`click.testing.CliRunner`][], which uses `.main` calls under the |
|
96 |
- hood.) Calling [`derivepassphrase`] |
|
97 |
- [derivepassphrase.cli.derivepassphrase] directly as a function diverts |
|
98 |
- diagnostic messages to standard error. |
|
87 |
+ - Calling |
|
88 |
+ [`derivepassphrase_export`][derivepassphrase.cli.derivepassphrase_export], |
|
89 |
+ [`derivepassphrase_export_vault`][derivepassphrase.cli.derivepassphrase_export_vault] |
|
90 |
+ or |
|
91 |
+ [`derivepassphrase_vault`][derivepassphrase.cli.derivepassphrase_vault], |
|
92 |
+ or calling [`derivepassphrase`][derivepassphrase.cli.derivepassphrase] |
|
93 |
+ via its [`.main`][click.BaseCommand.main] method, causes those functions |
|
94 |
+ to use the standard Python [logging][] and [warnings][] facilities to |
|
95 |
+ issue diagnostic messages, without output to standard error. |
|
96 |
+ (This includes using [`click.testing.CliRunner`][], which uses `.main` |
|
97 |
+ calls under the hood.) |
|
98 |
+ Calling [`derivepassphrase`][derivepassphrase.cli.derivepassphrase] |
|
99 |
+ directly as a function diverts diagnostic messages to standard error. |
|
99 | 100 |
|
100 | 101 |
- Unicode normalization settings for `vault` service names and stored |
101 | 102 |
passphrases are now stored in the central configuration file, instead of |
... | ... |
@@ -115,11 +116,12 @@ effectively constitute a new <q>major</q> release.) |
115 | 116 |
### Added |
116 | 117 |
|
117 | 118 |
- Checking whether an SSH key is suitable now also depends on the SSH |
118 |
- agent in use. API functions now optionally take an additional |
|
119 |
+ agent in use. |
|
120 |
+ API functions now optionally take an additional |
|
119 | 121 |
[`SSHAgentClient`][derivepassphrase.ssh_agent.SSHAgentClient] object to |
120 |
- test agent-specific key suitability. If not given, then the old |
|
121 |
- behavior is retained: SSH keys are suitable if they are suitable under |
|
122 |
- any (conforming) SSH agent. |
|
122 |
+ test agent-specific key suitability. |
|
123 |
+ If not given, then the old behavior is retained: SSH keys are suitable |
|
124 |
+ if they are suitable under any (conforming) SSH agent. |
|
123 | 125 |
|
124 | 126 |
### Fixed |
125 | 127 |
|
... | ... |
@@ -132,10 +134,10 @@ effectively constitute a new <q>major</q> release.) |
132 | 134 |
|
133 | 135 |
### Fixed |
134 | 136 |
|
135 |
- - _*Actually* actually_ remove the `derivepassphrase_export` program, which was |
|
136 |
- turned into a subcommand in v0.2.0 and supposed to have been removed in |
|
137 |
- v0.3.1 already. Removed on disk is not the same as removed in |
|
138 |
- version control. |
|
137 |
+ - _*Actually* actually_ remove the `derivepassphrase_export` program, |
|
138 |
+ which was turned into a subcommand in v0.2.0 and supposed to have been |
|
139 |
+ removed in v0.3.1 already. |
|
140 |
+ Removed on disk is not the same as removed in version control. |
|
139 | 141 |
|
140 | 142 |
## 0.3.1 (2024-10-21) |
141 | 143 |
|
... | ... |
@@ -150,21 +152,22 @@ effectively constitute a new <q>major</q> release.) |
150 | 152 |
### Added |
151 | 153 |
|
152 | 154 |
- Convert changelog management from towncrier to [scriv][]. |
153 |
- - Add SSH agent spawning support to the test suite. Use this support to |
|
154 |
- test the agent functionality on all known major SSH agent |
|
155 |
- implementations automatically. ([#12]) |
|
155 |
+ - Add SSH agent spawning support to the test suite. |
|
156 |
+ Use this support to test the agent functionality on all known major SSH |
|
157 |
+ agent implementations automatically. |
|
158 |
+ ([#12]) |
|
156 | 159 |
- Add [hypothesis][]-based tests to the test suite. |
157 | 160 |
- Update README to add explanations for virtual environments and package |
158 | 161 |
extras. |
159 | 162 |
- Update README to demonstrate configuration storing and SSH agent use. |
160 | 163 |
Include comments on Windows support for SSH agents. |
161 | 164 |
- Use cross-references in the documentation of function signatures. |
162 |
- - Add proper support for Buffer types in the SSH agent client. Any |
|
163 |
- Python object supporting the buffer protocol can be used as input to |
|
164 |
- a function of the client, and any output from the client is returned |
|
165 |
- as bytes objects. Because of the zero-copy semantics of the |
|
166 |
- underlying data/memory block, this should stay relatively time- and |
|
167 |
- space-efficient. |
|
165 |
+ - Add proper support for Buffer types in the SSH agent client. |
|
166 |
+ Any Python object supporting the buffer protocol can be used as input to |
|
167 |
+ a function of the client, and any output from the client is returned as |
|
168 |
+ bytes objects. |
|
169 |
+ Because of the zero-copy semantics of the underlying data/memory block, |
|
170 |
+ this should stay relatively time- and space-efficient. |
|
168 | 171 |
- Add [hypothesis][]-based tests for serialization to and |
169 | 172 |
deserialization from the SSH agent wire format. |
170 | 173 |
- Support Python 3.9 and 3.13. |
... | ... |
@@ -175,8 +178,8 @@ effectively constitute a new <q>major</q> release.) |
175 | 178 |
|
176 | 179 |
### Changed |
177 | 180 |
|
178 |
- - Change links to point to public project repositories, if possible. For |
|
179 |
- legal reasons. |
|
181 |
+ - Change links to point to public project repositories, if possible. |
|
182 |
+ For legal reasons. |
|
180 | 183 |
|
181 | 184 |
- Use the same filename/URL convention for API reference as the Python |
182 | 185 |
standard library does. |
... | ... |
@@ -195,7 +198,8 @@ effectively constitute a new <q>major</q> release.) |
195 | 198 |
|
196 | 199 |
- Fail earlier, and more gracefully/specifically, when we cannot talk to |
197 | 200 |
the SSH agent because Python does not support UNIX domain sockets on |
198 |
- this system. In particular, this is the current situation on Windows. |
|
201 |
+ this system. |
|
202 |
+ In particular, this is the current situation on Windows. |
|
199 | 203 |
|
200 | 204 |
This adds another failure case to the `SSHAgentClient` constructor, and |
201 | 205 |
therefore constitutes a **breaking API change**. |
... | ... |
@@ -207,14 +211,17 @@ effectively constitute a new <q>major</q> release.) |
207 | 211 |
This is a command-line only change. |
208 | 212 |
|
209 | 213 |
- In `derivepassphrase vault`, when importing settings, accept falsy values |
210 |
- everywhere `vault` does, with a warning. Depending on the setting, they |
|
211 |
- are equivalent to zero, the empty string, or "not set". ([#17]) |
|
212 |
- |
|
213 |
- This is a command-line only change, and only affects importing. The API |
|
214 |
- provides a new function to normalize falsy settings, but still otherwise |
|
215 |
- requires settings to be of the correct type. Storing a malformed |
|
216 |
- configuration with such falsy values will still generate errors when |
|
217 |
- `derivepassphrase vault` loads the settings from disk. |
|
214 |
+ everywhere `vault` does, with a warning. |
|
215 |
+ Depending on the setting, they are equivalent to zero, the empty string, |
|
216 |
+ or "not set". |
|
217 |
+ ([#17]) |
|
218 |
+ |
|
219 |
+ This is a command-line only change, and only affects importing. |
|
220 |
+ The API provides a new function to normalize falsy settings, but still |
|
221 |
+ otherwise requires settings to be of the correct type. |
|
222 |
+ Storing a malformed configuration with such falsy values will still |
|
223 |
+ generate errors when `derivepassphrase vault` loads the settings from |
|
224 |
+ disk. |
|
218 | 225 |
|
219 | 226 |
- In `derivepassphrase vault`, when importing configurations, |
220 | 227 |
correctly merge them with the existing one, same as vault(1): keep |
... | ... |
@@ -222,7 +229,8 @@ effectively constitute a new <q>major</q> release.) |
222 | 229 |
applicable) that are not mentioned in the imported configuration. |
223 | 230 |
The import procedure is thus more akin to a section-wise import of |
224 | 231 |
the configurations, instead of a "full" import, and the resulting |
225 |
- configuration generally is a merge of both inputs. ([#16]) |
|
232 |
+ configuration generally is a merge of both inputs. |
|
233 |
+ ([#16]) |
|
226 | 234 |
|
227 | 235 |
- The following operations or configuration settings now raise |
228 | 236 |
warnings: |
... | ... |
@@ -252,42 +260,49 @@ effectively constitute a new <q>major</q> release.) |
252 | 260 |
storeroom formats. |
253 | 261 |
|
254 | 262 |
This feature requires the `cryptography` Python module, but is available |
255 |
- even if `vault` is not installed. ([#1]) |
|
263 |
+ even if `vault` is not installed. |
|
264 |
+ ([#1]) |
|
256 | 265 |
|
257 | 266 |
[#1]: https://github.com/the-13th-letter/derivepassphrase/1 |
258 | 267 |
|
259 | 268 |
### Fixed |
260 | 269 |
|
261 |
- - Deploy versioned documentation with [mike][]. Set up a "latest" tag and |
|
262 |
- the "0.<var>x</var>" version of the documentation with the contents so |
|
263 |
- far. |
|
270 |
+ - Deploy versioned documentation with [mike][]. |
|
271 |
+ Set up a "latest" tag and the "0.<var>x</var>" version of the |
|
272 |
+ documentation with the contents so far. |
|
264 | 273 |
|
265 | 274 |
[mike]: https://pypi.org/project/mike |
266 | 275 |
|
267 | 276 |
### Changed |
268 | 277 |
|
269 | 278 |
- Changed `sequin` and `ssh_agent_client` to be submodules of |
270 |
- `derivepassphrase`. Further moved `derivepassphrase.Vault` and |
|
279 |
+ `derivepassphrase`. |
|
280 |
+ Further moved `derivepassphrase.Vault` and |
|
271 | 281 |
`derivepassphrase.AmbiguousByteRepresentation` into a new submodule |
272 |
- `vault`, and renamed submodule `ssh_agent_client` to `ssh_agent`. ([#3]) |
|
282 |
+ `vault`, and renamed submodule `ssh_agent_client` to `ssh_agent`. |
|
283 |
+ ([#3]) |
|
273 | 284 |
- Changed internal error handling and error messages, to better work in |
274 |
- the context of a command-line tool. ([#4]) |
|
285 |
+ the context of a command-line tool. |
|
286 |
+ ([#4]) |
|
275 | 287 |
- Combine and consolidate `derivepassphrase.types` and |
276 | 288 |
`derivepassphrase.ssh_agent.types` into a new submodule |
277 |
- `derivepassphrase._types`. Despite the name, the module is public. |
|
289 |
+ `derivepassphrase._types`. |
|
290 |
+ Despite the name, the module is public. |
|
278 | 291 |
([#7]) |
279 | 292 |
- Warn the user when entering (directly, or via configuration |
280 | 293 |
editing/importing) a passphrase that is not in the configured Unicode |
281 |
- normalization form. (But don't otherwise reject any textual master |
|
282 |
- passphrases.) ([#9]) |
|
294 |
+ normalization form. |
|
295 |
+ (But don't otherwise reject any textual master passphrases.) |
|
296 |
+ ([#9]) |
|
283 | 297 |
- Move all existing functionality into a subcommand, in anticipation of |
284 | 298 |
other passphrase derivation schemes, with different settings. |
285 | 299 |
Automatically forward calls without a subcommand to the "vault" |
286 | 300 |
subcommand. |
287 | 301 |
|
288 | 302 |
Also store the settings in a file specific to the respective subsystem, |
289 |
- instead of globally. Automatically fall back to, and migrate, the old |
|
290 |
- global settings file if no subsystem-specific configuration was found. |
|
303 |
+ instead of globally. |
|
304 |
+ Automatically fall back to, and migrate, the old global settings file if |
|
305 |
+ no subsystem-specific configuration was found. |
|
291 | 306 |
([#10]) |
292 | 307 |
|
293 | 308 |
- Make `derivepassphrase_export` a subcommand: `derivepassphrase export`. |
... | ... |
@@ -311,12 +326,15 @@ effectively constitute a new <q>major</q> release.) |
311 | 326 |
### Fixed |
312 | 327 |
|
313 | 328 |
- Do not crash upon selecting a key on the command-line if there already |
314 |
- is a key stored in the configuration. ([#5]) |
|
329 |
+ is a key stored in the configuration. |
|
330 |
+ ([#5]) |
|
315 | 331 |
- Create the configuration directory upon saving, if it does not yet |
316 |
- exist. ([#6]) |
|
332 |
+ exist. |
|
333 |
+ ([#6]) |
|
317 | 334 |
- Isolate the tests properly and consistently from the user's |
318 | 335 |
configuration, so that user configuration problems do not cause |
319 |
- unrelated test failures. ([#8]) |
|
336 |
+ unrelated test failures. |
|
337 |
+ ([#8]) |
|
320 | 338 |
- Add an alternate MkDocs configuration for building the documentation in |
321 | 339 |
offline mode. |
322 | 340 |
- Fix typing issues according to `mypy`'s strict mode. |
... | ... |
@@ -331,8 +349,9 @@ effectively constitute a new <q>major</q> release.) |
331 | 349 |
### Fixed |
332 | 350 |
|
333 | 351 |
- Include and exclude the correct files in the `sdist` and `wheel` |
334 |
- distributions. (Previously, `sdist` contained VCS artifacts, and |
|
335 |
- `wheel` was missing some paths.) |
|
352 |
+ distributions. |
|
353 |
+ (Previously, `sdist` contained VCS artifacts, and `wheel` was missing |
|
354 |
+ some paths.) |
|
336 | 355 |
- Lint and reformat all code using [ruff](https://pypi.org/package/ruff/). |
337 | 356 |
- Mention |
338 | 357 |
[`mkdocstrings-python`](https://pypi.org/package/mkdocstrings-python/) |
339 | 358 |