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 major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Bumps the pip_dependencies group with 5 updates:
2.16.1
2.17.0
1.1.381
1.1.382.post1
0.36.0
0.37.0
0.0.34
0.0.36
3.1.1
3.2.0
Updates
ops
from 2.16.1 to 2.17.0Release 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)Updates
pyright
from 1.1.381 to 1.1.382.post1Release notes
Sourced from pyright's releases.
Commits
74d0088
chore: release v1.1.382.post1 (#310)1ce7b23
fix: avoid warning for .post versions (#309)c61cac8
chore: release v1.1.382.post0 (#307)f8e7383
CI: correct setup for nodeenv testing (#306)276e381
fix: correct nodeenv environment (#305)05e4563
Pyright NPM Package update to 1.1.382 (#303)0bf95f9
refactor(internal): switch to src dir (#301)f4beb25
feat(cli): mention nodejs extra if nodeenv install failse2d0748
feat: add support for nodejs-wheel9edbff0
chore(internal): fix dev requirementsUpdates
pytest-operator
from 0.36.0 to 0.37.0Commits
68df20f
Publish 0.37.02ea3e38
Use sudo rather than sg on ubuntu-24.04 runners (#140)Updates
cosl
from 0.0.34 to 0.0.36Release notes
Sourced from cosl's releases.
Commits
5e9316d
Return sorted peers set (#86)84000eb
fix: use https for scrape jobs when tls is available (#83)1058926
fix: use the correct port for the nginx exporter (#76)Updates
pytest-interface-tester
from 3.1.1 to 3.2.0Commits
3ef010f
Merge pull request #25 from IronCore864/release-3.2-maintainerc8d84f7
Merge branch 'main' into release-3.2-maintainer1416aee
chore: bump pytest interface tester lib version to use scenario 67d71c97
Merge pull request #26 from tonyandrewmeyer/fix-event-type36a8e1a
Fix the unreferenced event object.f279aa7
chore: 3.2 release for the maintainer featured86bb2a
Merge pull request #22 from IronCore864/main97e5a6c
chore: rename maintainers to singularba63e78
chore: refactor according to review9a6966d
Update interface_tester/collector.pyDependabot 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