------------------
* [blackboard] static methods have a namespace too (root), use absolute names, `261 <https://github.com/splintered-reality/py_trees/pull/261>`_
* [blackboard] do not register keys on the client when xclusive write aborts the process, `261 <https://github.com/splintered-reality/py_trees/pull/261>`_
2.0.x (2019-11-15) - Blackboards v2!
------------------------------------
The `2.0.x` release wraps up the experimental blackboard improvements being rolled out
in `1.3.x` and `1.4.x`. At this point, the changes to the blackboard framework are so
extensive it makes sense to release it with a major version bump and to consider the
`1.2.x` release as the official goto release for the `1.x.y` series.
**New Features**
* [blackboard] exclusive write access, `260 <https://github.com/splintered-reality/py_trees/pull/260>`_
* [blackboard] key remappings, `259 <https://github.com/splintered-reality/py_trees/pull/259>`_
* [blackboard] formalise namespaces with separators, `256 <https://github.com/splintered-reality/py_trees/pull/256>`_
* [blackboard] distinguish primitives vs nested for refined read activity detection, `255 <https://github.com/splintered-reality/py_trees/pull/255>`_
See the 1.3.x and 1.4.x changelog notes for additional details.
1.4.x (2019-11-07)
------------------
**Breaking API**
* [blackboard] fixed read/write ambiguity, now use ``py_trees.common.Access``, `250 <https://github.com/splintered-reality/py_trees/pull/250>`_
.. code-block:: python
Previously
self.blackboard.register_key(key="foo", write=True)
Now
self.blackboard.register_key(key="foo", access=py_trees.common.Access.WRITE)
* [blackboard] drop ``SubBlackboard``, it has problems, `249 <https://github.com/splintered-reality/py_trees/pull/249>`_
**New Features**
* [blackboard] namespaced blackboard clients, `250 <https://github.com/splintered-reality/py_trees/pull/250>`_
.. code-block:: python
Previously, a single blackboard client exists per behaviour
Now, no blackboard client on construction, instead attach on demand:
self.blackboard = self.attach_blackboard_client(name="Foo")
self.parameters = self.attach_blackboard_client(
name="FooParams",
namespace="parameters_foo_"
)
self.state = self.attach_blackboard_client(
name="FooState",
namespace="state_foo_"
)
create a local key 'speed' that maps to 'state_foo_speed' on the blackboard
self.state.register_key(key="speed", access=py_trees.common.Access.WRITE)
self.state.speed = 30.0
* [blackboard] required keys and batch verification method, `254 <https://github.com/splintered-reality/py_trees/pull/254>`_
.. code-block:: python
self.blackboard = self.attach_blackboard_client(name="Foo")
self.blackboard.register_key(name="foo", access=py_trees.common.Access.READ, required=True)
...
self.verify_required_keys_exist() KeyError if any required keys do not yet exist on the blackboard
* [visitors] ``SnapshotVisitor`` tracking blackboards on the visited path, `250 <https://github.com/splintered-reality/py_trees/pull/250>`_
.. code-block:: python
Previously tangled in DisplaySnapshotVisitor:
display_snapshot_visitor.visited.keys() blackboard client uuid's (also behaviour uuid's), typing.Set[uuid.UUID]
display_snapshot_visitor.visited_keys blackboard keys, typing.Set[str]
Now in SnapshotVisitor:
snapshot_visitor.visited_blackboard_client_ids typing.Set[uuid.UUID]
snapshot_visitor.visited_blackboard_keys typing.Set[str]