platypush/platypush/plugins/variable
Fabio Manganiello bf7d060b81
continuous-integration/drone/push Build is passing Details
Added `@ensure_initialized` decorator to actions in `variable`.
The `variable` plugin may break in the constructor the first time the
application is started.

That's because it tries to initialize the cache of stored variables, but
the local database hasn't yet been initialized.

That's because plugins are registered _before_ the entities engine is
initialized, as the entities engine assumes that it already has plugins
to scan for entities.

Therefore, the initialization of the `variable` plugin's cache should be
lazy (only done upon the first call to `get`/`set` etc.), in order to
prevent deadlock situations where the plugin waits for the engine to
start, but the engine will be initialized only after the plugin is
ready.

And the lazy initialization logic should also ensure that the entities
engine has been properly started (and emit a `TimeoutError` if that's
not the case), in order to prevent race conditions.
2023-08-17 02:47:30 +02:00
..
__init__.py Added `@ensure_initialized` decorator to actions in `variable`. 2023-08-17 02:47:30 +02:00
manifest.yaml Moved to manifest files for describing plugins and backends and their dependencies 2021-09-16 17:53:40 +02:00