Butler v22.0 2021-04-01
New Features
- A Butler instance can now be configured with dataId defaults such as an instrument or skymap. [DM-27153]
 
- Add 
butler prune-datasets command. [DM-26689] 
- Add 
butler query-dimension-records command [DM-27344] 
- Add 
--unlink option to butler prune-collection command. [DM-28857] 
- Add progress reporting option for long-lived commands. [DM-28964]
 
- Add 
butler associate command to add existing datasets to a tagged collection. [DM-26688] 
- Add officially-supported JSON serialization for core Butler classes. [DM-28314]
 
- Allow 
butler.get() to support dimension record values such as exposure observing day or detector name in the dataID. [DM-27152] 
- Add “direct” ingest mode to allow a file to be ingested retaining the full path to the original file. [DM-27478]
 
 
Bug Fixes
- Fix temporal queries and clarify 
Timespan behavior. [DM-27985] 
 
Other Changes and Additions
- Make 
ButlerURI class immutable. [DM-29073] 
- Add 
ButlerURI.findFileResources method to walk the directory tree and return matching files. [DM-29011] 
- Improve infrastructure for handling test repositories. [DM-23862]
 
 
Butler Datastores
New Features
- Implement basic file caching for use with remote datastores. [DM-29383]
 
- Require that a DataId always be available to a 
Formatter. This allows formatters to do a consistency check such as comparing the physical filter in a dataId with that read from a file. [DM-28583] 
- Add special mode to datastore to instruct it to ignore registry on 
get. This is useful for Execution Butlers where registry knows in advance about all datasets but datastore does not. [DM-28648] 
- Add 
forget method to instruct datastore to remove all knowledge of a dataset without deleting the file artifact. [DM-29106] 
 
 
Butler Registry
New Features
- Avoid long-lived connections to database. [DM-26302]
 
- Add option to flatten when setting a collection chain. [DM-29203]