Fabio Manganiello
f45e47363d
Use lazy='joined' instead of lazy='selectin' on Entity.parent.
...
That's the best way to ensure that all the columns are fetched eagerly and
prevent errors later when trying to access lazily loaded attributes outside
of the session/thread.
2023-03-10 12:01:23 +01:00
Fabio Manganiello
8ccf3e804d
Added utility get_entities_engine() function.
2023-03-10 11:49:23 +01:00
Fabio Manganiello
3fcc9957d1
A dirty fix to prevent DetachedInstanceError when accessing the parent entity.
2023-03-10 11:45:44 +01:00
Fabio Manganiello
ceb7a2f098
EntitiesEngine synchronization improvements.
...
- Added `wait_start()` method that other threads can use to synchronize
with the engine and wait before performing db operations.
- Callback logic wrapped in a try/except block to prevent custom
integrations with buggy callbacks from crashing the engine.
2023-03-10 00:57:24 +01:00
Fabio Manganiello
73dc2463f1
Added auto_commit=False to entities.save()
2023-03-10 00:40:51 +01:00
Fabio Manganiello
7e92d5f244
Added recursive `.copy()` method to `Entity`.
2023-03-09 22:35:31 +01:00
Fabio Manganiello
9f9ee575f1
Added _import_error_ignored_modules.
...
ImportErrors on these entity modules will be ignored when dynamically
loading them, since they have optional external dependencies and we
shouldn't throw an error if we can't import them.
2023-03-09 01:40:35 +01:00
Fabio Manganiello
c4efec6832
Several fixes and improvements on the entities engine.
...
- Support for an optional callback on `publish_entities` to get notified
when the published object are flushed to the db.
- Use `lazy='selectin'` for the entity parent -> children relationship -
it is more efficient and it ensures that all the data the application
needs is loaded upfront.
- `Entity.entity_key` rolled back to `<external_id, plugin>`. The
fallback logic on `<id, plugin>` created more problems than those it
as supposed to solve.
- Added `expire_on_commit=False` to the entities engine session to make
sure that we don't get errors on detached/expired instances.
2023-03-09 01:16:04 +01:00
Fabio Manganiello
1781a19a79
s/Entity.to_json/Entity.to_dict/g
...
stuff
2023-03-06 23:46:33 +01:00
Fabio Manganiello
b9efa9fa30
entity_key should coalesce (entity.external_id or entity.id)
2023-03-06 16:54:02 +01:00
Fabio Manganiello
ead4513915
Added optional `unit` column to `RawSensor` entity.
2023-03-03 01:59:27 +01:00
Fabio Manganiello
2dfb389630
Added remaining `bluetooth` entity types in `_mappers.py`.
2023-02-23 21:20:41 +01:00
Fabio Manganiello
a0556d3a42
Added `PresenceSensor` entities.
2023-02-23 01:42:26 +01:00
Fabio Manganiello
56d693032a
Added `DewPointSensor` entities.
2023-02-23 01:23:04 +01:00
Fabio Manganiello
d212276247
Added `PressureSensor` entities.
2023-02-23 01:12:27 +01:00
Fabio Manganiello
d961e2a997
Added `TimeDurationSensor` entity.
2023-02-23 01:02:13 +01:00
Fabio Manganiello
c3e16f9f9d
Added support for heart rate sensor entities.
2023-02-23 00:55:55 +01:00
Fabio Manganiello
e1b3d52706
Added `StepsSensor` entity.
2023-02-23 00:45:58 +01:00
Fabio Manganiello
d8c429f4a8
Major improvements on the entities engine.
...
- Better logic to recursively link parent/children entities, so partial
updates won't get lost.
- Removed `EntitiesCache` - it was too much to maintain while keeping
consistent with the ORM, and it was a perennial fight against
SQLAlchemy's own cache.
- Removed `EntityNotifier` - with no need to merge cached entities, the
`notify` method has become much simpler and it's simply been merged
in the `EntitiesRepository`.
2023-02-22 02:53:45 +01:00
Fabio Manganiello
dc7cbe743d
Refactored/improved `RawSensor` entity.
...
It will now automatically deal with most of the native types and convert
them to strings on the db.
2023-02-22 02:19:19 +01:00
Fabio Manganiello
340fd08064
Removed some old `type: ignore` comments.
2023-02-22 01:29:51 +01:00
Fabio Manganiello
cf219d5a48
Added some more docstrings to entities.
2023-02-22 01:02:26 +01:00
Fabio Manganiello
2fa45fc5a3
Documentation and LINT fixes for sensor entities.
2023-02-21 23:10:05 +01:00
Fabio Manganiello
a6c36fa1c1
Added brand, model and model_id columns to `BluetoothDevice`.
2023-02-19 23:02:04 +01:00
Fabio Manganiello
72a9a9dfcf
LINT/type fixes
2023-02-19 22:56:45 +01:00
Fabio Manganiello
8aedc3c233
Recursively normalize child entities in `EntityManager._normalize_entities`
2023-02-18 17:51:57 +01:00
Fabio Manganiello
613e32e7c1
Extended number of supported events and data fields in Bluetooth integration.
2023-02-18 01:15:10 +01:00
Fabio Manganiello
a3aa186ddf
- Added support for `scan_pause`/`scan_resume` on `bluetooth` integration.
...
- Added `BluetoothDevice` as its own entity type.
2023-02-13 23:12:25 +01:00
Fabio Manganiello
1d0be5c929
- Simplified prototype for `EntityManager.set`
...
- Added small documentation/annotations notes to the `Plugin` module.
- Small LINT fixes
2023-02-11 21:35:00 +01:00
Fabio Manganiello
575635fd6b
Defined `set` as a base method for all plugins that implement writeable entities
2023-02-11 04:04:21 +01:00
Fabio Manganiello
b0cc80ceb0
Rewriting `bluetooth.ble` plugin to use `bleak` instead of `gattlib`.
2023-02-10 17:40:20 +01:00
Fabio Manganiello
35719b0da9
Let `publish_entities` return the list of transformed_entities
2023-02-08 02:09:34 +01:00
Fabio Manganiello
a98a5f0980
typo fix
2023-02-08 01:09:25 +01:00
Fabio Manganiello
419a0cec61
More LINTing
...
Better prototype for `MultiLevelSwitchEntityManager.set_value`
2023-02-05 23:07:43 +01:00
Fabio Manganiello
06dfd1a152
Added support for more entities in `switchbot`
2023-02-05 15:34:50 +01:00
Fabio Manganiello
be3b99326f
[WIP] Refactoring `@manages` annotation into a proper `EntityManager` hierarchy
2023-02-02 23:21:12 +01:00
Fabio Manganiello
59eb0742a1
s/warnings/logger.debug/ if publish_entities is called with no engine registered
2023-01-29 21:52:12 +01:00
Fabio Manganiello
8aff181956
Merged `zwave.mqtt` backend into the `zwave.mqtt` plugin
2023-01-29 02:34:48 +01:00
Fabio Manganiello
afdeb91f66
Implemented remaining supported entities for the `smartthings` integration
2023-01-26 22:10:02 +01:00
Fabio Manganiello
147f36c86c
All `Sensor` instances should have `is_read_only=True` by default
2023-01-22 21:05:14 +01:00
Fabio Manganiello
fd76642082
Added `Volume` and `Muted` entities
2023-01-22 21:04:46 +01:00
Fabio Manganiello
dfb13127ee
Added MotionSensor entities
2023-01-21 14:47:18 +01:00
Fabio Manganiello
9a5e2899e8
Support for external_url and image_url on entities
2023-01-15 20:01:47 +01:00
Fabio Manganiello
a58caa17e2
Decreased time of EventQueue (2 -> 1 second) to make entity events more responsive
2023-01-13 23:28:58 +01:00
Fabio Manganiello
38438230d7
The batch of entities currently being processed should have no duplicate keys
2023-01-11 01:22:56 +01:00
Fabio Manganiello
e9c84ff5d4
Support units on dimmer entities
2023-01-09 01:01:05 +01:00
Fabio Manganiello
c32aecece3
Added is_configuration flag to entities
2023-01-03 23:12:27 +01:00
Fabio Manganiello
1c811a490f
Don't serialize children_ids in Entity.to_json()
...
Serializing both children_ids and parent_id can result in nasty
SQLAlchemy bugs, especially when handling objects that haven't been
flushed yet.
2023-01-01 12:47:15 +01:00
Fabio Manganiello
2feaba7bf4
Add children_ids attribute to entities when converted to JSON
2022-12-18 21:03:12 +01:00
Fabio Manganiello
3615a269fe
Use Float instead of Numeric on NumericSensor table.
...
The Numeric type may have casting/rounding issues with SQLite.
2022-12-18 15:25:22 +01:00