Release History
v2.6.0 (2024-12-19)
Features
Updated
happi load
to support searching and loading in one user-friendly expression. The load function now gathers the results of each search term individually and loads the union of the results.
Maintenance
Make running happi repair only saves an item if it actually got changed during the repair process
Fixes issue in test suite, making tst_base_pim2 a loadable SimpleNamespacce
Add example .cfg and some more instructions on using happi cli
Make pre-release notes script default to just using vi if EDITOR env var is not set.
Fix a few dead links in the docs, add to contributing doc to make 1st time dev instructions bit more clear
Contributors
janeliu-slac
nstelter-slac
tangkong
v2.5.0 (2023-12-19)
Features
Adds more user-friendly qt search widget
Bugfixes
Fixes audit output table, preventing names from being dropped
Maintenance
Adjusts cli audit output to work better for file redirects
Fix conda recipe to use “run_constrained” not “run-constrained”
Contributors
tangkong
klauer
v2.4.0 (2023-09-27)
Features
Added
happi.audit.audit()
which can be used to programmatically audit happi items.
Bugfixes
Fixes bug where
happi transfer
was not filling default values properlyFixes conftest.trim_split_output, which was effectively a no-op. Touches up affected tests
Issue 302: Add functionality to happi ‘repair’ that ensures that the name and id fields of a device are the same.
Removes an extra pcdsutils import from test_cli.py that is not properly caught by error handling
Maintenance
Adds error handling for the temporary file created when initializing a json backend object.
Changes format of temporary file name generation to contain only a unique hash.
Tests modified to no longer assert stdout matches expected strings. Rather the effect of the command being tested is verified independently. The
assert_match_expected
helper is still used, but will now print mismatches instead of asserting them.Allows
happi update
to handle json-backend-type payloadsAdds pcdsutils and pcdsdevices to environment requirements in conda recipe and dev requirements
Removes pcdsutils and pcdsdevices from extra testing requirements in github workflow
The
happi audit
CLI entrypoint has been modified to usehappi.audit.audit()
.Updates mongo backend to handle authSource, require connection information (host, user, etc)
Documents bson dependency. Bson is vendored by pymongo, which instructs users to not install bson from pypi (
pymongo readme
)
Contributors
klauer
laura-king
tangkong
v2.3.0 (2023-06-30)
Features
CLI command
happi config edit
- open config file in$EDITOR
CLI command
happi config init
- create new config file with default optionsCLI command
happi config show
- show location & contents of config fileExtend the config searching mechanism to check the platformdirs config directory. The happi config file path is taken from the
HAPPI_CFG
environment variable, but if the variable is not set then the following locations are searched in order for files named.happi.cfg
orhappi.cfg
:The location specified by the
XDG_CONFIG_HOME
environment variable~/.config
(new) The location specified by
platformdirs.user_config_dir("happi")
Maintenance
Add dependency on platformdirs.
Update build requirements to use pip-provided extras for documentation and test builds
Contributors
tangkong
untzag
v2.2.0 (2023-05-08)
Features
Adds a hook in
happi.loader.from_container
that runs the methodpost_happi_md
on an instantiated object after the metadata container has been attached. This allows a clear method for objects to interact with happi metadata if desired.
Maintenance
Makes
HappiDeviceTreeView
more tolerant of items with missing metadata keys. Items missing the key used to group the tree view will be organized into a catch-all “[KEY NOT FOUND]” group.
Contributors
tangkong
v2.1.0 (2023-04-03)
Features
Adds
happi repair
command, for synchronizing backend database with fields expected by container. Adds a corresponding audit function.Adds audit functions that check the connection status of all signals in an ophyd device (
check_wait_connection
) and verify any fields requested by args/kwargs exist in the database (check_args_kwargs_match
).Adds
happi audit -d/--details
option to print the source of a requested audit function.Adds the
happi delete
CLI tool for deleting entries from the happi database.
Bugfixes
Fix an issue where an ill-timed interrupt of the json backend’s
store
operation could truncate the data file. This also removes the implicit/optional dependency onfcntl
.
Maintenance
Migrates from Travis CI to GitHub Actions for continuous integration testing, and documentation deployment.
Updates happi to use setuptools-scm, replacing versioneer, as its version-string management tool of choice.
Syntax has been updated to Python 3.9+ via
pyupgrade
.happi has migrated to modern
pyproject.toml
, replacingsetup.py
.Sphinx 6.0 now supported for documentation building.
Contributors
tangkong
zllentz
v2.0.0 (2022-10-20)
API Changes
Removed deprecated
happi.containers.Device
container.- Removed deprecated methods:
happi.Client.create_device
happi.Client.add_device
happi.Client.find_device
happi.Client.all_devices
happi.Client.remove_device
happi.SearchResult.device
Features
Added
EntryInfo
keyword argumentinclude_default_as_kwarg
. If set toFalse
, any keys that are included in an item’skwargs
that match the default of their correspondingEntryInfo
will be omitted from the keyword arguments passed todevice_class
when instantiating (loading) the item as inhappi.loader.load_device
orSearchResult.get()
. If thekwargs
EntryInfo setsinclude_default_as_kwarg = True
, the setting on the correspondingEntryInfo
will be used to decide whether or not to omit a keyword argument. If thekwargs
EntryInfo setsinclude_default_as_kwarg = False
, the setting on correspondingEntryInfo
will be ignored. The default value is True on all EntryInfo instances, retaining the original behavior.For happi load, fall back to Python REPL if IPython is not available.
Added MultiBackend, which allows a happi Client to serve information from multiple databases simultaneously. Updates config parsing logic to match.
Added
happi audit
function for running checks on happi database items.Restored –json option for
happi search
.
Bugfixes
Removed extraneous extraneous print in
happi load
.Calculate a max width for shown tables based on the current terminal size to prevent bad line wrapping.
Maintenance
Prevent ophyd / pyepics teardown during test suite.
Improved error logging in happi CLI to be more consistent.
Contributors
JJL772
klauer
tangkong
v1.14.0 (2022-07-06)
API Changes
Added
happi.Client.create_item
and deprecatedhappi.Client.create_device
.Added
happi.Client.add_item
and deprecatedhappi.Client.add_device
.Added
happi.Client.find_item
and deprecatedhappi.Client.find_device
.Added
happi.Client.all_items
and deprecatedhappi.Client.all_devices
.Added
happi.Client.remove_item
and deprecatedhappi.Client.remove_device
.Deprecated
happi.SearchResult.device
and above deprecated items are now scheduled for removal in the next major happi release.Internal backend API
all_devices
has been changed toall_items
.Added
happi.Client.retain_cache_context
for clients that desire to control when reloading the database from a happi backend happens.Backend implementations may now optionally support a caching mechanism with
clear_cache
being called externally by the client when desirable.The happi container registry now supports adding new container classes manually by way of
happi.containers.registry["ContainerName"] = ContainerClass
.
Features
Significant performance increase for JSON-backed happi clients.
Makes
SearchResult
hashableUses hashable
SearchResult
in happi search cli commandJSON database paths may now be relative to the configuration file.
Added
happi benchmark
for identifying which items are slow to load.Added
happi profile
for identifying why particular items are slow to load.
Bugfixes
Fix a rare race condition related to reading a json device database twice in a command line search command between database updates.
Issue where happi Client would repeatedly (and unnecessarily) make database backend calls has been fixed.
Allow int search values to match their float counterparts
The happi container registry is loaded at first use and not on import. This can result in increased performance where the happi database is not used. It also fixes a scenario in which a module that defines a happi container attempts to import certain classes from happi.
Maintenance
Old terminology for
HappiItem
instances has been scrubbed and clarified in documentation.Test suite and documentation has been updated to reflect trajectory of deprecated methods and naming.
Added relaxed flake8 configuration.
Remove happi.device.Device from tests to avoid deprecation warnings
Add type annotations to test suite
Clean up fixture usage and separate
three_valves
fixture intothree_valves
andclient_with_three_valves
add pre-release notes scripts
More documentation about the happi container registry was added.
Refactored CLI slightly to re-use searching logic.
Contributors
JJL772
klauer
tangkong
zllentz
v1.13.0 (2022-06-03)
Features
Added the
enforce_doc
argument toEntryInfo
. This lets us explain what the entry info represents and how it is meant to be filled out in more explicit words when it would be helpful to do.Added methods to client and cli entry points for changing the container of a happi item. This will walk the user through the process of switching to or between custom containers while making sure we adhere to the defined
EntryInfo
. Check outhappi transfer --help
for command-line usage orClient.change_container
for library usage.Added the option to pick between glob and regex searching from the CLI, rather than only allowing glob as in the past. Give
happi search --regex
a try and check outhappi search --help
for more information.
Fixes
Fixed an issue where it was previously impossible to input dictionary and list fields using the CLI.
Fixed handling of numeric values in
happi search
.Fixed range searching logic for multiple range searches in one query.
Fixed the ambiguity between a search returning no results (exit code 0) and a search being malformed (exit code 1).
Maintenance
Refactored the CLI to use
click
instead of bareargparse
. This implementation is much cleaner and will lead to more advanced CLI features in the future.psdm_qs_cli
andpymongo
are no longer required dependencies ofhappi
. These have been reclassified into therun_constrained
portion of the conda recipe bundled in this repository and will also be adjusted on conda-forge.Improved usage and cleanup of temporary files when running the happi test suite.
Restored the automatic documention uploads.
Added/modified test cases to better cover search behavior.
Contributors
tangkong
v1.12.0 (2022-03-31)
Features
Add optional per-device load timers to help identify slow-loading devices.
Fixes
Fixed an issue where missing keys could cause a find match to fail.
Switch on-import fcntl warning to debug to reduce spam.
Contributors
klauer
v1.11.0 (2022-02-07)
Features
Add
--names
flag to thehappi search
command. This causes the search to output only the names of the matching devices. This is useful for using the output ofhappi search
inside anotherhappi
command, for example:happi load $(happi search "*" --names)
.
Contributors
unztag
v1.10.1 (2021-11-15)
Bugfixes
Fix a logging format error in
Client.from_config
Contributors
klauer
v1.10.0 (2021-09-27)
Features
Add
happi container-registry
command-line utility. This shows the user whichhappi
containers are registered and available in their session. This is very useful for debugging purposes and more generally to understand which containers are available.
Maintenance
Fix error in the docs build.
Misc updates to the CI.
Contributors
unztag
zrylettc
v1.9.0 (2021-02-10)
Features
Add
happi update <json>
command-line utility. This allows the user to pipe in a json blob to the happi CLI to update their database. This enables bulk updates in a convenient way.Allow short (under 3) and long (over 80) character names. Users who want further restrictions on names for their projects are encouraged to create a custom container.
Allow arbitrary user functions to be passed in to the EntryInfo
enforce
field, for custom validation of data. These functions should mimic the signature and behavior of the built-in types: take one argument, return the value back as-is or cast to the type, raise ValueError if there is an issue.
Bugfixes
Properly expand home directory (~) in the JSON backend database path.
Require that the name field does not conflict with reserved Python keywords.
Fix an issue where boolean fields edited from the command-line were always interpreted as True.
Maintenance
Update CI to PCDS standards.
Contributors
klauer
unztag
zllentz
v1.8.4 (2021-01-08)
Bugfixes
Fix an issue where a package implementing a happi containers entrypoint could fail to be picked up by the happi registry based on the import order.
Maintenance
Revisions, clarifications, and additions to the documentation.
Docstring style fixes.
Contributors
klauer
untzag
zrylettc
v1.8.3 (2020-11-17)
Bugfixes
Fix loading of acromag io channels from the lcls questionnaire. Previously, these were loading full acromag devices instead of individual channels and were using the incorrect PVs.
Fix loading of Beckhoff axis motors from the lcls questionnaire. Previously, these were misidentified as IMS motors.
Maintenance
Refactor questionnaire entry creation to accomplish the above.
Contributors
cristinasewell
v1.8.2 (2020-10-20)
Bugfixes
Removed hanging raise command from qs loader (hotfix)
v1.8.1 (2020-10-21)
Bugfixes
Fix various issues causing questionnaire loads to fail.
Fix clarity issues for failed questionnaire loads.
Maintenance
Break up the questionnaire loading routines into more maintainable chunks, reorganizing and cleaning up the code.
Allow introspection of questionnaire state for debugging.
v1.8.0 (2020-10-07)
Features
Adds bash/fzf-based fuzzy finding of happi items with corresponding activate/deactivate scripts.
Adds
happi search --json
option to output JSON instead of a table.
Maintenance
Move IPython import to where it’s needed in
happi load
, saving approximately half a second on any otherhappi
CLI invocation.
v1.7.2 (2020-09-17)
Bugfixes
Fix issue with edge cases in lcls questionnaire loader
Fix issue with unclear warnings on creating malformed entries
Maintenance
Improve testing coverage for CLI functions
v1.7.1 (2020-08-20)
Bugfixes
Fix cli issue where the
--clone
argument would fail.Make sure the happi cli returns usage information if the user passes no arguments.
v1.7.0 (2020-08-18)
Features
Add cli search globbing, e.g. now the following will work:
happi search xpp*
(show all devices whose names start with xpp)
Bugfixes
Fix issue with silent failure when editing a non-existent field.
Fix issues related to changing an entry’s name field.
Maintenance
Add documentation for the happi cli
Update the db.json examples to use OphydItem
v1.6.1 (2020-07-01)
Bugfixes
Do not raise an exception on single malformed entries uncovered during a search. Treat these as missing entries. This was causing an issue where queries like
all_devices
would fail outright.Fix issue where
device_cls
string would leak through and raise a bad/confusing exception duringcreate_device
Maintenance
Reduce missing backends log messages from
warning
todebug
.Fix docs failing to build and related issues.
Add
requirements.txt
file toMANIFEST.in
.
v1.6.0 (2020-04-30)
LCLS-specific containers are moved out of happi, and into pcdsdevices
OphydItem
is now the preferred basicophyd.Device
container, with the intention of fully deprecatingDevice
to avoid naming confusionMinor internal fixes
v1.5.0 (2020-04-06)
Refactor search methods, supporting mongo and JSON backends
search
- search by key/value pairs as kwargssearch_range
- search for a range of values in a specific keysearch_regex
- search for key/value pairs as kwargs, with values being regular expressionsAdds
SearchResult
container, allowing for access of metadata or device instantiation
Client['item']
supportedhappi.Device
is now marked as deprecatedMigrate to
happi.OphydItem
Documentation building fixed and made more accurate
Internal refactoring
Reduce usage of metaclasses
pymongo/mongomock are truly optional test dependencies now
Added pre-commit configuration for developer quality-of-life
HappiItem
s are nowcopy.copy()
-ableBackends supply generators and not lists
Fixed many oustanding issues with the JSON backend
v1.4.0 (2020-03-13)
Enhancements
Add an add command for cli, e.g.
happi add
to start an interactive device adderAdd an edit command for cli, e.g.
happi edit im3l0 location=750
prefix=IM3L0:PPMChange search command syntax to be simpler (more like edit)
Add a load command for cli, e.g.
happi load im3l0 im1l1
-> IPython session plus other changes made in dev to get it workingAdd two new Happi-aware Qt widgets: HappiDeviceListView & HappiDeviceTreeView
Bug Fixes
Initialize database if it does not yet exists
Fix broken tests
v1.3.0 (2019-12-10)
Enhancements
Command line script allow users to search and add devices #84
Base
Container
object now available with minimum amount ofEntryInfo
#92Allow Happi to load more devices from LCLS questionnaire #94
New function
list_choices
added tohappi.Client
to allow user to know what beamlines, prefixes, names, etc. will return results.Threaded
load_devices
with option to specify a callback when devices are ready #67
v1.2.1 (2019-03-07)
Bug Fixes
v1.2.0 (2018-12-19)
Enhancements
Client
now has a methodload_device
for searching the database for aContainer
and then loading the corresponding object based ondevice_class
,args
andkwargs
. This is a shortcut to combine two previously existing featuresClient.find_device
andhappi.loader.from_container
Client.from_config
will create aClient
object from a provided configuration file. You can either pass this file in explicitly, specify it via the the environment variable$HAPPI_CFG
, or it will be searched for in~config
or wherever you specify your `$XDG_CONFIG_HOME environment variableAdditional keywords were added to the base
Device
container;lightpath
,documentation
andembedded_screen
,detailed_screen
andengineering_screen
There is now a base container for a
Motor
object.
Deprecations
screen
is longer a supported key. This was too generic and the three keys detailed above allow the user more specificity.
Fixes
The
JSONBackend
no longer relies onfcntl
a Linux only module of the Python standard library.
v1.1.2 (2018-08-30)
Maintenance
In
from_container
, the provided container is compared against the cached version of the device to find discrepancies. This means that modified container objects will always load a new Device. (#62)The QSBackend uses newer methods available in the psdm_qs_cli to determine the proposal from the experiment name. This is more robust against exotic experiment naming schemas than prior implementations (#68)
v1.1.1 (2018-03-08)
Enhancements
The
QSBackend
guesses which a type of motor based on theprefix
. Currently this supportsNewport
,IMS
, andPMC100
motors. While there is not an explicit dependency, this will requirepcdsdevices >= 0.5.0
to load properly (#51)
Bug Fixes
v1.1.0 (2018-02-13)
Ownership of this repository has been transferred to https://github.com/pcdshub
Enhancements
Happi now has a cache so the repeated requests to load the same device do not spawn multiple objects.
Maintenance
Cleaner logging messages
QSBackend
was expanded to accommodate different keyword arguments associated with different authentication methods.
v1.0.0 (2018-01-31)
Enhancements
happi
now handles loading devices with the built-inEntryInfo
-> args, kwargs and device_class. Simply enter the proper information in these fields, either directly inputting information or usingjinja2
templating. The functionsfrom_container
andload_devices
will then handle the necessary imports and initialize devices for youSelect which backend you want to use with the environment variable
$HAPPI_BACKEND
Backend to read from the PCDS Questionnaire
All containers work out of the box with
pcdsdevices >= 0.3.0
## APIAll backends are stored in the
backends
directory.The default plugin is now considered to be
JSONBackend
The function formerly called
load_device
is nowfind_device
.
Build
jinja2
is now a dependencypsdm_qs_cli
is now an optional dependency if you want to use the Questionnaire backendpymongo
is now an optional dependency if you do not want to use the MongoDB backendOnly tested against Python
3.5.x
and3.6.x
Sent to the
pcds-tag
andpcds-dev
Anaconda channels instead of theskywalker
channels
v0.5.0 (2017-11-11)
Enhancements
happi
now supports multiple backends. The required database operations are templated in thehappi.backends.Backend
The existing mongoDB support was kept as the default, but the an additional JSON backend was added. The choice of database type can be entered as an argument to thehappi.Client
Conda builds of
happi
are now available atskywalker-tag
andskywalker-dev
Bug Fixes
Devices comparison now works properly. The listed prefix and names are compared.
API Changes
Mirror
container has been changed to the more specific nameOffsetMirror
Deprecations
happi
will no longer support Python 2.7
v0.4.0 (2017-04-04)
Bug Fixes
Removed dependency on mongomock in conda-recipe
MockClient
creates entiredevice_types
container mapping
API Changes
Renamed alias -> name, and base -> prefix for Ophyd compatibility
v0.3.0 (2017-03-22)
Enhancements
Added Python 2.7 support
Added macros keyword for EDM support
Added CI tools for Travis, Codecov
Changed tests to use a
mongomock.MockClient
instead of an actual mongoDB instanceDevice can now
show_info
and print a table output of all entered information
Bug Fixes
active
EntryInfo should default to True
API Changes
Moved the tests directory into the package to make it easily importable by other modules hoping to use a MockClient
Introduced explicit dependencies on
six
,mongomock
, andprettytable