All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Release date format is YYYY-MM-DD.
- fix bugs with MQTTPublisher and add MQTT end to end tests
- support for OIDC authentication for HTTP protocol binding
- adds a layered architecture in
hololinked.serverfor better organization - update protocol handlers (like HTTP handler and MQTT topic publishers) from
__init__of their servers through improved dependency injection - fixes bugs with image streaming and streaming arbitrary content types
ignore_errorsin TD generation works better and gaurantees atleast a partial TD generation- adds API key authentication for HTTP protocol binding
- adds CORS headers for HTTP SSE which went missing from 0.2.x -> 0.3.x transition
- refactor basic security for client using a BasicSecurity class instead of supplying plain username and password
- minor bug fixes in state machine
- supports structlog for logging, with colored logs and updated log statements
- SAST with bandit & gitleaks integrated into CI/CD pipelines
- uses pytest instead of unittests
- supports MQTT
- supports MongoDB as a database for property persistence (see infrastructure project in README to quick-setup)
- adds HTTP handlers for reading/writing multiple properties at once (which used to be supported <0.2.11 but removed later until now by mistake)
- refactors CI/CD pipelines - separate workflows for developing and publishing
- fixes a bug in content type in the forms of TD for HTTP protocol binding, when multiple serializers are used
- one can specify numpy array or arbitrary python objects in pydantic models for properties, actions and events
- updates API reference largely to latest version
- adds TD security definition for BCryptBasicSecurity and ArgsBasicSecurity
- uses httpx for HTTP client instead of tonardo - async support, works better in a jupyter notebook
- bug fixes
Unreleased to pip, only git tag available.
This release contains a lot of new features and improvements so that a version 1.0.0 may be published sooner:
- better conceptual alignment with WoT in code structure
- more tests coverage in both breadth and depth
- schedule async methods & threaded actions more easily
- support pydantic models for action schema validation directly with python typing annotations - no need explicitly specify schema
- easier to add more protocols (like MQTT, CoAP, etc) - protocol bindings are more systematically supported as far as what goes for an WoT compatible RPC
- scripting API (
ObjectProxy) also support HTTP - client object abstracts operations irrespective of protocol observe_propertyop on client side (although we always supported on server side)- descriptors for all of properties, actions, events and state machine. previously only property was a descriptor
- descriptor registries for idiomatic introspection of a Thing's capabilites
- adding custom handlers for each property, action and event to override default behaviour for HTTP protocol
- HTTP basic auth
- docs recreated in mkdocs-material
- virtual environment with
uvpackage manager: ⚡ Faster onboarding: New contributors can setup environments in seconds 📦 Consistent installations: Precise dependency resolution avoids "works on my machine" issues 🧪 Efficient testing: uv run executes tests with minimal overhead please report bugs if any as this is the first iteration of this feature.
- new feature - support for JSON files as backup for property values (use with
db_commit,db_persistanddb_init). Compatible only with JSON serializable properties.
- bug fixes to support
class_memberproperties to work withfget,fsetandfdelmethods. While using customfget,fsetandfdelmethods forclass_members, the class will be passed as the first argument.
- bug fix to execute action when payload is explicitly null in a HTTP request. Whether action takes a payload or not, there was an error which caused the execution to be rejected.
- pydantic & JSON schema support for property models
- composed sub
Things exposed with correct URL path
- HTTP SSE would previously remain unclosed when client abruptly disconnected (like closing a browser tab), but now it would close correctly
- retrieve unserialized data from events with
ObjectProxy(like JPEG images) by settingdeserialize=Falseinsubscribe_event()
- bug fix events when multiple serializers are used
- events support custom HTTP handlers (not polished yet, use as last resort, not auto-added to TD)
- image event handlers for streaming live video as JPEG and PNG (not polished yet, not auto-added to TD)
- released to anaconda, it can take a while to turn up. A badge will be added in README when successful.
- added multiple versions of python for testing
- unlike claimed in previous versions, this package runs only on python 3.11 or higher
- HTTP SSE minor bug-fix/optimization - no difference to the user
- thing control panel works better with the server side and support observable properties
ObjectProxyclient API has been improved to resemble WoT operations better, for exampleget_propertyis now calledread_property,set_propertiesis now calledwrite_multiple_properties.ObjectProxyclient reliability for poorly written server side actions improved
- properties are now "observable" and push change events when read or written & value has changed
- input & output JSON schema can be specified for actions, where input schema is used for validation of arguments
- TD has read/write properties' forms at thing level, event data schema
- change log
- some unit tests
- events are to specified as descriptors and are not allowed as instance attributes. Specify at class level to automatically obtain a instance specific event.
class_memberargument for properties respected more accurately
- first public release to pip, docs are the best source to document this release. Checkout commit [04b75a73c28cab298eefa30746bbb0e06221b81c] and build docs if at all necessary.