|
1 | 1 | # Releases |
2 | 2 |
|
| 3 | +## Version 2.3.0 |
| 4 | + |
| 5 | +Date: 2025-11-13 |
| 6 | + |
| 7 | +This minor release brings a number of new features, enhancements, bug fixes, and documentation improvements. Notably, it introduces the new Parameter attributes `default_factory` and `metadata`, and the `ParameterizedABC` class to declare Parameterized abstract base classes. All the docstrings have been improved thanks to a massive effort from @MarcSkovMadsen. Several deprecated APIs have now been removed, and the minimum supported Python version has been bumped to 3.10. Many thanks to our new contributors @Azaya89, @Coderambling, and @ypsah, as well as to @MarcSkovMadsen, @hoxbro, @maximlt, @philippjfr, and all others for their continued maintenance and development efforts. |
| 8 | + |
| 9 | +Features: |
| 10 | + |
| 11 | +- Add a `default_factory` attribute to the base Parameter ([#1092](https://github.com/holoviz/param/pull/1092)) |
| 12 | +- Add a `metadata` attribute to the base Parameter ([#1094](https://github.com/holoviz/param/pull/1094)) |
| 13 | +- Allow declaring Parameterized abstract base classes by inheriting from `ParameterizedABC` => This approach should be favored over `__abstract = True` ([#1031](https://github.com/holoviz/param/pull/1031)) |
| 14 | +- Add `.rx.set()` method ([#957](https://github.com/holoviz/param/pull/957)) |
| 15 | + |
| 16 | +Enhancements: |
| 17 | + |
| 18 | +- Add missing docstrings and enhance existing ones ([#992](https://github.com/holoviz/param/pull/992), [#994](https://github.com/holoviz/param/pull/994), [#997](https://github.com/holoviz/param/pull/997), [#998](https://github.com/holoviz/param/pull/998)) |
| 19 | +- Better error when calling `len()` on a reactive expression ([#1033](https://github.com/holoviz/param/pull/1033)) |
| 20 | +- Raise `AttributeError` when attempting to set the `value` attribute of a reactive expression ([#1022](https://github.com/holoviz/param/pull/1022)) |
| 21 | +- Add an `is_instance` attribute to the `List` Parameter ([#1023](https://github.com/holoviz/param/pull/1023)) |
| 22 | +- Allow `depends(..., on_init=True)` to be applied to async method ([#1067](https://github.com/holoviz/param/pull/1067)) |
| 23 | +- Add `concrete` keyword to the `descendents` function => Prefer `concrete(<cls>, descendents=True)` over `concrete_descendents(<cls>)` ([#1027](https://github.com/holoviz/param/pull/1027)) |
| 24 | + |
| 25 | +Performance Enhancements: |
| 26 | + |
| 27 | +- Improve import time by lazy importing "slow" modules ([#1037](https://github.com/holoviz/param/pull/1037)) |
| 28 | +- Only update Parameter signatures when needed ([#1038](https://github.com/holoviz/param/pull/1038)) |
| 29 | + |
| 30 | +Bug Fixes: |
| 31 | + |
| 32 | +- Fix calling `descendents` on an `object()` instance ([#1024](https://github.com/holoviz/param/pull/1024)) |
| 33 | +- Ensure `edit_constant` resets class and instance level parameters ([#1015](https://github.com/holoviz/param/pull/1015)) |
| 34 | +- Ensure `constant` attribute is inherited ([#1017](https://github.com/holoviz/param/pull/1017)) |
| 35 | +- Ensure type checkers skip `ParameterizedFunction.__init__` ([#1039](https://github.com/holoviz/param/pull/1039)) |
| 36 | +- Fix `.values()/get_value_generator()` dealing with Dynamic params and an updated default value ([#1058](https://github.com/holoviz/param/pull/1058)) |
| 37 | +- Do not remove `nested_refs` when updating another ref ([#1061](https://github.com/holoviz/param/pull/1061)) |
| 38 | +- Fix error message of `ReactiveESMMetaClass` ([#1064](https://github.com/holoviz/param/pull/1064)) |
| 39 | +- Fix `reactive_ops.__call__` ([#1069](https://github.com/holoviz/param/pull/1069)) |
| 40 | +- `unwatch` no longer logs a warning and idempotent behavior clarified ([#1018](https://github.com/holoviz/param/pull/1018)) |
| 41 | +- Remove bad abstract declaration on `SelectorBase` ([#1086](https://github.com/holoviz/param/pull/1086)) |
| 42 | +- Do not override refs when parameter is triggered ([#1089](https://github.com/holoviz/param/pull/1089)) |
| 43 | + |
| 44 | +Documentation: |
| 45 | + |
| 46 | +- Add a new page that lists deprecated and removed APIs ([#1016](https://github.com/holoviz/param/pull/1016)) |
| 47 | +- Add a version switcher ([#1079](https://github.com/holoviz/param/pull/1079)) |
| 48 | +- Small refactor and fixes to the API reference ([#1082](https://github.com/holoviz/param/pull/1082)) |
| 49 | +- README and landing page updates ([#1095](https://github.com/holoviz/param/pull/1095)) |
| 50 | +- Various minor fixes and improvements ([#1006](https://github.com/holoviz/param/pull/1006), [#1034](https://github.com/holoviz/param/pull/1034), [#1036](https://github.com/holoviz/param/pull/1036), [#1049](https://github.com/holoviz/param/pull/1049), [#1052](https://github.com/holoviz/param/pull/1052), [#1054](https://github.com/holoviz/param/pull/1054)) |
| 51 | + |
| 52 | +Breaking changes: |
| 53 | + |
| 54 | +- Direct removal of the undocumented and broken `print_all_param_defaults` function ([#1029](https://github.com/holoviz/param/pull/1029)) |
| 55 | +- API removals that emitted a deprecation warning since 2.0.0, all included in the table below ([#1085](https://github.com/holoviz/param/pull/1085)) |
| 56 | + |
| 57 | +| Warning | Description | |
| 58 | +|-|-| |
| 59 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | Parameter slots / `List._class`: use instead `item_type` | |
| 60 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | Parameter slots / `Number.set_hook`: no replacement | |
| 61 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.__init__` module / `param.produce_value`: no replacement | |
| 62 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.__init__` module / `param.as_unicode`: no replacement | |
| 63 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.__init__` module / `param.is_ordered_dict`: no replacement | |
| 64 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.__init__` module / `param.hashable`: no replacement | |
| 65 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.__init__` module / `param.named_objs`: no replacement | |
| 66 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.__init__` module / `param.normalize_path`: no replacement | |
| 67 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.__init__` module / `param.abbreviate_paths`: no replacement | |
| 68 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.parameterized` module / `param.parameterized.all_equal`: no replacement | |
| 69 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.parameterized` module / `param.parameterized.add_metaclass`: no replacement | |
| 70 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.parameterized` module / `param.parameterized.batch_watch`: use instead `batch_call_watchers` | |
| 71 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.parameterized` module / `param.parameterized.recursive_repr`: no replacement | |
| 72 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0` | `param.parameterized` module / `param.parameterized.overridable_property`: no replacement | |
| 73 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.set_default`: use instead `for k,v in p.param.objects().items(): print(f"{p.__class__.name}.{k}={repr(v.default)}` | |
| 74 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param._add_parameter`: use instead `.param.add_parameter` | |
| 75 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.params`: use instead `.param.values()` or `.param['param']` | |
| 76 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.set_param`: use instead `.param.update` | |
| 77 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.get_param_values`: use instead `.param.values().items()` (or `.param.values()` for the common case of `dict(....param.get_param_values())`) | |
| 78 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.params_depended_on`: use instead `.param.method_dependencies` | |
| 79 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.defaults`: use instead `{k:v.default for k,v in p.param.objects().items()}` | |
| 80 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.print_param_defaults`: use instead `for k,v in p.param.objects().items(): print(f"{p.__class__.name}.{k}={repr(v.default)}")` | |
| 81 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.print_param_values`: use instead `for k,v in p.param.objects().items(): print(f"{p.__class__.name}.{k}={repr(v.default)}")` | |
| 82 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.message`: use instead `.param.log(param.MESSAGE, ...)` | |
| 83 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.verbose`: use instead `.param.log(param.VERBOSE, ...)` | |
| 84 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.0.0`, soft-deprecated since `1.12.0` | Parameterized `.param` namespace / `.param.debug`: use instead `.param.log(param.DEBUG, ...)` | |
| 85 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.1.0`, `ParamPendingDeprecationWarning` since `2.0.0` | Instantiating most parameters with positional arguments beyond `default` is deprecated | |
| 86 | +| `ParamFutureWarning` since `2.2.0`, `ParamDeprecationWarning` since `2.1.0`, `ParamPendingDeprecationWarning` since `2.0.0` | For `Selector` parameters that accept `objects` as first positional argument, and `ClassSelector` parameters that accept `class_` as first positional argument, passing any argument by position is deprecated. | |
| 87 | + |
| 88 | +Deprecations: |
| 89 | + |
| 90 | +- Deprecate setting a parameter value before full instance initialization ([#1025](https://github.com/holoviz/param/pull/1025)) |
| 91 | +- Deprecate the keyword `what` of `.param.watch_values()` ([#1073](https://github.com/holoviz/param/pull/1073)) |
| 92 | +- Deprecate the generic Parameter attribute `pickle_default_value` ([#1019](https://github.com/holoviz/param/pull/1019)) |
| 93 | +- Deprecate the module `version.py` ([#1002](https://github.com/holoviz/param/pull/1002)) |
| 94 | +- Deprecate Selector's `compute_default_fn` slot and `compute_default()` method ([#1012](https://github.com/holoviz/param/pull/1012)) |
| 95 | + |
| 96 | +Compatibility: |
| 97 | + |
| 98 | +- Drop gmpy support in favor of gmpy2 ([#1026](https://github.com/holoviz/param/pull/1026)) |
| 99 | +- Ensure support for Python 3.14 ([#1077](https://github.com/holoviz/param/pull/1077)) |
| 100 | +- Bump the minimum Python version to 3.10 ([#1084](https://github.com/holoviz/param/pull/1084)) |
| 101 | +- Ensure support for PyPy 3.11 and stop testing PyPy 3.10 ([#1080](https://github.com/holoviz/param/pull/1080)) |
| 102 | + |
| 103 | +Internal: |
| 104 | + |
| 105 | +- Introduce `_find_stack_level()` utility to emit warnings with the right stack level ([#1083](https://github.com/holoviz/param/pull/1083)) |
| 106 | + |
| 107 | +Infrastructure / Tests: |
| 108 | + |
| 109 | +- Add sysmon for coverage ([#1009](https://github.com/holoviz/param/pull/1009)) |
| 110 | +- Small updates to the build infrastructure ([#1008](https://github.com/holoviz/param/pull/1008)) |
| 111 | +- Modify workflow to exclude forks ([#1020](https://github.com/holoviz/param/pull/1020)) |
| 112 | +- Update pre-commit ([#1078](https://github.com/holoviz/param/pull/1078)) |
| 113 | +- Make the generator tests more robust ([#1080](https://github.com/holoviz/param/pull/1080), [#1088](https://github.com/holoviz/param/pull/1088)) |
| 114 | + |
| 115 | +Governance: |
| 116 | + |
| 117 | +- Add [@maximlt](https://github.com/maximlt) ([#1075](https://github.com/holoviz/param/pull/1075)) |
| 118 | + |
| 119 | +Contributor Experience: |
| 120 | + |
| 121 | +- Enhance developer experience with the `setup-dev` command ([#1081](https://github.com/holoviz/param/pull/1081)) |
| 122 | + |
| 123 | +[*Full Changelog*](https://github.com/holoviz/param/compare/v2.2.1...v2.3.0) |
| 124 | + |
3 | 125 | ## Version 2.2.1 |
4 | 126 |
|
5 | 127 | Date: 2025-06-11 |
|
0 commit comments