Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
418f0ad
fix auto argument schema pydantic in actions
VigneshVSV Aug 30, 2025
74d5964
add pypi downloads once again
VigneshVSV Aug 30, 2025
70e23bc
bug fix schema generation type_to_dataschema
VigneshVSV Aug 30, 2025
c6e757f
remove td file as its generated by the protocol binding
VigneshVSV Aug 30, 2025
b8e4e97
bug fix argument schema and return value schema user input validation
VigneshVSV Aug 30, 2025
12767b7
add some additional interaction affordance from our known examples
VigneshVSV Aug 30, 2025
eb7a370
fix return value schema
VigneshVSV Aug 30, 2025
bef5ddb
update README
VigneshVSV Aug 31, 2025
1442851
update action doc
VigneshVSV Aug 31, 2025
2d3432c
code style object proxy file
VigneshVSV Aug 31, 2025
0d221b4
redo signature of subscribe_event and implement stop_polling for ZMQ …
VigneshVSV Aug 31, 2025
58f11d4
fix ZMQ event tests based on new API
VigneshVSV Aug 31, 2025
53ce32e
carry over some better interaction affordance examples from existing …
VigneshVSV Aug 31, 2025
d1d019d
update REAME once again with re-read, client docs link still needs to…
VigneshVSV Sep 6, 2025
8977017
add httpx
VigneshVSV Sep 6, 2025
71929d7
code style
VigneshVSV Sep 6, 2025
cd34a57
move HTTP client to httpx
VigneshVSV Sep 6, 2025
f9a57c7
support some arguments for TD generation like using localhost, ignori…
VigneshVSV Sep 6, 2025
19584cf
complete bug fixes with HTTP SSE with httpx
VigneshVSV Sep 6, 2025
9b43805
improve abstraction of client side events and test with HTTP
VigneshVSV Sep 7, 2025
112f8f0
remove reuse connection feature
VigneshVSV Sep 7, 2025
5e1c51b
refactor ZMQ to be able to spawm multiple event streams for same object
VigneshVSV Sep 7, 2025
3112f7b
apply the same changes to ZMQ SSE
VigneshVSV Sep 7, 2025
15458a8
fix test 11 & 12 with newer ZMQ events
VigneshVSV Sep 20, 2025
7f8bc89
reactivate run method on Thing
VigneshVSV Sep 21, 2025
d9f67cd
fix URL path for client factory
VigneshVSV Sep 21, 2025
56ddf2f
fix basic event broker tests
VigneshVSV Sep 21, 2025
9992383
ruff baseline
VigneshVSV Sep 21, 2025
21b9449
add testing scripts in its own folder
VigneshVSV Sep 21, 2025
a0d877f
add changelog
VigneshVSV Sep 21, 2025
f477be9
remove handler map file
VigneshVSV Sep 21, 2025
79d333c
change name from design scripts to helper scripts
VigneshVSV Sep 21, 2025
771bef3
tests folder ruff baseline
VigneshVSV Sep 21, 2025
bb95572
checkpoint for event based async iterator for HTTP SSE
VigneshVSV Sep 21, 2025
e5a0b70
param ruff
VigneshVSV Sep 21, 2025
a8c209a
code style MD files
VigneshVSV Sep 21, 2025
f6e4fce
fix HTTP SSE client side stream to the extent possible
VigneshVSV Sep 21, 2025
8753aba
update doc to latest commit
VigneshVSV Sep 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ doc/source/generated
extra-packages
tests/test-rpc-results.txt
tests/run-unittest.bat
**/*.ipynb
# comment tests until good organisation comes about

# vs-code
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
"editor.rulers": [
],
"editor.formatOnSave": true,
"ruff.lineLength": 120
}
58 changes: 34 additions & 24 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,52 +8,61 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

✓ means ready to try

## [v0.3.2] - 2025-09-21

- 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

## [v0.3.1] - 17.08.2025

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
- 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
- scripting API (`ObjectProxy`) also support HTTP - client object abstracts operations irrespective of protocol
- `observe_property` op 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
- adding custom handlers for each property, action and event to override default behaviour for HTTP protocol
- HTTP basic auth
- docs recreated in mkdocs-material

## [v0.2.12] - 2025-05-18

- virtual environment with `uv` package 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.
⚡ 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.

## [v0.2.11] - 2025-04-25

- new feature - support for JSON files as backup for property values (use with `db_commit`, `db_persist` and `db_init`). Compatible only with JSON serializable properties.
- new feature - support for JSON files as backup for property values (use with `db_commit`, `db_persist` and `db_init`). Compatible only with JSON serializable properties.

## [v0.2.10] - 2025-04-05

- bug fixes to support `class_member` properties to work with `fget`, `fset` and `fdel` methods. While using custom `fget`, `fset` and `fdel` methods for `class_member`s,
the class will be passed as the first argument.
the class will be passed as the first argument.

## [v0.2.9] - 2025-03-25

- 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.
- 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.

## [v0.2.8] - 2024-12-07

- pydantic & JSON schema support for property models
- composed sub`Thing`s exposed with correct URL path
- pydantic & JSON schema support for property models
- composed sub`Thing`s exposed with correct URL path

## [v0.2.7] - 2024-10-22

- 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 setting `deserialize=False` in `subscribe_event()`
- retrieve unserialized data from events with `ObjectProxy` (like JPEG images) by setting `deserialize=False` in `subscribe_event()`

## [v0.2.6] - 2024-09-09

Expand All @@ -63,7 +72,7 @@ the class will be passed as the first argument.

## [v0.2.5] - 2024-09-09

- released to anaconda, it can take a while to turn up. A badge will be added in README when successful.
- released to anaconda, it can take a while to turn up. A badge will be added in README when successful.

## [v0.2.4] - 2024-09-09

Expand All @@ -72,36 +81,37 @@ the class will be passed as the first argument.

## [v0.2.3] - 2024-08-11

- HTTP SSE minor bug-fix/optimization - no difference to the user
- HTTP SSE minor bug-fix/optimization - no difference to the user

## [v0.2.2] - 2024-08-09

- thing control panel works better with the server side and support observable properties
- `ObjectProxy` client API has been improved to resemble WoT operations better, for example `get_property` is now
called `read_property`, `set_properties` is now called `write_multiple_properties`.
- `ObjectProxy` client API has been improved to resemble WoT operations better, for example `get_property` is now
called `read_property`, `set_properties` is now called `write_multiple_properties`.
- `ObjectProxy` client reliability for poorly written server side actions improved

## [v0.2.1] - 2024-07-21

### Added

- 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

### Changed
- events are to specified as descriptors and are not allowed as instance attributes. Specify at class level to
automatically obtain a instance specific event.

- events are to specified as descriptors and are not allowed as instance attributes. Specify at class level to
automatically obtain a instance specific event.

### Fixed
- ``class_member`` argument for properties respected more accurately

- `class_member` argument for properties respected more accurately

## [v0.1.2] - 2024-06-06

### Added
- first public release to pip, docs are the best source to document this release. Checkout commit
[04b75a73c28cab298eefa30746bbb0e06221b81c] and build docs if at all necessary.



- first public release to pip, docs are the best source to document this release. Checkout commit
[04b75a73c28cab298eefa30746bbb0e06221b81c] and build docs if at all necessary.
30 changes: 15 additions & 15 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,31 @@ identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

The document states the plural pronoun "We" or "Community Leaders" etc.,
however, currently, I, Vignesh Vaidyanathan, enforce the code of conduct
The document states the plural pronoun "We" or "Community Leaders" etc.,
however, currently, I, Vignesh Vaidyanathan, enforce the code of conduct

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
- Focusing on what is best not just for us as individuals, but for the overall
community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or advances of
- The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
- Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities
Expand All @@ -47,15 +47,15 @@ response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, discussions and other contributions
comments, commits, code, wiki edits, issues, discussions and other contributions
that are not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct currently applies within all contributions made to this repository in all sections
of github (including discussions) & associated repositories like hololinked-examples & those hosted publicly under
the Vignesh Vaidyanathan's space.
of github (including discussions) & associated repositories like hololinked-examples & those hosted publicly under
the Vignesh Vaidyanathan's space.

## Enforcement

Expand Down
39 changes: 22 additions & 17 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

First off, thanks for taking the time to contribute!

All types of contributions are encouraged and valued.
All types of contributions are encouraged and valued.

> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:
>
> - Star the project
> - Tweet about it or share in social media
> - Create examples & refer this project in your project's readme. I can add your example in my [example repository](https://github.com/VigneshVSV/hololinked-examples) if its really helpful, including use cases in more sophisticated integrations
Expand All @@ -13,51 +14,55 @@ All types of contributions are encouraged and valued.

## I Have a Question

Do feel free to reach out to me at vignesh.vaidyanathan@hololinked.dev or in discord. I will try my very best to respond.
Do feel free to reach out to me at vignesh.vaidyanathan@hololinked.dev or in discord. I will try my very best to respond.

Nevertheless, one may also refer the available how-to section of the [Documentation](https://hololinked.readthedocs.io/en/latest/index.html).
If the documentation is insufficient for any reason including being poorly documented, one may open a new discussion in the [Q&A](https://github.com/VigneshVSV/hololinked/discussions/categories/q-a) section of GitHub discussions.
If the documentation is insufficient for any reason including being poorly documented, one may open a new discussion in the [Q&A](https://github.com/VigneshVSV/hololinked/discussions/categories/q-a) section of GitHub discussions.

For questions related to workings of HTTP, JSON schema, basic concepts of python like descriptors, decorators etc., it is also advisable to search the internet for answers first.
For generic questions related to web of things standards or its ideas, it is recommended to join web of things [discord](https://discord.com/invite/RJNYJsEgnb) group and [community](https://www.w3.org/community/wot/) group.

If you believe your question might also be a bug, you might want to search for existing [Issues](https://github.com/VigneshVSV/hololinked/issues) that might help you.
If you believe your question might also be a bug, you might want to search for existing [Issues](https://github.com/VigneshVSV/hololinked/issues) that might help you.
In case you have found a suitable issue and still need clarification, you can write your question in this issue. If an issue is not found:

- Open an [Issue](https://github.com/VigneshVSV/hololinked/issues/new).
- Provide as much context as you can about what you're running into.
- Stack trace (Traceback)
- OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
- Version of python
- Possibly your input and the output
- Can you reliably reproduce the issue?
One may submit a bug report at any level of information, especially if you reached out to me at my email upfront. If you also know how to fix it, lets discuss, once the idea is clear, you can fork and make a pull request.
- Can you reliably reproduce the issue?

One may submit a bug report at any level of information, especially if you reached out to me at my email upfront. If you also know how to fix it, lets discuss, once the idea is clear, you can fork and make a pull request.

Otherwise, I will then take care of the issue as soon as possible.

> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to vignesh.vaidyanathan@hololinked.dev.


## I Want To Contribute

> ### Legal Notice <!-- omit in toc -->
> When contributing to this project, you must agree that you have authored 100% of the content or that you have the necessary rights to the content. For example, you copied code from projects with MIT/BSD License. Content from GPL-related licenses may be maintained in a separate repository as an add-on.
>
> When contributing to this project, you must agree that you have authored 100% of the content or that you have the necessary rights to the content. For example, you copied code from projects with MIT/BSD License. Content from GPL-related licenses may be maintained in a separate repository as an add-on.

Developers are always welcome to contribute to the code base. If you want to tackle any issues, un-existing features, let me know (at my email), I can create some open issues and features which I was never able to solve or did not have the time. You can also suggest what else can be contributed functionally, conceptually or also simply code-refactoring.

There are also other repositories which can use your skills:

- An [admin client](https://github.com/VigneshVSV/thing-control-panel) in react
- [Documentation](https://github.com/VigneshVSV/hololinked-docs) in sphinx which needs significant improvement in How-To's, beginner level docs which may teach people concepts of data acquisition or IoT, Docstring or API documentation of this repository itself
- [Examples](https://github.com/VigneshVSV/hololinked-examples) in nodeJS, Dashboard/PyQt GUIs or server implementations using this package. Hardware implementations of unexisting examples are also welcome, I can open a directory where people can search for code based on hardware and just download your code.
- [Documentation](https://github.com/VigneshVSV/hololinked-docs) in sphinx which needs significant improvement in How-To's, beginner level docs which may teach people concepts of data acquisition or IoT, Docstring or API documentation of this repository itself
- [Examples](https://github.com/VigneshVSV/hololinked-examples) in nodeJS, Dashboard/PyQt GUIs or server implementations using this package. Hardware implementations of unexisting examples are also welcome, I can open a directory where people can search for code based on hardware and just download your code.

## Git Branching

A simpler model is used roughly based on [this article](https://www.bitsnbites.eu/a-stable-mainline-branching-model-for-git/) -
- main branch is where all stable developments are merged, all your branches must merge here
- main branch is merged to release branch when it is decided to created a release.
- A specific release is tagged and not created as its own branch. Instead release branch simply follows the main branch at the release time. People should clone the main branch for latest (mostly-) stable code base and release branch for released code base.
- other branches are feature or bug fix branches. A develop branch may be used to make general improvements as the package is constantly evolving, but its not a specific philosophy to use a develop branch.
- Bug fixes on releases must proceed from the tag of that release. Perhaps, even a new release can be made after fixing the bug by merging a bug fix branch to main branch.
A simpler model is used roughly based on [this article](https://www.bitsnbites.eu/a-stable-mainline-branching-model-for-git/) -

- main branch is where all stable developments are merged, all your branches must merge here
- main branch is merged to release branch when it is decided to created a release.
- A specific release is tagged and not created as its own branch. Instead release branch simply follows the main branch at the release time. People should clone the main branch for latest (mostly-) stable code base and release branch for released code base.
- other branches are feature or bug fix branches. A develop branch may be used to make general improvements as the package is constantly evolving, but its not a specific philosophy to use a develop branch.
- Bug fixes on releases must proceed from the tag of that release. Perhaps, even a new release can be made after fixing the bug by merging a bug fix branch to main branch.

## Attribution

This guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)!
Loading
Loading