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 |