- Replace nest_asyncio with greenback for nested process execution (#332)
- Use uv in pre-commit and CI (#334)
- Fully support 3.14 and drop using deprecated methods of asyncio (#334)
- Bump kiwipy to 0.9.0 for hotfix of aiormq by @unkcpz in #326
- Update CI and CD to py3.13 and remove cache action by @agoscinski in #322
- Spring cleaning - part 1 by @danielhollas in #324
- Update mypy, pytest and pre-commit by @danielhollas in #325
- Drop support for Python 3.8 (#312) [f008399]
- Add support of Python 3.13 (#312) [f008399]
- Add option to forcefully (not gracefully) killing a process [8703d4b]
- Kill task are cancelled and requeued when a new kill message is received [8703d4b]
- Handle Uuid FullLoader with yaml de/serializer in message passing (#310)[98b3e93]
- Update the the readthedocs yaml to v2 and py13 (#313) [538c824]
- Direct message constants (
KILL_MSG,PAUSE_MSG,PLAY_MSG,STATUS_MSG) are replaced with theMessageBuilderclass methods.
- Message builder for constructing message with carrying more information (#291) [f760b4a]
- Make Message interface is hidden inside function call (#301) [a4b896]
- Make rpc callback exception more explicit and wind up to show more infos (#305) [ecef9b9]
- All the
run()methods across the interface are now asynchronous (async def). - Changes from
CoroutinetoAwaitablein function signatures.
- Make
Waiting.resume()idempotent (#285) [20e5898]
- Make
Process.runasync (#272) [4611154] - Switch to ruff and other devops improvements (#289) [55e05e9]
- Bump Python version in CI: 3.8 to 3.12 (Increase python version used in continuous deployment git-workflow from 3.8 to 3.12 (#304) [bb32edb]
- Catch
ChannelInvalidStateErrorin process state change [fda244a] - Make
ProcessListenerinstances persistable [fc66001]
- Update ReadTheDocs configuration file [5ddba0f]
This release applies the fixes that were released on the support branch of v0.21.x.
- Workchains: Accept but deprecate conditional predicates returning
None[#261] PortNamespace: Fix bug in valid type checking of dynamic namespaces [#255]PortNamespace: Makedynamicapply recursively [#263]PortNamespace.get_port: Only create ifcreate_dynamicallyisTrue[#268]
Process: Add theis_exceptedproperty [#240]
StateMachine: transition directly to excepted if transition failed [#240]Process: Fix incorrect overriding oftransition_failed[#240]
- Add support for Python 3.10 [#242]
- Update requirement
kiwipy~=0.8.2[#243] - Add lower limit for patch version of
nest-asyncio[#241]
- Fix
auto_persistdecorator typing [#239] - Fix remaining warnings in unit tests [#244]
- Update the
mypypre-commit dependency [#246]
- Make
Waiting.resume()idempotent [a79497b]
- Add requirement
nbdime<4[94df0df]
- Dependencies: Add support for Python 3.12 [2af3907]
- Make
ProcessListenerinstances persistable [98a375f]
- Catch
ChannelInvalidStateErrorin process state change [db2af9a]
- Update ReadTheDocs configuration file [31f85c7]
- Dependencies: Update requirement
mypy==1.3.0[#270]
PortNamespace.get_port: Only create ifcreate_dynamicallyisTrue[#268]
PortNamespace: Makedynamicapply recursively [#263]- Workchains: Turn exception into warning for incorrect return type in conditional predicates: any type that implements
__bool__will be accepted [#265]
- Workchains: Accept but deprecate conditional predicates returning
None[#261]
- Workchains: Raise if
if_/while_predicate does not return boolean [#259]
- Dependencies: Update pre-commit requirement
isort==5.12.0[#260]
PortNamespace: Fix bug in valid type checking of dynamic namespaces [#255]
Process: Ensure that the raw inputs are not mutated [#251]
- Add support for Python 3.10 and 3.11 [#254]
- Update requirement
pytest-notebook>=0.8.1[#254] - Update requirement
pyyaml~=6.0[#254] - Update requirement
kiwipy[rmq]~=0.7.7[#254] - Update the
myst-nbandsphinxrequirements [#253]
This is a backport of changes introduced in v0.22.0.
Process: Add theis_exceptedproperty [#240]
StateMachine: transition directly to excepted if transition failed [#240]Process: Fix incorrect overriding oftransition_failed[#240]
- Fix
UnboundLocalErrorinDefaultObjectLoader.load_object. [#225]
- Drop support for Python 3.6. [#228]
- Pin Jinja2 and Markupsafe packages for docs builds. [#228]
- Update requirement
nest-asyncio~=1.5[#229] - Pin tests requirements to functional versions. [#228]
- Adopt PEP 621 and move build spec to
pyproject.toml[#230] - Move package into the
src/subdirectory [#234] - Merge separate license files into one [#232]
- Add the
flyntandisortpre-commit hooks [#233] - Remove obsolete
release.sh[#231] - Update the continuous deployment workflow [#235]
- 🔧 MAINTAIN: update requirement to
pyyaml~=5.4(#221) The versions ofpyyamlup to v5.4 contained severe security issues where the default loaders could be abused for arbitrary code execution. The defaultFullLoaderwas patched to no longer allow this behavior, but as a result, data sets that could be successfully deserialized with it, now will fail. This required using the unsafeLoaderin for the deserialization of the exception state of a process.
-
‼️ DEPRECATE:Process.donemethod: This method is a duplicate ofProcess.has_terminated, and is not used anywhere in plumpy (or aiida-core). -
🐛 FIX:
Task.cancelshould not set state asEXCEPTEDasyncio.CancelledErrorare generated when an async task is cancelled. In python 3.7 this exception class inherits fromException, whereas in python 3.8+ it inherits fromBaseException. This meant it python 3.7 it was being caught byexcept Exception, and setting the process state toEXCEPTED, whereas in python 3.8+ it was being re-raised to the caller. We now ensure in both versions it is re-raised (particularly because aiida-core currently relies on this behaviour). -
👌 IMPROVE: Process broadcast subscriber Filter out
state_changedbroadcasts, and allow these to pass-through without generating a (costly) asynchronous task. Note this also required an update in the minimal kiwipy version, to0.7.4
👌 IMPROVE: Catch state change broadcast timeout
When using an RMQ communicator, the broadcast can timeout on heavy loads to RMQ (for example see aiidateam/aiida-core#4745). This broadcast is not critical to the running of the process, and so a timeout should not except it.
Also ensure the process PID is included in all log messages.
Minor improvements and bug fixes:
- 🐛 FIX: retrieve future exception on_killed The exception set on the future should be retrieved, otherwise it will be caught by the loop's exception handler.
- 🐛 FIX: Clean-up process event hooks: On Process close/cleanup event hooks are removed, in part to not persist cyclic dependencies of hooks <-> Process. Once a process is closed, it will also not raise an Exception if a hook tries to un-register itself (but has already been removed by the clean-up).
- 👌 IMPROVE: Add
Process.is_killingproperty - 👌 IMPROVE: remove RUNNING from allowed states of
resume: Since there is noresumemethod implemented for theRunningclass. - 🔧 MAINTAIN: Remove frozendict dependency
Minor update, to add py.typed file to distribution, in accordance with PEP-561 [#195]
- Allow for dereferencing of saved instance state [#191]
- Add type checking to code base [#180]
- Improve documentation [#190]
- Trigger application of nest patch in
set_event_loop_policyto make it compatible with Jupyter notebooks [#189]
- Drop support for Python 3.5 [#187]
- Dependencies: update requirement
kiwipy~=0.7.1[#184]
- Dependencies: only require
aiocontextvarsfor Python < 3.7 [#181]
Port: do not call validator if unspecified and port not required [#173]
- Dependencies: relax the requirement on
aio-pikatoaio-pika~=6.6. [#171]
- Drop
tornadoas a dependency and replace it fully byasyncio[#166]
- Drop support for Python 2.7 [#151]
LoopCommunicator: fix incorrect call through inremove_broadcast_subscriber[#156]PortNamespace: do not add empty optional port namespaces to parsed inputs in thepre_processmethod [#143]PortNamespace: do not setdynamic=Falsewhenvalid_type=None[#146]PortNamespace: setdynamic=Trueifvalid_typein constructor [#145]
- Migrate CI from Travis to Github Actions [#152]
Port: add context argument to validator method [#141]
- Remove unnecessary abstraction layer
ValueSpec[#141]
ProcessSpec: do not set_specattribute if an error is raised inspeccall [#136]
- Allow lambdas for
InputPortdefault values[#133]
PortNamespace: move namespace validator after port validation [#129]
PortNamespace: add the concept of a "lazy" namespace [#121]
PortNamespace: fix the implementation ofincludeinabsorb[#120]