This release adds a state-transition testing API for unit tests, formerly known as Scenario (many thanks to @PietroPasotti for his work developing and maintaining the library). Harness is still available, but we encourage all charmers to use the new API for unit tests going forward. The API is an optional install, for example: pip install ops[testing], so that the test API code does not get bundled into the charms. All of the classes that you would previously find when using ops-scenario in the scenario namespace can then be found in ops.testing. For example:
There are also two improvements to Juju Secrets: firstly, the .id of a Secret will always include the model UUID, so it can be reliably used for cross-model relations. A more significant change is that, previously, if a charm called set_contents() and set_info() in the same hook (even if not the same event handler, or in a deferred event handler) only the last call would have any effect. This is now changed so that the calls accumulate - you can set both content and metadata in the same hook, and also if you set_contents() twice the contents will be combined. The Juju team intend to make this the secret-set behaviour in the future as well.
Additionally, ops.main is now type hinted correctly and will no longer require a type: ignore directive from users!
Features
Optionally install Scenario with ops[testing] and expose the names in ops.testing in #1381
Change ops.main() so that you don't need to type: ignore it in #1345
Expand the secret ID out to the full URI when only given the ID in #1358
Add a JujuVersion property for Pebble log forwarding to Loki in #1370
Pre-emptively raise InvalidStatusError instead of waiting for Juju:
Make it an error to call CollectStatusEvent.add_status with error or unknown in #1386
Document and validate settable status values in _ModelBackend.set_status in #1354
Fixes
Fix type of StatusBase subclasses by calling StatusBase.register in __init_subclass__ in #1383
Secret.set_info and Secret.set_content can be called in the same hook in #1373
Documentation
Add top-level intro and module-level intros in #1320
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps ops from 2.16.1 to 2.17.0.
Release notes
Sourced from ops's releases.
... (truncated)
Changelog
Sourced from ops's changelog.
Commits
05af34f
chore: update changelog and bump version number for 2.17.0 release (#1394)dcb4d78
docs: move Pebble to a separate page (#1392)d342885
ci: run the smoke tests on a schedule (#1387)4a14764
feat: optionally install Scenario withops[testing]
and expose the names in...d5eadcb
chore: update charm pins (#1390)7dec772
fix: Secret.set_info and Secret.set_content can be called in the same hook (#...6f90333
ci: spell-check the code as part of linting (#1388)64d9565
feat: make it an error to call CollectStatusEvent.add_status with error or un...98a4e4f
refactor: deprecate StatusBase.register decorator (#1384)4bb92dd
test: properly mock the environment (#1385)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show