DataBroker provides access to saved data from Bluesky. It does this by applying Intake to Bluesky.
Intake takes the pain out of data access. It loads data from a growing variety of formats into familiar Scipy/PyData data structures.
Bluesky is a suite of co-developed Python packages for data acquisition and management designed to drive experiments and capture data and metadata from experiments and simulations in a way that interfaces naturally with open-source software in general and the scientific Python ecosystem in particular.
DataBroker began development in 2015, before Intake. Intake has goals closely aligned with DataBroker’s and a growing community of users from diverse scientific fields. Starting with DataBroker’s 1.0 release, DataBroker is pivoting to become a distribution of Intake plugins.
This change will proceed in a way that provides a slow and smooth transition for existing DataBroker users.
The 1.0 release of DataBroker supports multiple usages to enable a smooth transition for users.
databroker.v0provides the databroker code exactly as it was in previous pre-1.0 releases. This is available as fallback in case of bugs in v1.
databroker.v1provides the same user interface as v0, but built on top of intake instead of databroker’s own implementation. With only narrow exceptions, code that worked on pre-1.0 releases should work on
databroker.v1. This is the “default” interface in DataBroker 1.0; importing
from databroker ...is an alias for
from databroker.v1 ....
databroker.v2is a very thin shim around intake.
databroker.v2.Broker have accessor
v2, that support usage of the other’s interface,
making it easy to switch between them.
Here we make a v1-style Broker but the
v2 accessor to try v2-style
from databroker import Broker db = Broker.named('MY_CATALOG') # a databroker.v1.Broker instance query = dict(plan_name='count') db(**query) # v1-style search db.v1(**query) # a synonym for the above db.v2.search(query) # v2-style search
Here we make a v2-style Broker but the
v1 accessor to fall back to v1-style
from databroker import catalog db = catalog.SOMETHING() # a databroker.v2.Broker instance query = dict(plan_name='count') db.search(query) # v2-style search db.v2.search(query) # a synonym for the above db.v1(**query) # v1-style search
Roadmap Beyond 1.0¶
When the v1 implementation is proven reliable, v0 will be removed, greatly reducing the amount of code in databroker. This should not have an effect on users, as v1 provides the same interface as v0. The only differences are internal: v1 uses intake internally instead of its own separate implementation to achieve the same end.
If and when the v2 interface is shown to meet users’ needs as well or better than v1, it will become the default. To support existing user code, the v1 interface will continue to be available in
After several years of maintaining both v1 and v2, when all critical user code has been migrated to v2, v1 may be deprecated and eventually removed. At that point, DataBroker will be just a distribution of intake plugins.