Compare commits

...

1086 commits

Author SHA1 Message Date
Fabio Manganiello cb9244964c
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-27 22:19:09 +00:00
Fabio Manganiello 62980cc9e2 [procedures] Store actions for YAML procedures. 2024-08-27 22:18:15 +00:00
Fabio Manganiello 42d672ab5e 🐛 Fixed import error 2024-08-27 22:18:15 +00:00
Fabio Manganiello ef524fa388 [config] Added config.get_config_dir method. 2024-08-27 22:18:15 +00:00
Fabio Manganiello dea72fbfdb [#341] Support for procedure reconciliation.
If some procedures are removed either from the configuration or from the
loaded scripts, then their associated entities should also be removed
from the database when the `procedures` plugin is loaded.
2024-08-27 22:18:15 +00:00
Fabio Manganiello 99909c73ab [#341] Backend implementation of the new procedure entities architecture. 2024-08-27 22:18:15 +00:00
Fabio Manganiello 1ee8055597 [WIP] 2024-08-27 22:18:15 +00:00
Fabio Manganiello c788f2d858
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-25 01:25:37 +00:00
Fabio Manganiello f6b1f92a88
🐛 file.bookmarks must be optional.
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-25 03:24:02 +02:00
Fabio Manganiello 9f8fe60cdf
An empty commit to re-trigger the CI/CD pipelines
Some checks failed
continuous-integration/drone/push Build is failing
2024-08-25 03:20:38 +02:00
Fabio Manganiello 83d21d3f04
[media] Media played from live streams should be at least 5MB before playback starts.
Some checks failed
continuous-integration/drone/push Build is failing
2024-08-25 03:16:59 +02:00
Fabio Manganiello 54a6b34a64
[file] Added support for UI bookmarks on the file plugin. 2024-08-25 03:16:59 +02:00
Fabio Manganiello 377b2c2425
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-25 01:15:10 +00:00
Fabio Manganiello a152b0d734
[#333] Added file browser UI panel.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #333
2024-08-25 03:13:05 +02:00
Fabio Manganiello 496dfdb50b
[Media UI] Adapted media browser to the new file browser plugin. 2024-08-25 03:13:04 +02:00
Fabio Manganiello 9493445af6
[Media UI] Renamed play-cache event to play-with-opts.
As we're likely to add more play options in the future, this approach is
much more scalable.
2024-08-25 03:13:04 +02:00
Fabio Manganiello 0657c80a5c
[#333] Enhanced file browser component.
- Added support for file/directory add/copy/move/rename/remove
  operations.

- Added automatic detection of MIME types.

- Added support for file view/download.

- Added file uploader component.

- Added custom sorting and other visualization options.

- Added custom `Home` component to show configurable bookmarks above the
  filesystem root level.

- Added file editor with automatic syntax highlight.
2024-08-25 03:13:04 +02:00
Fabio Manganiello e672a7fb5c
[Media UI] Always normalize the duration field to float. 2024-08-25 03:13:04 +02:00
Fabio Manganiello e8acf8615f
[UI] Added disabled property to FloatingButton. 2024-08-25 03:13:04 +02:00
Fabio Manganiello 336cb18cb3
[UI] New features for the Modal element.
- Added `uppercase` property (default: true) for the modal title. This
  makes it possible to override the default case of the modal title.

- Added support for custom buttons in the modal titlebar.
2024-08-25 03:13:03 +02:00
Fabio Manganiello 342df0eeec
[UI] Added common disabled style to buttons. 2024-08-25 03:13:03 +02:00
Fabio Manganiello e6a358fe27
[UI] Added quick String.hashCode function.
This is needed in several places in the code where we need to compare if
two strings differ, but either the strings are too long (e.g. content of
large files) or we don't want to pass the original values (e.g.
credentials, session tokens etc.).
2024-08-25 03:13:03 +02:00
Fabio Manganiello 818f60a468
[UI] Better parsing of the parameter types in getUrlArgs and setUrlArgs. 2024-08-25 03:13:03 +02:00
Fabio Manganiello db34a607e4
[UI] Improvements to the Dropdown element.
- Added `style` property to pass static style rules to the dropdown
  body.

- Better positioning of the dropdown when the resulting body is too long
  and may overflow the top of the screen - in that case, the dropdown
  position needs to be maximized at zero.
2024-08-25 03:13:03 +02:00
Fabio Manganiello 8f2e68f0db
[UI] Added visible property to ConfirmDialog element. 2024-08-25 03:13:02 +02:00
Fabio Manganiello 8b3c2a8ee1
[UI] Updated highlight.js dependency 2024-08-25 03:13:02 +02:00
Fabio Manganiello 92bff4decb
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-24 22:13:00 +00:00
Fabio Manganiello 0bb264792e
[file] Added file.copy and file.move actions.
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-25 00:11:38 +02:00
Fabio Manganiello a5426ede58
[file] Added recursive option to file.rmdir. 2024-08-25 00:11:38 +02:00
Fabio Manganiello 2c481c54af
[file] Added POST/PUT /file endpoints. 2024-08-25 00:11:38 +02:00
Fabio Manganiello 0010342fb7
Get the original MIME type for symlinks.
If the target resource is a symbolic link, then `get_mime_type` should
retrieve the MIME type of the linked resource.
2024-08-25 00:11:38 +02:00
Fabio Manganiello 1e9418b072
[file] file.list, file.is_binary and file.get_user_home actions.
- Added `sort` and `reverse` arguments to `file.list`.

- Added `file.is_binary` and `file.get_user_home` actions.
2024-08-25 00:11:37 +02:00
Fabio Manganiello 213498318f
[media] Support extended format/metadata for media dirs. 2024-08-25 00:11:37 +02:00
Fabio Manganiello 077e12e9a8
[media] Allow media_dirs to be either a list or a dict.
This allows the user to have some user-friendly names for their
collections on the UI, such as `Movies` instead of
`/mnt/hd/media/movies`.
2024-08-25 00:11:37 +02:00
Fabio Manganiello 897e8a9ff7
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-19 01:08:49 +00:00
Fabio Manganiello b439b8b0f4
[file] Better implementation of file.get_mime_types.
All checks were successful
continuous-integration/drone/push Build is passing
- The MIME magic functions apparently aren't thread safe, and they may
  crash the interpreter if called concurrently. Lock calls to
  `file.get_mime_types`.

- Added an LRU cache for the MIME type results.
2024-08-19 03:07:34 +02:00
Fabio Manganiello f1c640fabb
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-19 00:14:32 +00:00
Fabio Manganiello 666bbe5372
Removed media.omxplayer reference.
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-19 02:11:40 +02:00
Fabio Manganiello 9dfb22c23a
[file] Added file.info and file.get_mime_types actions. 2024-08-19 02:10:51 +02:00
Fabio Manganiello 2b48edfabc
[media.vlc] Prevent deadlock on media.vlc.quit.
`_on_stop_event` may be set by the callback, but then cleared again when
`_reset_state` is called.

This can result in the `_on_stop_event.wait` call in `quit` to time out.

Instead, `_on_stop_event` should be cleared only when the player goes
into `playing` or `paused` mode. It's only then that we know for sure
that the state isn't `stopped`, and only in that case it makes sense to
wait for a stop.
2024-08-19 02:02:21 +02:00
Fabio Manganiello 6e27c9b8e4
Bump version: 1.2.2 → 1.2.3
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-18 15:22:02 +02:00
Fabio Manganiello 74a2958ff4
Updated CHANGELOG 2024-08-18 15:22:02 +02:00
Fabio Manganiello 8333cc09ee
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-18 11:05:26 +00:00
Fabio Manganiello 01571e2e65
[UI] Many improvements for the media UI.
All checks were successful
continuous-integration/drone/push Build is passing
- Support for _Play_ / _Play (With Cache)_ options for YouTube videos.

- Added `media.chromecast` and `media.gstreamer` UI panels.

- Removed `media.omxplayer` - the plugin has been removed.

- Enriched and improved the media info component.

- Propagate the media loading state to all children components.

- Persist query/search state on the URL.

Closes: #422
2024-08-18 13:03:04 +02:00
Fabio Manganiello a21aaee888
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-18 10:58:02 +00:00
Fabio Manganiello 5080caa38e [#422] Enabled support for yt-dlp mux+transcoding in media plugins
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #423
2024-08-18 12:56:47 +02:00
Fabio Manganiello ca5853cbab
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-15 17:58:53 +00:00
Fabio Manganiello 1f120b167b
Merge pull request #444 from blacklight/dependabot/npm_and_yarn/platypush/backend/http/webapp/axios-1.7.4
All checks were successful
continuous-integration/drone/push Build is passing
Bump axios from 1.7.1 to 1.7.4 in /platypush/backend/http/webapp
2024-08-15 19:54:58 +02:00
dependabot[bot] 09412acba7
Bump axios from 1.7.1 to 1.7.4 in /platypush/backend/http/webapp
Bumps [axios](https://github.com/axios/axios) from 1.7.1 to 1.7.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.1...v1.7.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-15 17:54:22 +00:00
Fabio Manganiello e0ff180fb0
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-13 11:41:39 +00:00
Fabio Manganiello 1189e71539 Added merge_output_format option to media plugins
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-13 13:40:15 +02:00
Fabio Manganiello 50beb1460b
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-12 07:45:30 +00:00
Fabio Manganiello d155094729
[zigbee.mqtt] Minor LINT fixes.
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-12 09:44:07 +02:00
Fabio Manganiello 866be36aad
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-09 13:37:56 +00:00
Fabio Manganiello 129c7587ad
[zigbee.mqtt] Removed synchronous logic on device_set.
All checks were successful
continuous-integration/drone/push Build is passing
Don't wait for a value update on `device_set` - an event will be
triggered anyway when the value changes.

This should prevent timeouts when setting/toggling values.
2024-08-09 15:36:39 +02:00
Fabio Manganiello d70737ea2b
[zigbee.mqtt] Added more logging lines on device_set action. 2024-08-09 15:36:34 +02:00
Fabio Manganiello b8b70f43c0
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 19:52:18 +00:00
Fabio Manganiello 8b6c1fb969
Fixed NPE on the /auth endpoint in case the user response is already a UserAuthStatus.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 21:47:55 +02:00
Fabio Manganiello 0071fc54b3
Bump version: 1.2.1 → 1.2.2
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2024-07-27 16:34:02 +02:00
Fabio Manganiello ee1d91db6b
Updated CHANGELOG 2024-07-27 16:33:55 +02:00
Fabio Manganiello d0f65e84e0
Restored some sections of setup.py.
All checks were successful
continuous-integration/drone/push Build is passing
Otherwise the installation won't work properly on Debian oldstable (and
probably any Python installation that doesn't fully support
pyproject.toml yet).
2024-07-27 16:22:14 +02:00
Fabio Manganiello 4d18345cda
Bump version: 1.2.0 → 1.2.1
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2024-07-27 15:40:20 +02:00
Fabio Manganiello 4c80e6fd34
Fixed github.com repo URL case.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 15:38:55 +02:00
Fabio Manganiello 598de6b91a
[CI/CD] Only push tags to Github on the second git push command.
Some checks failed
continuous-integration/drone/push Build is failing
2024-07-27 15:36:22 +02:00
Fabio Manganiello 20483524d1
Updated CHANGELOG. 2024-07-27 15:34:29 +02:00
Fabio Manganiello 9bbdfc1eb9
[CI/CD] Mirror also tags to Github. 2024-07-27 15:31:50 +02:00
Fabio Manganiello 4568b4659e
[CI/CD] grep the version out of version.py.
All checks were successful
continuous-integration/drone/push Build is passing
Instead of running `python setup.py --version`.

That's because earlier versions of Python that don't fully support
dynamic version specifications through `pyproject.toml` may just return
`0.0.0` here.
2024-07-27 15:29:08 +02:00
Fabio Manganiello 54c2264403
license is not required in pyproject.toml if it's already specified in classifiers. 2024-07-27 15:18:47 +02:00
Fabio Manganiello 52d92da907
Upgraded license date.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 15:12:45 +02:00
Fabio Manganiello 88cc18de92
Replaced remaining setup.py references in the code with pyproject.toml. 2024-07-27 15:12:19 +02:00
Fabio Manganiello fb99eefe40
Bump version: 1.1.3 → 1.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 14:43:16 +02:00
Fabio Manganiello ba390ab2f3
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 12:41:32 +00:00
Fabio Manganiello 6053a80796
Added backend /login and /register routes.
All checks were successful
continuous-integration/drone/push Build is passing
These are required for clients that don't have JS enabled and will get a
404 otherwise.

The routes simply render `index.html`, which will be empty if JS is
disabled and will redirect to the appropriate login/registration Vue
route if the user isn't logged in.
2024-07-27 14:39:09 +02:00
Fabio Manganiello ccc778e056
Setting optional-dependencies as dynamic in pyproject.toml.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 14:15:01 +02:00
Fabio Manganiello e10f1d7e1b
[Automatic] Updated components cache
Some checks failed
continuous-integration/drone/push Build is failing
2024-07-27 12:09:07 +00:00
Fabio Manganiello de96b4ea17
Migrated project setup to pyproject.toml.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 14:06:53 +02:00
Fabio Manganiello 92fe119cff
Removed psutil as a required pip dependency.
Moved to optional dependencies for `system` plugin.

It requires gcc, linux-headers and python-dev to be installed on the
system.

The `python-psutil` system package however will still be installed when
Platypush is installed through a package manager.
2024-07-27 14:02:53 +02:00
Fabio Manganiello f809ce0cb0
Apparently the version variable needs to always be named __version__.
Otherwise bump-my-version gets confused.
2024-07-27 12:13:40 +02:00
Fabio Manganiello 0963cd3d55
Moving around the __version__ string to get bumpversion to work again.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 12:12:07 +02:00
Fabio Manganiello a70f151e28
[Fix] Version should be explicitly defined in setup.cfg (for now).
All checks were successful
continuous-integration/drone/push Build is passing
Importing `platypush.__version__` also imports the `platypush` base
package, which in turns depends on at least `pyyaml` being already
installed on the system.
2024-07-27 11:56:23 +02:00
Fabio Manganiello b71612cb2f
[core] Moved __version__ string to its own package.
Some checks failed
continuous-integration/drone/push Build is failing
It reduces the duplication of `__version__`, which before was defined
on:

- `setup.py`
- `setup.cfg`
- `platypush/__init__.py`
2024-07-27 11:46:18 +02:00
Fabio Manganiello dfe0092857
Updated CHANGELOG
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 11:35:09 +02:00
Fabio Manganiello 90736f8ffb
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-26 23:58:32 +00:00
Fabio Manganiello 6cd342e1f4
[UI] Quickfix: Remove margin from default input style.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 01:55:46 +02:00
Fabio Manganiello e234210fb5
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-26 23:46:57 +00:00
Fabio Manganiello 179c8265cf
[#419] Added ability to view and remove API tokens.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-27 01:43:18 +02:00
Fabio Manganiello c13623c3f7
[#419] API tokens - frontend implementation.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-26 21:59:14 +02:00
Fabio Manganiello a8343cb45b
[UI] Persist current settings page on the URL. 2024-07-26 17:37:25 +02:00
Fabio Manganiello 91f6beb349
[#419] API tokens - backend implementation.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-26 02:29:40 +02:00
Fabio Manganiello 683ffa98c1
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-25 00:45:14 +00:00
Fabio Manganiello 6b5dbe7c1e
[#339] Frontend implementation of the new 2FA logic.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #339
2024-07-25 02:43:15 +02:00
Fabio Manganiello 7351a2685a
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-25 00:24:25 +00:00
Fabio Manganiello 79dc5e238d
[core] Skip 2FA code verification for JWT tokens.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-25 02:23:07 +02:00
Fabio Manganiello a11f17aa8f
[core] Encrypt users 2FA backup codes with bcrypt.
Instead of RSA - decrypting is unnecessary.
2024-07-25 02:23:07 +02:00
Fabio Manganiello 67d8d0a515
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-24 22:48:49 +00:00
Fabio Manganiello 8ec1ca8543
[#339] Backend preparation for 2FA support.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-25 00:47:04 +02:00
Fabio Manganiello 2cbb005c67
[core] The generation of RSA keys should be behind shared process locks.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-25 00:38:30 +02:00
Fabio Manganiello cf813e4197
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-24 19:36:47 +00:00
Fabio Manganiello b1b51b4b7e
[tests] Fixed tests after HTTP auth refactor.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-24 21:34:30 +02:00
Fabio Manganiello 70db33b4e2
[core] Better Redis connection fail handling logic.
If the connection to Redis goes down, it shouldn't take down the main
thread.

Instead, catch `RedisConnectionError`, and execute `poll` in a loop
until the connection is restored.
2024-07-24 21:33:04 +02:00
Fabio Manganiello 357d92b479
[core] Added current_user() HTTP utility. 2024-07-24 00:49:21 +02:00
Fabio Manganiello 2033f9760a
[core] Refactoring user/authentication layer.
- Separated the user model/db classes from the `UserManager`.
- More consistent naming for the flag on the `authenticate_*` functions
  that enables returning a tuple with the authentication status - all
  those flags are now named `with_status`.
2024-07-23 22:44:40 +02:00
Fabio Manganiello ee27b2c4c6
[core] Refactored Web login/registration layer.
Some checks reported errors
continuous-integration/drone/push Build was killed
Instead of having a single Flask-provided endpoint, the UI should
initialize its own Vue component and manage the authentication
asynchronously over API.

This is especially a requirement for the implementation of 2FA.

The following routes have also been merged/refactored:

- `POST /register` -> `POST /auth?type=register`
- `POST /login` -> `POST /auth?type=login`
- `POST /auth` -> `POST /auth?type=jwt`
2024-07-23 02:08:25 +02:00
Fabio Manganiello 8904e40f9f
[UI] Redirect URIs should always be relative to the current host. 2024-07-23 02:08:25 +02:00
Fabio Manganiello fe2497577d
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-21 19:34:57 +00:00
Fabio Manganiello 01aedb5568
[UI] DropdownItem should emit @input together with @click.
All checks were successful
continuous-integration/drone/push Build is passing
The propagation of the `click` event shouldn't be stopped, as it is
required for the upstream Dropdown event to understand if it needs to
close.

Components should instead listen to `@input` events, so disabled items
will not be triggered.
2024-07-21 21:32:54 +02:00
Fabio Manganiello 2ccf00508d
[qrcode] Allow binary content for qrcode.generate. 2024-07-21 21:32:54 +02:00
Fabio Manganiello 8329de15ba
[UI] Added extra showError condition on /execute. 2024-07-21 21:32:53 +02:00
Fabio Manganiello c1b1bd6c50
[UI] Added generic .text-danger class. 2024-07-21 21:32:49 +02:00
Fabio Manganiello fdd42b8a22
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 22:00:27 +00:00
Fabio Manganiello baa584c1ca
[Torrents UI] Fixed style for files list
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 23:58:25 +02:00
Fabio Manganiello 929271ee0e
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 20:26:11 +00:00
Fabio Manganiello f608475380 Fix outdated method name in sound plugin docs. 2024-07-20 20:25:21 +00:00
snyk-bot 5a1c6b064a
fix: requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-URLLIB3-7267250
2024-07-20 22:21:54 +02:00
Fabio Manganiello f2b2189282
Merge pull request #437 from blacklight/snyk-fix-be2eea233b2d14c94dc846778f7390d9
[Snyk] Security upgrade zipp from 3.15.0 to 3.19.1
2024-07-20 12:43:52 +02:00
Fabio Manganiello 3e8ab8d0db
Merge branch 'master' into snyk-fix-be2eea233b2d14c94dc846778f7390d9 2024-07-20 12:43:44 +02:00
Fabio Manganiello 3f195b4e9c
Merge pull request #436 from blacklight/snyk-upgrade-68f4dd59f0141e45f5a75099ee1e596c
[Snyk] Upgrade vue from 3.4.27 to 3.4.29
2024-07-20 12:42:58 +02:00
Fabio Manganiello e75a865c86
Merge branch 'master' into snyk-upgrade-68f4dd59f0141e45f5a75099ee1e596c 2024-07-20 12:42:51 +02:00
Fabio Manganiello af187e95e5
Merge pull request #435 from blacklight/snyk-upgrade-207399cb68f0b666cd5a74f601c97857
[Snyk] Upgrade vue-router from 4.3.2 to 4.3.3
2024-07-20 12:41:55 +02:00
Fabio Manganiello 255422d5b8
Merge pull request #434 from blacklight/snyk-upgrade-e9c8d4be8f1465ea41d140fa3ac746c3
[Snyk] Upgrade sass from 1.77.2 to 1.77.3
2024-07-20 12:41:42 +02:00
Fabio Manganiello 18a7b05a80
Merge pull request #432 from blacklight/dependabot/npm_and_yarn/platypush/backend/http/webapp/braces-3.0.3
Bump braces from 3.0.2 to 3.0.3 in /platypush/backend/http/webapp
2024-07-20 12:41:24 +02:00
Fabio Manganiello 0c8d86b8d4
Merge pull request #433 from blacklight/snyk-fix-08929d3c6ce8e8043728fa83145c4cd8
[Snyk] Security upgrade urllib3 from 2.0.7 to 2.2.2
2024-07-20 12:40:59 +02:00
Fabio Manganiello 6ab0c3d953
Merge pull request #431 from blacklight/snyk-upgrade-58571bd8b39cde152d941b6e296a9f10
[Snyk] Upgrade axios from 1.6.8 to 1.7.1
2024-07-20 12:40:41 +02:00
Fabio Manganiello 48996622d9
[README] Added Codefactor badge.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 12:13:10 +02:00
Fabio Manganiello 38edaaf311
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 10:09:48 +00:00
Fabio Manganiello 15b615efe8
[Camera UI] React on screen orientation changes to redraw the camera frame.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 12:07:51 +02:00
Fabio Manganiello 6e99e87aa6
[PWA] Allow any orientation. 2024-07-20 12:07:51 +02:00
Fabio Manganiello a5c69d2ded
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 01:48:11 +00:00
Fabio Manganiello 7661d9c843
[#393] Added bind_socket parameter to backend.http.
All checks were successful
continuous-integration/drone/push Build is passing
The web server can now listen either on a TCP port, on a UNIX socket, or
both.

Closes: #393
2024-07-20 03:46:57 +02:00
Fabio Manganiello 9e36c5550f
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 00:59:17 +00:00
Fabio Manganiello 8291a97cd9
[Camera UI] Don't overflow the screen size.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 02:57:21 +02:00
Fabio Manganiello 579f9816e2
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 00:27:45 +00:00
Fabio Manganiello b69e950076
[Camera UI] Dynamic fullscreen support.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-20 02:25:48 +02:00
Fabio Manganiello 3fddf67949
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-17 23:04:48 +00:00
Fabio Manganiello 4441461354
[Samsung TV UI] Improved UI style.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-18 01:02:51 +02:00
Fabio Manganiello 52f5ce2642
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-17 22:44:54 +00:00
Fabio Manganiello 392d64d03b
[tv.samsung] Reset the websocket connection in case of command error.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-18 00:43:12 +02:00
Fabio Manganiello 4d39791569
Dynamically generate install_requires through requirements.txt.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-18 00:04:04 +02:00
Fabio Manganiello fabcba14d9
[CI/CD] Commented out the generation of the Arch platypush-git package.
Some checks failed
continuous-integration/drone/push Build is failing
See https://aur.archlinux.org/packages/platypush-git#comment-982845

If the PKGBUILD uses a dynamic `pkgver()` function, then `*-git`
packages shouldn't be updated unless there are some changes in the
PKGBUILD file itself.

See https://aur.archlinux.org/packages/platypush-git#comment-982845
2024-07-17 23:16:58 +02:00
Fabio Manganiello 38cf102397
[#401] Added --redis-bin/PLATYPUSH_REDIS_BIN option/variable.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #401
2024-07-17 23:11:48 +02:00
Fabio Manganiello 6d425b06f7
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-17 00:46:29 +00:00
Fabio Manganiello 234c3ce7d8
[UI] Added nav button to expand plugin views.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-17 02:44:33 +02:00
Fabio Manganiello 28ce11d636
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-17 00:32:01 +00:00
Fabio Manganiello 490ed4c361
[#413] /manifest.json should install PWAs for specific plugins.
All checks were successful
continuous-integration/drone/push Build is passing
If called on a `/plugin/<plugin>` route.
2024-07-17 02:30:47 +02:00
Fabio Manganiello b039d98c66
[Packaging] Removed sudo and redis dependencies from Arch.
These are already available through the pacman/AUR helper and
`python-redis` respectively.

See https://aur.archlinux.org/packages/platypush#comment-982710
2024-07-17 02:30:47 +02:00
Fabio Manganiello 4c4e29b34e
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 23:27:52 +00:00
Fabio Manganiello f55cacb2e3
[chore] Added missing parameter to docstring.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-17 01:26:17 +02:00
Fabio Manganiello 35c827ca4a
[Packaging] Exclude symlinks in the source package from installation.
All checks were successful
continuous-integration/drone/push Build is passing
It seems that `setup.py` started complaining about the installation of
non-regular files.

They seem to be created later anyway (as directories rather than
symlinks), so no further action should be required (hopefully).
2024-07-17 01:15:22 +02:00
Fabio Manganiello b312f1717f
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 20:16:23 +00:00
Fabio Manganiello a27955a583
[chore] Removed unused wheel dependency.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 22:14:56 +02:00
Fabio Manganiello 0e012c9800
[chore] Removed unused pytz dependency. 2024-07-16 22:09:35 +02:00
Fabio Manganiello 1d873aca05
[chore] Removed frozendict dependency.
It's no longer in use in the codebase.
2024-07-16 22:07:49 +02:00
Fabio Manganiello 8c0943e700
[CI/CD] Moved generation of Arch stable package to tag events.
All checks were successful
continuous-integration/drone/push Build is passing
Separating the generation of the Arch git package (on each commit to
master) from the generation of the Arch stable package (only on a new
tag) ensures that:

1. The checksum of the package isn't calculated on an older version of
   the archive.

2. The stable version of the package is always exactly aligned with the
   commit associated to the tag.
2024-07-16 22:03:32 +02:00
Fabio Manganiello dc96b4995c
[core] Added ApplicationStartedEvent to Redis bus instead of application.
All checks were successful
continuous-integration/drone/push Build is passing
The Redis bus now uses a pub/sub architecture rather than a simple
queue.

Earlier on, the application could post an event to the queue and then
pick it up when it started listening.

When doing a publish on a pub/sub channel, however, any messages
sent before the client started listening will be lost.
2024-07-16 20:56:51 +02:00
Fabio Manganiello 837b0fad98
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 13:37:08 +00:00
Fabio Manganiello 03950e23f7
Bump version: 1.1.2 → 1.1.3
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2024-07-16 15:34:50 +02:00
Fabio Manganiello 1f0aa0965d
Updated CHANGELOG 2024-07-16 15:31:32 +02:00
Fabio Manganiello 01af85d024
Updated UI files 2024-07-16 15:31:00 +02:00
Fabio Manganiello c128887c3e
Increased maxkb limit 2024-07-16 15:30:50 +02:00
Fabio Manganiello 673a52fde5 Bumped setup.py version - bumpversion did not work again
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 13:00:45 +02:00
Fabio Manganiello cf5993ede0 CHANGELOG update
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 12:56:27 +02:00
Fabio Manganiello 6f8a81f020
Bump version: 1.1.1 → 1.1.2
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 12:01:45 +02:00
Fabio Manganiello 71ff453587
Updated CHANGELOG. 2024-07-16 12:00:18 +02:00
Fabio Manganiello 484959a153 Merge pull request 'New YouTube UI features' (#411) from 391/improve-youtube-support into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #411

Closes: #391
2024-07-16 03:58:37 +02:00
Fabio Manganiello 329296b606
Merge branch 'master' into 391/improve-youtube-support
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 03:56:12 +02:00
Fabio Manganiello b8d8b48d73
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 01:52:02 +00:00
Fabio Manganiello 398925d76e
[media] Added only_audio option to media.download.
Some checks failed
continuous-integration/drone/push Build is failing
2024-07-16 03:50:14 +02:00
Fabio Manganiello b44bd0be32
[Media UI] Download Audio support.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 03:48:45 +02:00
Fabio Manganiello 5ebdb381f1
[File UI] Persist the path on the URI.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 03:12:18 +02:00
Fabio Manganiello aa92db9850
[UI] A more robust way to encode/decode URI arguments. 2024-07-16 03:10:54 +02:00
Fabio Manganiello e710a3a974
[Media UI] Support for open-channel events from any media item.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 02:30:47 +02:00
Fabio Manganiello c95381cead
[Media UI] Added more permalinks.
All checks were successful
continuous-integration/drone/push Build is passing
- `channel`
- `playlist`
2024-07-16 01:19:29 +02:00
Fabio Manganiello c5ac02d133
[Media UI] Misc style improvements. 2024-07-16 01:18:33 +02:00
Fabio Manganiello 910304b817
[Media UI] More URI-persisted navigation items.
All checks were successful
continuous-integration/drone/push Build is passing
- `player`
- `provider`
2024-07-15 23:12:04 +02:00
Fabio Manganiello e8723eae98
Merge branch 'master' into 391/improve-youtube-support 2024-07-15 22:35:24 +02:00
Fabio Manganiello 061e5a67a2
Merge branch 'master' into 391/improve-youtube-support 2024-07-15 22:35:01 +02:00
Fabio Manganiello a746273f73
[Media UI] Added media view to URL fragment.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-15 22:34:32 +02:00
Fabio Manganiello e180c9c76f
[Media UI] Extend YouTube video events to all media views.
These events should be available for all YouTube videos, regardless of
where they are rendered:

- `add-to-playlist`
- `remove-from-playlist`
- `download`
2024-07-15 22:32:13 +02:00
Fabio Manganiello c416d0ea1f
[Media UI] MediaImage should emit both play and select. 2024-07-15 22:28:06 +02:00
Fabio Manganiello 75aed6af92
[UI] Added asynchronous timeout utility. 2024-07-15 22:26:42 +02:00
Fabio Manganiello ef4d0bd38c
[media] Support for generic media downloads.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-15 04:09:54 +02:00
Fabio Manganiello bd01827b52
[Automatic] Updated components cache 2024-07-15 04:09:54 +02:00
Fabio Manganiello f64d47565d
[Media UI] Support for generic media download. 2024-07-15 04:09:54 +02:00
Fabio Manganiello 79ba8deb71
[media] Added support for yt-dlp-compatible URLs to media.download.
Also, added `MediaDownloadEvent`s to keep track of the state of the
download.
2024-07-15 04:09:53 +02:00
Fabio Manganiello 84e06e30fe
[core] New architecture for the Redis bus.
- Use pubsub pattern rather than `rpush`/`blpop` - it saves memory, it's
  faster, and it decreases the risk of deadlocks.

- Use a connection pool.

- Propagate `PLATYPUSH_REDIS_QUEUE` environment variable so any
  subprocesses can access it.
2024-07-15 04:09:53 +02:00
Fabio Manganiello f78027a6eb
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-15 02:09:39 +00:00
Fabio Manganiello b43c4612fd
[media] Support for generic media downloads.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-15 04:08:26 +02:00
Fabio Manganiello dce6096020
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-14 01:07:51 +00:00
Fabio Manganiello 96aa22c03e
[media] Added support for yt-dlp-compatible URLs to media.download.
All checks were successful
continuous-integration/drone/push Build is passing
Also, added `MediaDownloadEvent`s to keep track of the state of the
download.
2024-07-14 03:06:36 +02:00
Fabio Manganiello 16527417da
[core] New architecture for the Redis bus.
- Use pubsub pattern rather than `rpush`/`blpop` - it saves memory, it's
  faster, and it decreases the risk of deadlocks.

- Use a connection pool.

- Propagate `PLATYPUSH_REDIS_QUEUE` environment variable so any
  subprocesses can access it.
2024-07-14 03:06:35 +02:00
Fabio Manganiello 1ad68cac11 Merge branch 'master' into 391/improve-youtube-support
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-13 00:55:34 +02:00
Fabio Manganiello 972f9dffb9
[YouTube UI] Fixed infinite scroll for channels.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-13 00:54:29 +02:00
Fabio Manganiello 6a0f19a62f
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-12 22:42:49 +00:00
Fabio Manganiello 81fb1a47c3
Merge branch 'master' into 391/improve-youtube-support 2024-07-13 00:41:46 +02:00
Fabio Manganiello 24b5b3ba14
[youtube] Added youtube.is_subscribed action.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-13 00:41:38 +02:00
Fabio Manganiello 21ac87394a
[YouTube UI] Added channel subscribe/unsubscribe buttons.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-13 00:40:29 +02:00
Fabio Manganiello 55c4f5797b
[YouTube UI] Added support for browsing channels from search results.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-13 00:04:26 +02:00
Fabio Manganiello c7f12e0bd8
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-12 01:13:48 +00:00
Fabio Manganiello 5ff839919c
Merge branch 'master' into 391/improve-youtube-support
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-12 03:12:39 +02:00
Fabio Manganiello 7266fe8a43
[youtube] Always add id and url to playlist results.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-12 03:12:31 +02:00
Fabio Manganiello c8fa53e62f
[media.mpv] Fix for media duration if playback_time is not available. 2024-07-12 03:12:31 +02:00
Fabio Manganiello e65bf99baf
[YouTube UI] Added support for browsing playlists from search results.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-12 03:10:43 +02:00
Fabio Manganiello 9b42815d77
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-11 21:45:09 +00:00
Fabio Manganiello 7c610413df
Merge branch 'master' into 391/improve-youtube-support 2024-07-11 23:44:07 +02:00
Fabio Manganiello aaf6c39255
Fixed RST doc typo.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-11 23:43:53 +02:00
Fabio Manganiello a4979f1513
[Media UI] Support for playlists in search results.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-11 23:42:18 +02:00
Fabio Manganiello ded64e8dc2
[UI Performance] Lazy initialization for router components. 2024-07-11 23:40:19 +02:00
Fabio Manganiello 1a9ac56923
Merge branch 'master' into 391/improve-youtube-support 2024-07-11 23:37:57 +02:00
Fabio Manganiello 12d53b846e
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-11 21:37:44 +00:00
Fabio Manganiello 5e905db0f5
[youtube] Support for playlists and channels in search results.
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-11 23:36:25 +02:00
snyk-bot 17dbd91198
fix: requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-ZIPP-7430899
2024-07-10 04:55:05 +00:00
snyk-bot e70f12b948
fix: upgrade vue from 3.4.27 to 3.4.29
Snyk has created this PR to upgrade vue from 3.4.27 to 3.4.29.

See this package in npm:
vue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-07-06 04:46:46 +00:00
snyk-bot e59606e588
fix: upgrade vue-router from 4.3.2 to 4.3.3
Snyk has created this PR to upgrade vue-router from 4.3.2 to 4.3.3.

See this package in npm:
vue-router

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-07-02 06:32:38 +00:00
Fabio Manganiello 98a6adb7ef
[Youtube UI] More playlist actions.
All checks were successful
continuous-integration/drone/push Build is passing
- `create_playlist`
- `rename_playlist`
- `delete_playlist`
2024-06-27 01:26:00 +02:00
Fabio Manganiello d4354e81f8
[Youtube UI] Added playlist operations.
All checks were successful
continuous-integration/drone/push Build is passing
- `add_to_playlist`
- `remove_from_playlist`
2024-06-27 00:24:31 +02:00
Fabio Manganiello c9daa037a7
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-26 22:23:01 +00:00
Fabio Manganiello 701623c99d
Merge branch 'master' into 391/improve-youtube-support 2024-06-27 00:22:22 +02:00
Fabio Manganiello 8880b966fc
[youtube] Fixed playlist operations URLs.
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-27 00:21:27 +02:00
Fabio Manganiello 5d4bfb3f90
Fixed un-bumped version in setup.py 2024-06-27 00:21:03 +02:00
Fabio Manganiello 5f23aa8e78 Merge branch 'master' into 391/improve-youtube-support
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-26 00:05:22 +02:00
Fabio Manganiello 8cea668e37
[Automatic] Updated components cache
Some checks failed
continuous-integration/drone/push Build is failing
2024-06-25 22:04:33 +00:00
Fabio Manganiello 26d9e6d9b9 Merge branch 'master' into 391/improve-youtube-support
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-26 00:03:47 +02:00
Fabio Manganiello b890326e71 [youtube] Added Piped edit actions.
- `subscribe`
- `unsubscribe`
- `add_to_playlist`
- `remove_from_playlist`
- `create_playlist`
- `remove_playlist`
2024-06-25 22:03:40 +00:00
Fabio Manganiello b2b59d651c Merge pull request '[youtube] Added Piped edit actions.' (#412) from 391/improve-youtube-support-backend into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #412
2024-06-26 00:03:21 +02:00
Fabio Manganiello b83dee50e5 Merge branch 'master' into 391/improve-youtube-support-backend
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-26 00:02:26 +02:00
Fabio Manganiello 773986f211
[youtube] Added Piped edit actions.
All checks were successful
continuous-integration/drone/push Build is passing
- `subscribe`
- `unsubscribe`
- `add_to_playlist`
- `remove_from_playlist`
- `create_playlist`
- `remove_playlist`
2024-06-25 23:59:20 +02:00
Fabio Manganiello 705ba82fa1
[Media UI] Added button to get the raw stream URL from youtube-dl compatible media.
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-25 23:03:44 +02:00
Fabio Manganiello affe95be96
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-25 21:02:16 +00:00
Fabio Manganiello 6faa845afd
Migrated /file route.
All checks were successful
continuous-integration/drone/push Build is passing
Streaming content from a Flask route wrapped into a Tornado route is a
buffering nightmare.

`/file` has now been migrated to a pure Tornado asynchronous route
instead.
2024-06-25 23:00:51 +02:00
Fabio Manganiello c7ee97bb0b
Bump version: 1.1.0 → 1.1.1
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-25 01:51:27 +02:00
Fabio Manganiello 5799a2b352
Updated CHANGELOG 2024-06-25 01:51:27 +02:00
Fabio Manganiello 1a21671dde
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-24 18:30:48 +00:00
Fabio Manganiello 1f544c9e53
Fixed schema attribute description type mismatch.
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-24 20:29:35 +02:00
Fabio Manganiello a754b06f88
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-24 17:23:31 +00:00
Fabio Manganiello 3dc1ff3c6e
[#408] Rewritten+expanded torrent UI.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #408
2024-06-24 19:20:04 +02:00
Fabio Manganiello 1774e464cc
[torrent] Added is_media attribute to torrent results. 2024-06-24 01:12:00 +02:00
Fabio Manganiello 1dd905dc66
[torrent] Normalized limit/page parameters in torrent.search.
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-06-23 23:42:04 +02:00
Fabio Manganiello ec050b2853
[HTTP] Added authenticated /file?path=<path> route. 2024-06-23 23:40:39 +02:00
Fabio Manganiello 9993e9b6b7
[Chore] Updated pre-commit dependencies. 2024-06-23 23:40:01 +02:00
Fabio Manganiello 5672b23fbe
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-22 23:43:49 +00:00
Fabio Manganiello 744da20b7c Updated CHANGELOG 2024-06-22 23:42:18 +00:00
Fabio Manganiello 91e2530dd5 [#407] Implemented torrent.csv backend 2024-06-22 23:42:18 +00:00
Fabio Manganiello 8fc3201b8c [torrent] Refactored torrent search.
Allow for more torrent search providers other than PopcornTime (in
preparation for torrent-csv).
2024-06-22 23:42:18 +00:00
snyk-bot 9027eaf4d1
fix: upgrade sass from 1.77.2 to 1.77.3
Snyk has created this PR to upgrade sass from 1.77.2 to 1.77.3.

See this package in npm:
sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-20 20:17:29 +00:00
snyk-bot dedfc0bc3a
fix: requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-URLLIB3-7267250
2024-06-18 18:27:14 +00:00
dependabot[bot] 8b65a5f151
Bump braces from 3.0.2 to 3.0.3 in /platypush/backend/http/webapp
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-18 02:36:09 +00:00
snyk-bot d8598f60a2
fix: upgrade axios from 1.6.8 to 1.7.1
Snyk has created this PR to upgrade axios from 1.6.8 to 1.7.1.

See this package in npm:
axios

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-10 17:58:39 +00:00
Fabio Manganiello 36f49952c4
Merge pull request #430 from blacklight/snyk-upgrade-710b29e45259ad93d91928143706d645
[Snyk] Upgrade sass from 1.76.0 to 1.77.2
2024-06-10 16:33:58 +02:00
Fabio Manganiello dff6aeec6d
Merge pull request #429 from blacklight/snyk-upgrade-1ae729d9a265d3887d0b23573e3b6020
[Snyk] Upgrade vue from 3.4.24 to 3.4.27
2024-06-10 16:33:41 +02:00
snyk-bot d6ab2ee02b
fix: upgrade sass from 1.76.0 to 1.77.2
Snyk has created this PR to upgrade sass from 1.76.0 to 1.77.2.

See this package in npm:
sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-07 17:21:22 +00:00
snyk-bot 2e08e2f820
fix: upgrade vue from 3.4.24 to 3.4.27
Snyk has created this PR to upgrade vue from 3.4.24 to 3.4.27.

See this package in npm:
vue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-07 17:21:17 +00:00
Fabio Manganiello ed697c0ad2
🐛 [CI/CD] Fixed build-ui.sh script.
All checks were successful
continuous-integration/drone/push Build is passing
After doing "cd $SRCDIR", it should reference the `dist` directory in
the webapp by full relative path.
2024-06-06 22:46:37 +02:00
Fabio Manganiello 22cfe777fa
Merge pull request #428 from blacklight/snyk-upgrade-2f9bcb05344a53203d1db8700a74298c
Some checks failed
continuous-integration/drone/push Build is failing
[Snyk] Upgrade core-js from 3.37.0 to 3.37.1
2024-06-06 22:32:31 +02:00
Fabio Manganiello 3f2832a077
Merge branch 'master' into snyk-upgrade-2f9bcb05344a53203d1db8700a74298c 2024-06-06 22:32:04 +02:00
Fabio Manganiello 6f8eb397d2
Merge pull request #427 from blacklight/snyk-upgrade-97c24303ee224553f29b460d83c6c780
[Snyk] Upgrade cronstrue from 2.49.0 to 2.50.0
2024-06-06 22:30:59 +02:00
Fabio Manganiello 3163721bf3
Merge pull request #426 from blacklight/snyk-upgrade-26bc4dca62d58f39bfb77f2e69121708
[Snyk] Upgrade sass from 1.75.0 to 1.76.0
2024-06-06 22:30:43 +02:00
Fabio Manganiello d79b8a1de5
Merge pull request #425 from blacklight/snyk-upgrade-a75151e7066361ecbf2a647d6e707a32
[Snyk] Upgrade vue from 3.4.23 to 3.4.24
2024-06-06 22:30:20 +02:00
Fabio Manganiello 3afc6b2271
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-06 20:29:13 +00:00
Fabio Manganiello 17b6b02986 Replaced warnings.warn with logging.warnings.
I couldn't find an easy and reliable way of routing `warnings.warn` to
`logging`.

Closes: #281
2024-06-06 20:28:23 +00:00
Fabio Manganiello 87a902bfa3
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-06 01:28:13 +00:00
Fabio Manganiello 421feffd3e
Bump version: 1.0.7 → 1.1.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-06 03:27:04 +02:00
Fabio Manganiello 518dc146d6
Bumped version in CHANGELOG. 2024-06-06 03:27:04 +02:00
Fabio Manganiello 6b11db7afb
[docs] Added inherited-members.
Closes: #403
2024-06-06 03:27:03 +02:00
Fabio Manganiello 8814859abc
[zwave.mqtt] Fixed typo in documentation. 2024-06-06 03:27:03 +02:00
Fabio Manganiello 0ccd029ff1
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-06 00:25:21 +00:00
Fabio Manganiello e52f5e06f4 [calendar.ical] Fixed timezone/datetime parsing issues.
Closes: #405
2024-06-06 00:24:31 +00:00
snyk-bot 066d71faa3
fix: upgrade core-js from 3.37.0 to 3.37.1
Snyk has created this PR to upgrade core-js from 3.37.0 to 3.37.1.

See this package in npm:
core-js

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-04 18:18:54 +00:00
Fabio Manganiello 4f19b45975 Bump version: 1.0.6 → 1.0.7 2024-06-02 15:49:59 +00:00
Fabio Manganiello 7d6ffc76fb [CI/CD] The build-ui script should go back to the source root after running the UI build commands from the UI folder 2024-06-02 15:46:18 +00:00
Fabio Manganiello 7a8f30e5e0 [#384] Added assistant.openai and tts.openai plugins.
Closes: #384
2024-06-02 15:31:11 +00:00
Fabio Manganiello 3528b3646f [openai] Update documentation to include assistant and tts. 2024-06-02 15:31:11 +00:00
Fabio Manganiello 9cca928d4b [#348] Added openai.transcribe action.
This API is the foundation for the `assistant.openai` plugin.
2024-06-02 15:31:11 +00:00
Fabio Manganiello f356fcd844 Added tts.stop method. 2024-06-02 15:31:11 +00:00
Fabio Manganiello fcae7aa3ad Several improvements for assistant plugins.
- `stop_conversation_on_speech_match` should default to True.

- `render_response` should also handle conversation follow-ups, set the
  follow-up to True if the response ends with a question mark and the
  value of `with_follow_on_turn` is not set,

- Don't render responses if a `tts_plugin` is not set.
2024-06-02 15:31:11 +00:00
Fabio Manganiello c7d640a1d2 IntentRecognizedEvent should stop the current assistant conversation when matched by a hook. 2024-06-02 15:31:11 +00:00
Fabio Manganiello 1cc2aaf5a4 [assistant.picovoice] _on_response_* methods should have varargs. 2024-06-02 15:31:11 +00:00
Fabio Manganiello 2acf6ef3e9 Bump version: 1.0.5 → 1.0.6 2024-06-01 09:01:07 +00:00
Fabio Manganiello 1107e526f7 Updated CHANGELOG 2024-06-01 09:01:07 +00:00
Fabio Manganiello 5fc9c1199b Fixed the root cause of the failure on the time module.
The previous commit prompted a new error:

```
2024-06-01 10:54:08,310|ERROR|platypush:plugin:bluetooth|module 'platypush.entities.time' has no attribute 'time'
Traceback (most recent call last):
  File "/usr/lib/python3.9/dist-packages/platypush/plugins/__init__.py", line 247, in _runner
    self.main()
  File "/usr/lib/python3.9/dist-packages/platypush/plugins/bluetooth/__init__.py", line 590, in main
    self._refresh_cache()
  File "/usr/lib/python3.9/dist-packages/platypush/plugins/bluetooth/__init__.py", line 146, in _refresh_cache
    get_entities_engine().wait_start()
  File "/usr/lib/python3.9/dist-packages/platypush/entities/__init__.py", line 48, in get_entities_engine
    time_start = time.time()
AttributeError: module 'platypush.entities.time' has no attribute 'time'
```

Which explains even the previous error: `import time` in that module
won't use the `time` module from the Python library, but the `.time`
module within the same directory.

This error only happens when the current directory is part of PYTHONPATH
(and usually it shouldn't), but for sake of keeping things safe I've
replaced `time()` with `utcnow().timestamp()`, with `utcnow` imported
from `platypush.utils`.
2024-06-01 09:01:07 +00:00
Fabio Manganiello b067430cd5 Weird fix for a weird error that suddenly started on one of my machines.
```
Traceback (most recent call last):
  File "/usr/lib/python3.9/dist-packages/platypush/plugins/__init__.py", line 247, in _runner
    self.main()
  File "/usr/lib/python3.9/dist-packages/platypush/plugins/bluetooth/__init__.py", line 590, in main
    self._refresh_cache()
  File "/usr/lib/python3.9/dist-packages/platypush/plugins/bluetooth/__init__.py", line 146, in _refresh_cache
    get_entities_engine().wait_start()
  File "/usr/lib/python3.9/dist-packages/platypush/entities/__init__.py", line 48, in get_entities_engine
    time_start = time()
TypeError: 'module' object is not callable
```

There isn't a single reason in this world for this error to happen.

If I do `from time import time`, then `t = time()` is 100% valid Python.

I have no clue of what may be causing it, but I hope that this will fix
it.
2024-06-01 08:50:30 +00:00
Fabio Manganiello ff60896625
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-31 23:55:27 +00:00
Fabio Manganiello 67b6e3a608
Bump version: 1.0.4 → 1.0.5
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-01 01:43:12 +02:00
Fabio Manganiello c61a1b89d6
Updated CHANGELOG 2024-06-01 01:42:21 +02:00
Fabio Manganiello c9a5c29a4a
🐛 A proper cross-version solution for the utcnow() issue.
No need to maintain two different pieces of logic - a `utcnow()` for
Python < 3.11 and `now(datetime.UTC)` for Python >= 3.11.

`datetime.timezone.utc` existed long before datetime.UTC and that's what
the `utcnow` facade should use.

This means that all the `utcnow()` will always have `tzinfo=UTC`
regardless of the Python version.

There's still a problem with the `utcnow()`-generated timestamps that
have been generated by previous versions of Python and stored on the db.

Therefore, when the code performs comparisons with timestamps fetched
from the db, it should always explicitly do a `.replace(tzinfo=utc)` to
ensure that we always compare offset-aware datetime representations.

See blog post for technical details:
https://manganiello.blog/wheres-my-time-again
2024-06-01 01:34:47 +02:00
Fabio Manganiello 1067ab04d9
[tts.picovoice] Adapted to the new orca.synthesize API.
The new API no longer returns a list of numeric values alone. Instead,
it returns a tuple where the first element is the raw audio, and the
second element contains extra info on the rendered phonemes.
2024-05-31 21:10:48 +02:00
Fabio Manganiello 709b90fa4b
Merge branch 'master' into 384/assistant-openai 2024-05-31 21:07:06 +02:00
Fabio Manganiello 06f0ac4545
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-31 17:59:06 +00:00
Fabio Manganiello 944fd45f9f
Bump version: 1.0.3 → 1.0.4
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-31 19:57:51 +02:00
Fabio Manganiello 6acdde6164
Updated CHANGELOG 2024-05-31 19:57:43 +02:00
Fabio Manganiello 3583dafbc3
🐛 Partial revert of c18768e61f
`datetime.utcnow` may be deprecated on Python >= 3.12, but
`datetime.UTC` isn't present on older Python versions.

Added a `platypush.utils.utcnow()` method as a workaround compatible
with both.
2024-05-31 19:55:19 +02:00
Fabio Manganiello 4513bb9569
Set a plugin argument on AssistantEvents besides assistant.
`assistant` contains the assistant plugin object that triggered the
event, but you can't create event hook conditions on attributes that are
plugins.

The event should also store a `plugin` attribute which contains the
unique plugin name, so hooks like these can be built:

```
from platypush import hook
from platypush.events.assistant import ConversationStartEvent

@when(ConversationStartEvent, plugin="assistant.google")
def on_google_conversation_start():
  ...
```

It wouldn't be possible to construct a hook condition like the one above
on the plugin object reported on the `assistant` attribute.
2024-05-31 19:55:19 +02:00
Fabio Manganiello 4e82dd17bb
🐛 Partial revert of c18768e61f
`datetime.utcnow` may be deprecated on Python >= 3.12, but
`datetime.UTC` isn't present on older Python versions.

Added a `platypush.utils.utcnow()` method as a workaround compatible
with both.
2024-05-31 19:52:32 +02:00
Fabio Manganiello e982c02524
Set a plugin argument on AssistantEvents besides assistant.
`assistant` contains the assistant plugin object that triggered the
event, but you can't create event hook conditions on attributes that are
plugins.

The event should also store a `plugin` attribute which contains the
unique plugin name, so hooks like these can be built:

```
from platypush import hook
from platypush.events.assistant import ConversationStartEvent

@when(ConversationStartEvent, plugin="assistant.google")
def on_google_conversation_start():
  ...
```

It wouldn't be possible to construct a hook condition like the one above
on the plugin object reported on the `assistant` attribute.
2024-05-31 19:29:50 +02:00
Fabio Manganiello d9a5ea1e53
Merge branch 'master' into 384/assistant-openai 2024-05-31 02:58:08 +02:00
Fabio Manganiello 23e02de1d7
Bump version: 1.0.2 → 1.0.3
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-31 02:57:08 +02:00
Fabio Manganiello 4d0b63a155
Updated CHANGELOG 2024-05-31 02:57:08 +02:00
Fabio Manganiello ce1525e786
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-31 00:53:37 +00:00
Fabio Manganiello 67478e7ca1 🐛 Fixed proper support for event package alias platypush.events.
Even though `platypush.events` is just a symlink to
`platypush.message.event`, imports from those two modules will be
treated as different imports, thus hook conditions build on
`platypush.events` imports will never match.
2024-05-31 00:52:48 +00:00
Fabio Manganiello c18768e61f Replaced deprecated usages of datetime.utcnow() with datetime.now(UTC). 2024-05-31 00:52:48 +00:00
Fabio Manganiello 30362b89e3 [assistant] tts_plugin_args should include join=True by default.
The assistant by default should be configured to wait for response audio
to be fully rendered before proceeding.
2024-05-31 00:52:48 +00:00
Fabio Manganiello 826a3fa55c CHANGELOG update 2024-05-31 00:52:48 +00:00
Fabio Manganiello 3986549326
🐛 Fixed proper support for event package alias platypush.events.
All checks were successful
continuous-integration/drone/push Build is passing
Even though `platypush.events` is just a symlink to
`platypush.message.event`, imports from those two modules will be
treated as different imports, thus hook conditions build on
`platypush.events` imports will never match.
2024-05-31 02:50:00 +02:00
Fabio Manganiello fa318882a5
Replaced deprecated usages of datetime.utcnow() with datetime.now(UTC). 2024-05-31 02:30:48 +02:00
Fabio Manganiello d6185ddb1e
[assistant] tts_plugin_args should include join=True by default.
The assistant by default should be configured to wait for response audio
to be fully rendered before proceeding.
2024-05-30 01:33:56 +02:00
snyk-bot fee12951d6
fix: upgrade cronstrue from 2.49.0 to 2.50.0
Snyk has created this PR to upgrade cronstrue from 2.49.0 to 2.50.0.

See this package in npm:
cronstrue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-27 17:30:57 +00:00
Fabio Manganiello d2caa989ac
CHANGELOG update 2024-05-27 00:18:27 +02:00
Fabio Manganiello fa3c804b71 [#368] Added Ubuntu release logic to update-apt-repo step too. 2024-05-26 20:57:10 +00:00
Fabio Manganiello 4cd0761e78
[#368] Added Ubuntu release logic to update-apt-repo step too.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 22:56:23 +02:00
Fabio Manganiello 16f7b7e12a Merge pull request '[#368] Added Ubuntu packages' (#402) from 368/ubuntu-packages into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #402

Closes: #368
2024-05-26 22:41:44 +02:00
Fabio Manganiello 22222fab65
[#368] Added Ubuntu packages
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 22:38:22 +02:00
Fabio Manganiello 5b3c0ad1cf
Bump version: 1.0.1 → 1.0.2
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 11:09:51 +02:00
Fabio Manganiello 3758a8d759
Updated CHANGELOG 2024-05-26 11:09:42 +02:00
Fabio Manganiello de2bbc53c6
Support both @procedure and @procedure(name) notations.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 11:02:19 +02:00
Fabio Manganiello a4a776986b
Bump version: 1.0.0 → 1.0.1
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 04:27:27 +02:00
Fabio Manganiello 9fef73a746
Bumped version in setup.py (for some reason bumpversion missed it) 2024-05-26 04:27:03 +02:00
Fabio Manganiello 0f6f119089
Bump version: 0.99.11 → 1.0.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 04:15:52 +02:00
Fabio Manganiello c64ff40dd3
Bump version: 0.99.10 → 0.99.11
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 04:06:15 +02:00
Fabio Manganiello 5c0f85c311
Don't provide git+https:// dependencies in setup.py extras.
Otherwise Twine will complain with errors like this:

```
HTTPError: 400 Bad Request from https://upload.pypi.org/legacy/
Can't have direct dependency: pybluez@
git+https://github.com/pybluez/pybluez ; extra == "bluetooth". See
https://packaging.python.org/specifications/core-metadata for more
information.
```
2024-05-26 04:04:58 +02:00
Fabio Manganiello e6702398dc
Bump version: 0.99.9 → 0.99.10
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 03:46:51 +02:00
Fabio Manganiello 983bcc240a
[Docs] A more robust interceptor for the grid rendering. 2024-05-26 03:46:25 +02:00
Fabio Manganiello d6d9d7a8e7
[CI/CD] Added extra dependencies to update-pip-package step. 2024-05-26 03:40:10 +02:00
Fabio Manganiello 8d26721040
Bump version: 0.99.8 → 0.99.9
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 03:32:49 +02:00
Fabio Manganiello 96f265a4a2
[CI/CD] Use a base Alpine image instead of python:3.11-alpine.
Weird errors seem to happen on Twine on that image:

```
Traceback (most recent call last):
  File "/usr/bin/twine", line 5, in <module>
    from twine.__main__ import main
  File "/usr/lib/python3.11/site-packages/twine/__init__.py", line 32, in <module>
    import importlib.metadata
  File "/usr/lib/python3.11/importlib/metadata/__init__.py", line 17, in <module>
    from . import _adapters, _meta
  File "/usr/lib/python3.11/importlib/metadata/_adapters.py", line 3, in <module>
    import email.message
  File "/usr/lib/python3.11/email/message.py", line 15, in <module>
    from email import utils
  File "/usr/lib/python3.11/email/utils.py", line 28, in <module>
    import random
  File "/usr/lib/python3.11/random.py", line 49, in <module>
    from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil
ImportError: Error relocating /usr/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-musl.so: _PyModule_Add: symbol not found
```
2024-05-26 03:31:25 +02:00
Fabio Manganiello 0ffff854d3
Bump version: 0.99.7 → 0.99.8
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 03:18:16 +02:00
Fabio Manganiello 020804fd1c
Don't link wiki/Home.md to wiki/index.md 2024-05-26 03:16:32 +02:00
Fabio Manganiello 42174b31bc
Bump version: 0.99.6 → 0.99.7
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 03:12:26 +02:00
Fabio Manganiello 3642d1ffa4
Added dns to mocked modules. 2024-05-26 03:02:57 +02:00
Fabio Manganiello 104457a302
Bump version: 0.99.5 → 0.99.6
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 01:47:22 +02:00
Fabio Manganiello 0445087699
[CI/CD] Removed hanging dependency. 2024-05-26 01:47:05 +02:00
Fabio Manganiello 751d719b04
Bump version: 0.99.4 → 0.99.5
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2024-05-26 01:46:29 +02:00
Fabio Manganiello bef027fc07
[CI/CD] Just remove the sync-stable-branch step. 2024-05-26 01:46:04 +02:00
Fabio Manganiello cc670f9d4a
Bump version: 0.99.3 → 0.99.4
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 01:26:46 +02:00
Fabio Manganiello 86674ddc28
[CI/CD] Do a git fetch beofre checkout/rebase in sync-stable-branch. 2024-05-26 01:26:19 +02:00
Fabio Manganiello ee3933dc77
Bump version: 0.99.2 → 0.99.3
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 00:56:29 +02:00
Fabio Manganiello e23664b5e7
[CI/CD] Be explicit about the origin in sync-stable-branch. 2024-05-26 00:56:01 +02:00
Fabio Manganiello 0537815721
Bump version: 0.99.1 → 0.99.2
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 00:50:37 +02:00
Fabio Manganiello a2ec20bb3a
[CI/CD] Create stable branch if it doesn't exist. 2024-05-26 00:50:02 +02:00
Fabio Manganiello d3562f4d20
Bump version: 0.99.0 → 0.99.1
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 00:44:30 +02:00
Fabio Manganiello bf5aece08b
Bumped version in setup.py (for some reason bumpversion missed it) 2024-05-26 00:44:20 +02:00
Fabio Manganiello 2f20580498
[CI/CD] Remove git remote rm/add logic from sync-stable-branch.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 00:39:51 +02:00
Fabio Manganiello 1911c05afe
Bump version: 0.50.3 → 0.99.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 00:25:34 +02:00
Fabio Manganiello cac256af08
Updated CHANGELOG
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-26 00:21:40 +02:00
Fabio Manganiello a784a6fe23
The index symlink is not needed.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 23:23:15 +02:00
Fabio Manganiello 0baae01ab7
[README and wiki changes]
All checks were successful
continuous-integration/drone/push Build is passing
- Renamed _Post-installation_ README section as _Configuration_.

- Docs style tweaks for the latest version of the Sphinx theme.

- Adapted the docs index to the new structure of the wiki.
2024-05-25 23:17:12 +02:00
Fabio Manganiello f70d352cd7
[README] Added database, workdir and device ID sections.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 22:14:15 +02:00
Fabio Manganiello 7c7e488867
Added example with return to the webhook handler.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 22:05:09 +02:00
Fabio Manganiello baee33b88f
README.
All checks were successful
continuous-integration/drone/push Build is passing
- Added/restyled badges.

- Added sections on the scripts directory and YAML `include` directive.
2024-05-25 21:43:44 +02:00
Fabio Manganiello 6de0b2e041
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 18:12:49 +00:00
Fabio Manganiello 35751da068
Added web hooks section to README.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 20:11:07 +02:00
Fabio Manganiello 0479c37d64
Full rewrite of the README.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 18:13:58 +02:00
Fabio Manganiello 3a4d7afcf0
Clean up all package manager caches after Docker build. 2024-05-25 14:15:13 +02:00
Fabio Manganiello e071e99dab
Remove all cached/compiled Python files after Docker build. 2024-05-25 13:36:52 +02:00
Fabio Manganiello 2e0246413c
Replaced an old for ... in ... yield loop with yield from ... 2024-05-25 10:35:23 +02:00
Fabio Manganiello b1dd484704
A more corner-case-proof logic for wants_break_system_packages.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 10:33:05 +02:00
Fabio Manganiello 303b11613b
s/Dockerfile.default/Dockerfile.alpine/
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 10:30:53 +02:00
Fabio Manganiello 05c6449d8b
Always add --break-system-packages to pip when the Docker context is active.
This fixes the case where Platydock is called within the context of a
virtual environment, but it needs to generate a Docker image - and
therefore, unless the host virtual environment, it needs
--break-system-packages to write to /usr.
2024-05-25 10:30:52 +02:00
Fabio Manganiello 5e52741986
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 08:19:19 +00:00
Fabio Manganiello 7d8a00696c
Adapted Platydock to the new Dockerfile format.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-25 10:17:45 +02:00
Fabio Manganiello 254604e404
py3-vlc has not been merged upstream in Alpine Linux yet. 2024-05-25 10:17:19 +02:00
Fabio Manganiello 8f0002ae40
Moved /Dockerfile to /Dockerfile.default.
It can mess up the Alpine Dockerfile if platydock is run from the source
directory.
2024-05-25 10:16:29 +02:00
Fabio Manganiello 8e05a7f4c9
Make Dockerfiles work both within and outside a Platypush source dir.
If the Platypush setup.py is found in the current directory, then use
that directory as the base for the new image.

Otherwise, clone the repo on the fly and build the image from there.
2024-05-25 00:42:30 +02:00
Fabio Manganiello 0fd2992894
Added platypush.events alias for platypush.message.event package. 2024-05-24 23:16:15 +02:00
Fabio Manganiello efd97f7186
Added a docker-compose.yml. 2024-05-24 23:15:37 +02:00
Fabio Manganiello 3ccdd4d179
Updated pip ... --break-system-packages configuration.
All the latest versions of Alpine, Debian, Ubuntu and Fedora now require
`--break-system-packages` when installing packages via `pip` outside of
a virtual environment, even if it's within a container.
2024-05-24 22:59:42 +02:00
Fabio Manganiello d20cd4b058
Added a nice ASCII-art logo at application startup. 2024-05-24 22:57:50 +02:00
Fabio Manganiello c49b4ca273
platypush.run should also support procedures in the format procedure.<name>.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-24 20:20:25 +02:00
Fabio Manganiello 5c2204f99d
Allow for custom procedure names on the @procedure decorator.
```
@procedure("foo")
def bar():
    ...
```

Will now be published as `procedure.foo` instead of
`procedure.<module>.bar`.
2024-05-24 20:07:24 +02:00
Fabio Manganiello cbc58c7330
Fix: /var/lib/platypush is still empty at the time of package creation.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-23 03:37:46 +02:00
Fabio Manganiello 7ca2159acb
Fix: missing newline escape
Some checks failed
continuous-integration/drone/push Build is failing
2024-05-23 03:34:00 +02:00
Fabio Manganiello 2dd5b6c122
systemd-rpm-macros is a build requirement for the Fedora build.
Some checks failed
continuous-integration/drone/push Build is failing
2024-05-23 03:28:56 +02:00
Fabio Manganiello a51d8978e7
[#319] Added /etc/platypush and /var/lib/platypush to rpm packages.
Some checks failed
continuous-integration/drone/push Build is failing
2024-05-23 03:24:24 +02:00
Fabio Manganiello a5adac9314
[#319] Added /etc and /var/lib dirs to Debian package. 2024-05-23 02:46:38 +02:00
Fabio Manganiello a211e2e2e4
Changed default permissions for /var/lib/platypush from 0755 to 0750. 2024-05-23 01:15:26 +02:00
Fabio Manganiello 7fa0dbda7b
Split Drone CI steps into separate shell scripts.
All checks were successful
continuous-integration/drone/push Build is passing
A fully self-contained 1.5k LoC Drone file isn't very maintainable, and
it makes it hard to reuse parts that are shared across multiple steps
(like SSH and git configuration).
2024-05-23 00:17:55 +02:00
snyk-bot 46da373637
fix: upgrade sass from 1.75.0 to 1.76.0
Snyk has created this PR to upgrade sass from 1.75.0 to 1.76.0.

See this package in npm:
sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-22 12:34:49 +00:00
Fabio Manganiello 4038ef3bc1
[#319] Added platypush/config/systemd directory.
All checks were successful
continuous-integration/drone/push Build is passing
It contains both `platypush.service` and the `sysusers.d` and
`tmpfiles.d` configurations used by the package managers.
2024-05-20 22:19:30 +02:00
Fabio Manganiello 1cad0394ab
systemd requirements tweak.
All checks were successful
continuous-integration/drone/push Build is passing
`Requires=redis.service` should be commented unless the service is
started as a privileged user.

Also added some comments on how the systemd service usually works.
2024-05-20 21:51:08 +02:00
Fabio Manganiello 02a3385638
Tweaked Platypush systemd service.
All checks were successful
continuous-integration/drone/push Build is passing
- A more informative Description
- `s/WantedBy=default.target/WantedBy=multi-user.target/`
- `redis.service` is a strong requirement
2024-05-20 13:02:36 +02:00
Fabio Manganiello c899627eca
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-20 00:03:25 +00:00
Fabio Manganiello d0f781919d
[#345] Rewritten sun plugin.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #345
2024-05-20 02:01:40 +02:00
Fabio Manganiello 86b4b14112
Added the current running application as a static object.
All checks were successful
continuous-integration/drone/push Build is passing
```python
from platypush import app
```
2024-05-20 01:54:25 +02:00
Fabio Manganiello 32b8296244
[#400] Dynamic logic to infer procedures/hooks arguments.
This allows procedures and event hooks to have more flexible signatures.
Along the lines of:

```python
@when(SomeEvent)
def hook(event):
  ...

@when(SomeOtherEvent)
def hook2():
  ...
```

Instead of supporting only the full context spec:

```python
@when(SomeEvent)
def hook(event, **ctx):
  ...
```

Closes: #400
2024-05-19 02:17:42 +02:00
Fabio Manganiello 2ab1743bec
[Docs UI] Fix filter bar to the top while scrolling. 2024-05-19 02:17:42 +02:00
Fabio Manganiello 70ffe0ec04
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-17 00:23:06 +00:00
Fabio Manganiello 3d5c60e4f4
[UI docs] Added filter bar for integrations and events.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-17 02:21:57 +02:00
Fabio Manganiello f06233801b
[#394] Dynamically generate setup extras.
Also, convert all code that relied on `manifest.yaml` to use
`manifest.json` instead.

Closes: #394
2024-05-17 02:21:57 +02:00
Fabio Manganiello 59c693d6a0
[#394] All manifest.yaml converted to manifest.json.
YAML isn't part of the Python standard library, while JSON is.

If we want `setup.py` to dynamically parse the available integration
manifest files in order to populate the extra dependencies, then it's
better to rely on a JSON format for manifest files - the parser is part
of the standard library and it doesn't require the user to install
`pyyaml` before `platypush`.
2024-05-17 02:21:57 +02:00
Fabio Manganiello 79a71d00b4
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-16 00:44:03 +00:00
Fabio Manganiello c77cf2c98b
[#372] Removed Google Fit plugin.
All checks were successful
continuous-integration/drone/push Build is passing
The Fit API has (unfortunately) been deprecated by Google with no
alternatives - the new Health Connect API is only available on Android
devices.

Other Google APIs don't seem to be affected by the refresh token issue
either, so this should hopefully close that issue too.

Closes: #372
2024-05-16 02:42:54 +02:00
Fabio Manganiello f514f7ce1e
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-15 07:57:10 +00:00
Fabio Manganiello 98a98ea1dc
[#398] Removed custom Response objects from Tensorflow and response docs generation logic.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #398
2024-05-15 09:55:58 +02:00
Fabio Manganiello 77c91aa5e3
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-15 06:35:17 +00:00
Fabio Manganiello 0e11bbeb05
Fixed schema reference.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-15 08:33:49 +02:00
Fabio Manganiello 20f3eaf375
[#398] Refactored esp plugin.
Some checks reported errors
continuous-integration/drone/push Build was killed
- Converted `Response` objects into `Schema`s.

- Removed the last references to the deprecated `Mapping` object.

- Fixed all errors and warnings in the plugin.
2024-05-15 01:29:45 +02:00
Fabio Manganiello 55e230c361
Removed wiimote events associated to removed wiimote plugin. 2024-05-15 01:29:45 +02:00
snyk-bot 092f5b607c
fix: upgrade vue from 3.4.23 to 3.4.24
Snyk has created this PR to upgrade vue from 3.4.23 to 3.4.24.

See this package in npm:
https://www.npmjs.com/package/vue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-14 17:33:05 +00:00
Fabio Manganiello ad4d929c28
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-13 00:23:15 +00:00
Fabio Manganiello 7ae99b4325
[#398] cups plugin refactor.
All checks were successful
continuous-integration/drone/push Build is passing
1. Renamed plugin: `printer.cups` ➡️  `cups`.
2. Replaced `Response` objects with schemas.
2024-05-13 02:22:04 +02:00
Fabio Manganiello 2efffb8ebe
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-12 23:26:45 +00:00
Fabio Manganiello 15b1c1f3c0
[#398] Replaced GoogleDriveFile response with GoogleDriveFileSchema.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-13 01:25:33 +02:00
Fabio Manganiello 6003b205c8
[#398] Removed TranslateResponse. 2024-05-13 01:25:33 +02:00
Fabio Manganiello 825f20ab77
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 23:48:43 +00:00
Fabio Manganiello 7d87c5e92a
Merge pull request #424 from blacklight/snyk-upgrade-5e98f9077cfce52b1250c6e6a38f95a0
All checks were successful
continuous-integration/drone/push Build is passing
[Snyk] Upgrade core-js from 3.36.1 to 3.37.0
2024-05-10 01:46:32 +02:00
Fabio Manganiello 3b3f157086
Merge branch 'master' into snyk-upgrade-5e98f9077cfce52b1250c6e6a38f95a0 2024-05-10 01:46:24 +02:00
Fabio Manganiello ad20345505
Merge pull request #423 from blacklight/snyk-upgrade-d36bc5586dd237b84d10196576744320
[Snyk] Upgrade cronstrue from 2.48.0 to 2.49.0
2024-05-10 01:45:09 +02:00
Fabio Manganiello fc4d006064
Merge pull request #422 from blacklight/snyk-upgrade-782bd84f2e24c5ffc88e43f1d25d5de4
[Snyk] Upgrade axios from 1.6.7 to 1.6.8
2024-05-10 01:44:51 +02:00
Fabio Manganiello e10fb4e549
Merge pull request #421 from blacklight/snyk-upgrade-7087de73af11ecfaae1f5f0a8dc827f2
[Snyk] Upgrade vue-router from 4.3.0 to 4.3.2
2024-05-10 01:44:34 +02:00
Fabio Manganiello 404737dc24
Merge branch 'master' into snyk-upgrade-7087de73af11ecfaae1f5f0a8dc827f2 2024-05-10 01:44:19 +02:00
Fabio Manganiello 2896bd64b6
Merge pull request #420 from blacklight/snyk-upgrade-9cd3716e8d2fdaf3c323b2566785c607
[Snyk] Upgrade vue-skycons from 4.2.0 to 4.3.4
2024-05-10 01:43:16 +02:00
Fabio Manganiello 7e8f8a35fc
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 23:38:23 +00:00
Fabio Manganiello b662e98447
[#398] Removed ssh response objects.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-10 01:37:17 +02:00
Fabio Manganiello f978d708cb
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 23:02:32 +00:00
Fabio Manganiello 6f8c2085f2
[#398] Replaced qrcode response objects with schemas.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-10 01:01:22 +02:00
snyk-bot 6f0451b733
fix: upgrade core-js from 3.36.1 to 3.37.0
Snyk has created this PR to upgrade core-js from 3.36.1 to 3.37.0.

See this package in npm:
https://www.npmjs.com/package/core-js

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-09 17:00:23 +00:00
snyk-bot c80af03e8d
fix: upgrade cronstrue from 2.48.0 to 2.49.0
Snyk has created this PR to upgrade cronstrue from 2.48.0 to 2.49.0.

See this package in npm:
https://www.npmjs.com/package/cronstrue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-09 17:00:18 +00:00
snyk-bot 186e85cc86
fix: upgrade axios from 1.6.7 to 1.6.8
Snyk has created this PR to upgrade axios from 1.6.7 to 1.6.8.

See this package in npm:
https://www.npmjs.com/package/axios

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-09 17:00:14 +00:00
snyk-bot 83ca9fd8e5
fix: upgrade vue-router from 4.3.0 to 4.3.2
Snyk has created this PR to upgrade vue-router from 4.3.0 to 4.3.2.

See this package in npm:
https://www.npmjs.com/package/vue-router

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-09 17:00:10 +00:00
snyk-bot 8437f05d6a
fix: upgrade vue-skycons from 4.2.0 to 4.3.4
Snyk has created this PR to upgrade vue-skycons from 4.2.0 to 4.3.4.

See this package in npm:
https://www.npmjs.com/package/vue-skycons

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-09 17:00:06 +00:00
Fabio Manganiello 8d04eadd77
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 12:17:46 +00:00
Fabio Manganiello e74137d4d1
Merge pull request #419 from blacklight/snyk-upgrade-83595b90e84b75cb5b628ea340bc6c3c
All checks were successful
continuous-integration/drone/push Build is passing
[Snyk] Upgrade core-js from 3.36.0 to 3.36.1
2024-05-09 14:15:26 +02:00
Fabio Manganiello 6b12d5ca0e
Merge pull request #418 from blacklight/snyk-upgrade-f5b9569657478ec13c79bc3064807f15
[Snyk] Upgrade @fortawesome/fontawesome-free from 6.5.1 to 6.5.2
2024-05-09 14:15:10 +02:00
Fabio Manganiello e683912228
Merge pull request #417 from blacklight/snyk-upgrade-503e414934e3e9df4999abbd15eed244
[Snyk] Upgrade vue-router from 4.2.5 to 4.3.0
2024-05-09 14:14:52 +02:00
Fabio Manganiello 912dddd3da
Merge branch 'master' into snyk-upgrade-503e414934e3e9df4999abbd15eed244 2024-05-09 14:14:07 +02:00
Fabio Manganiello afbb61565b
Merge pull request #416 from blacklight/snyk-upgrade-eb696c7a079843109d9453f80144a956
[Snyk] Upgrade sass from 1.71.0 to 1.75.0
2024-05-09 14:12:35 +02:00
Fabio Manganiello df8299ab61
Merge pull request #415 from blacklight/snyk-upgrade-9b35134e9eafc25285fde220c6d0dc11
[Snyk] Upgrade vue from 3.4.19 to 3.4.23
2024-05-09 14:12:17 +02:00
Fabio Manganiello 741f1aef84
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 12:08:36 +00:00
Fabio Manganiello 3df76a4a9c
[#398] Replaced pihole response objects with schemas.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 14:06:54 +02:00
Fabio Manganiello 929ac09cae
[#398] Removed unused stt response module.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 11:01:42 +02:00
Fabio Manganiello 3277c56b43
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-08 23:48:25 +00:00
Fabio Manganiello c906aab64d
[camera.android.ipcam UI] Adapted to the new plugin API.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 01:46:36 +02:00
Fabio Manganiello 2021e25752
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-08 23:42:25 +00:00
Fabio Manganiello 13bde4adba
[#398] Replaced camera response objects with schemas.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-09 01:41:15 +02:00
Fabio Manganiello 579faf63bc
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-08 20:00:37 +00:00
Fabio Manganiello 7a849379f9
[#399] Added @when decorator as an alias for @hook.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #399
2024-05-08 21:58:58 +02:00
snyk-bot 4a100b0dc0
fix: upgrade core-js from 3.36.0 to 3.36.1
Snyk has created this PR to upgrade core-js from 3.36.0 to 3.36.1.

See this package in npm:
https://www.npmjs.com/package/core-js

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-07 18:19:30 +00:00
snyk-bot 5a1bccac4d
fix: upgrade @fortawesome/fontawesome-free from 6.5.1 to 6.5.2
Snyk has created this PR to upgrade @fortawesome/fontawesome-free from 6.5.1 to 6.5.2.

See this package in npm:
https://www.npmjs.com/package/@fortawesome/fontawesome-free

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-07 18:19:26 +00:00
snyk-bot 499b3cd9c9
fix: upgrade vue-router from 4.2.5 to 4.3.0
Snyk has created this PR to upgrade vue-router from 4.2.5 to 4.3.0.

See this package in npm:
https://www.npmjs.com/package/vue-router

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-07 18:19:22 +00:00
snyk-bot 8be6d80b45
fix: upgrade sass from 1.71.0 to 1.75.0
Snyk has created this PR to upgrade sass from 1.71.0 to 1.75.0.

See this package in npm:
https://www.npmjs.com/package/sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-07 18:19:19 +00:00
snyk-bot fc621a27f3
fix: upgrade vue from 3.4.19 to 3.4.23
Snyk has created this PR to upgrade vue from 3.4.19 to 3.4.23.

See this package in npm:
https://www.npmjs.com/package/vue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-07 18:19:15 +00:00
Fabio Manganiello 85e44542e2
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-07 10:49:01 +00:00
Fabio Manganiello c094fac7dc
Merge pull request #407 from blacklight/snyk-upgrade-1d870abd0ad2c511fe65000600f02a14
All checks were successful
continuous-integration/drone/push Build is passing
[Snyk] Upgrade cronstrue from 2.47.0 to 2.48.0
2024-05-07 12:42:38 +02:00
Fabio Manganiello 9dc0fbe6e7
Merge branch 'master' into snyk-upgrade-1d870abd0ad2c511fe65000600f02a14 2024-05-07 12:42:30 +02:00
Fabio Manganiello d6b1337c5a
Merge pull request #413 from blacklight/dependabot/npm_and_yarn/platypush/backend/http/webapp/express-4.19.2
Bump express from 4.18.2 to 4.19.2 in /platypush/backend/http/webapp
2024-05-07 12:40:57 +02:00
Fabio Manganiello 0adde5a107
Merge pull request #414 from blacklight/dependabot/npm_and_yarn/platypush/backend/http/webapp/ejs-3.1.10
Bump ejs from 3.1.9 to 3.1.10 in /platypush/backend/http/webapp
2024-05-07 12:40:41 +02:00
Fabio Manganiello 89ced918f1
Merge pull request #412 from blacklight/dependabot/npm_and_yarn/platypush/backend/http/webapp/webpack-dev-middleware-5.3.4
Bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /platypush/backend/http/webapp
2024-05-07 12:40:28 +02:00
Fabio Manganiello bf52f44f92
Merge pull request #411 from blacklight/dependabot/npm_and_yarn/platypush/backend/http/webapp/follow-redirects-1.15.6
Bump follow-redirects from 1.15.4 to 1.15.6 in /platypush/backend/http/webapp
2024-05-07 12:40:08 +02:00
Fabio Manganiello e285009da3
Merge pull request #409 from blacklight/snyk-upgrade-f2aa58c6cb66ee05c32f925b535a8b1f
[Snyk] Upgrade core-js from 3.35.1 to 3.36.0
2024-05-07 12:39:56 +02:00
Fabio Manganiello 3edc8d1077
Merge pull request #408 from blacklight/snyk-upgrade-29d2bb6c813d352072249a6db7e3a805
[Snyk] Upgrade vue from 3.4.18 to 3.4.19
2024-05-07 12:39:36 +02:00
Fabio Manganiello cbaca5f303
Merge pull request #406 from blacklight/snyk-upgrade-bf6b4c595d14f755033e14807ed62fa7
[Snyk] Upgrade @fortawesome/fontawesome-free from 6.4.2 to 6.5.1
2024-05-07 12:39:20 +02:00
Fabio Manganiello df79bb3ea6
Merge pull request #410 from blacklight/snyk-upgrade-73632136d273593f5bc9c7ffc6fd9c71
[Snyk] Upgrade sass from 1.70.0 to 1.71.0
2024-05-07 12:39:04 +02:00
Fabio Manganiello 228031c4ad
[#331] Automatically initialize __init__.py in script dirs.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #331
2024-05-07 02:59:13 +02:00
Fabio Manganiello fdeba9e53c
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-06 00:28:09 +00:00
Fabio Manganiello 3c88593e9a
[#293] Merged midi plugin and backend.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #293
2024-05-06 02:26:27 +02:00
Fabio Manganiello 6a8c83f99b
🐛 Don't add the new password salt/iterations columns if already present.
All checks were successful
continuous-integration/drone/push Build is passing
And, similarly, don't remove them if they aren't on the user table.
2024-05-05 21:58:51 +02:00
Fabio Manganiello 901338e228
[#397] Replaced bcrypt dependency with native hashlib logic.
Some checks failed
continuous-integration/drone/push Build is failing
Closes: #397
2024-05-05 21:38:27 +02:00
dependabot[bot] 9651354fbf
Bump ejs from 3.1.9 to 3.1.10 in /platypush/backend/http/webapp
Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-02 10:39:57 +00:00
Fabio Manganiello a5826892dd
[CI/CD] Added python-setuptools to build dependencies.
All checks were successful
continuous-integration/drone/push Build is passing
It's apparently been extracted out of the core Python library on the
version 3.12 of the interpreter.
2024-05-02 03:31:41 +02:00
Fabio Manganiello 373d98fc6a
[Automatic] Updated UI files
Some checks failed
continuous-integration/drone/push Build is failing
2024-05-02 01:11:36 +00:00
Fabio Manganiello 61e466d8e2
[UI] Added tts.picovoice component and assistant.picovoice icon.
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-02 03:07:47 +02:00
Fabio Manganiello 4ac73837f6
[Automatic] Updated components cache
Some checks failed
continuous-integration/drone/push Build is failing
2024-05-02 00:51:58 +00:00
Fabio Manganiello 72bc697122 [assistant.picovoice] Extended documentation. 2024-05-02 00:51:09 +00:00
Fabio Manganiello b2c07a31f2 Fixed tests 2024-05-02 00:51:09 +00:00
Fabio Manganiello d813356d9c [music.mopidy] Handle the case where add returns a list. 2024-05-02 00:51:09 +00:00
Fabio Manganiello 1192782729 [tts.picovoice] Convert digits before replacing other substrings. 2024-05-02 00:51:09 +00:00
Fabio Manganiello 4734909912 🐛 The EventMatchResult object shouldn't be initialized with args from the event.
If there's a good use-case for overriding `Event._matches_condition`
with a logic that also parses the event arguments, then those arguments
should be accessed directly from the event object, not from the match
result.

Initializing `EventMatchResult` with the arguments from the event means
that, if `EventMatchResult.parsed_args` are populated with custom
extracted arguments, then the upstream event arguments will also be
modified.

If the event is matched against multiple conditions, this will result in
the extracted tokens getting modified by each `matches_condition`
iteration.
2024-05-02 00:51:09 +00:00
Fabio Manganiello 237fc58928 [tts.picovoice] A more robust logic for replacing unsupported characteres on the input. 2024-05-02 00:51:09 +00:00
Fabio Manganiello d8e24207c5 Added openai plugin. 2024-05-02 00:51:09 +00:00
Fabio Manganiello bd4b1d3e0f [assistant.picovoice] Sync between the speech and intent engines. 2024-05-02 00:51:09 +00:00
Fabio Manganiello a373091c64 Prevent duplicate hook runs.
Instead of being a list, the hooks in the hook processor should be
backed by by-name and by-value maps.

Don't insert a hook if its exact backing method has already been
inserted. This is actually very common when hooks are defined as Python
snippets imported in other scripts too.
2024-05-02 00:51:09 +00:00
Fabio Manganiello 632d98703b New architecture for the assistant speech detection logic.
The assistant object now runs in its own thread and leverages an
external `SpeechProcessor` that uses two threads to scan for both
intents and speech in parallel on audio frames.
2024-05-02 00:51:09 +00:00
Fabio Manganiello 6f8816d23d Prevent a potential recursion error in wait_for_either.
We shouldn't overwrite `event._set` and `event._clear` if those values
have already been set.

Those attributes hold the original references to `Event.set` and
`Event.clear` respectively, and the `OrEvent` logic overwrites them with
a callback-based logic.

This shouldn't happen if those attributes are already present.
2024-05-02 00:51:09 +00:00
Fabio Manganiello af1392b5b9 [assistant] Added ResponseEndEvent and IntentMatchedEvent 2024-05-02 00:51:09 +00:00
Fabio Manganiello bb9b6cd319 [assistant.picovoice] Various improvements.
- Added `intent_model_path` parameter.

- Always apply `expanduser` to configuration paths.

- Better logic to infer the fallback model path.

- The Picovoice Leonardo object should always be removed after
  `assistant.picovoice.transcribe` is called.
2024-05-02 00:51:09 +00:00
Fabio Manganiello f0a780b759 Added assistant.picovoice.transcribe and assistant.picovoice.say. 2024-05-02 00:51:09 +00:00
Fabio Manganiello f04f7ce9d7 [tts.picovoice] Better text pre-processing logic. 2024-05-02 00:51:09 +00:00
Fabio Manganiello 37d70d67ac [assistant.picovoice] Implemented assistant.picovoice.send_text_query. 2024-05-02 00:51:09 +00:00
Fabio Manganiello fa1d5eb672 [tts.picovoice] Added text pre-processing workaround.
This workaround is required until
https://github.com/Picovoice/orca/issues/10 is fixed.
2024-05-02 00:51:09 +00:00
Fabio Manganiello a345b12244 [assistant.picovoice] Leverage upstream _on_mute_changed.
The plugin should leverage `AssistantPlugin._on_mute_changed` to handle
the boilerplate state managent on mute/unmute actions instead of
re-implementing the same logic.
2024-05-02 00:51:09 +00:00
Fabio Manganiello 2c197c275e [assistant.picovoice] Implemented mic mute/unmute handling. 2024-05-02 00:51:09 +00:00
Fabio Manganiello 9de49c71a1 [assistant.picovoice] Conversation flow improvements.
- The `Responding` state should be modelled as an extra event/binary
  flag, not as an assistant state. The assistant may be listening for
  hotwords even while the `tts` plugin is responding, and we don't want
  the two states to interfere with each either - neither to build a more
  complex state machine that also needs to take concurrent states into
  account.

- Stop any responses being rendered upon the `tts` plugin when a new
  hotword audio is detected. If e.g. I say "Ok Google", I should always
  be able to trigger the assistant and stop any concurrent audio
  process.

- `SpeechRecognizedEvent` should be emitted even if `cheetah`'s latest
  audio frame results weren't marked as final, and the speech detection
  window timed out. Cheetah's `is_final` detection seems to be quite
  buggy sometimes, and it may not properly detect the end of utterances,
  especially with non-native accents. The workaround is to flush out
  whatever text is available (if at least some speech was detected) into
  a `SpeechRecognizedEvent` upon timeout.
2024-05-02 00:51:09 +00:00
Fabio Manganiello a6f7b6e790 Added more default imports under the platypush module root.
These objects can now also be imported in scripts through
`from platypush import <name>`:

- `Variable`
- `cron`
- `hook`
- `procedure`
2024-05-02 00:51:09 +00:00
Fabio Manganiello aa333db05c [assistant.picovoice] More features.
- Added wiring between `assistant.picovoice` and `tts.picovoice`.

- Added `RESPONDING` status to the assistant.

- Added ability to override the default speech model upon
  `start_conversation`.

- Better handling of conversation timeouts.

- Cache Cheetah objects in a `model -> object` map - at least the
  default model should be pre-loaded, since model loading at runtime
  seems to take a while, and that could impact the ability to detect the
  speech in the first seconds after a hotword is detected.
2024-05-02 00:51:09 +00:00
Fabio Manganiello af875c996e Added tts.picovoice plugin. 2024-05-02 00:51:09 +00:00
Fabio Manganiello a4c911a5d7 Added ffmpeg requirement for assistant.picovoice. 2024-05-02 00:51:09 +00:00
Fabio Manganiello 8193c5702c s/partial_transcript/transcript/g 2024-05-02 00:51:09 +00:00
Fabio Manganiello 8378bee7c6 Refactored AssistantEvent.
`AssistantEvent.assistant` is now modelled as an opaque object that
behaves the following way:

- The underlying plugin name is saved under `event.args['_assistant']`.

- `event.assistant` is a property that returns the assistant instance
  via `get_plugin`.

- `event.assistant` is reported as a string (plugin qualified name) upon
  event dump.

This allows event hooks to easily use `event.assistant` to interact with
the underlying assistant and easily modify the conversation flow, while
event hook conditions can still be easily modelled as equality
operations between strings.
2024-05-02 00:51:09 +00:00
Fabio Manganiello a670f01647 [assistant.picovoice] Better partial transcript + flush handling logic. 2024-05-02 00:51:09 +00:00
Fabio Manganiello 921025be0c picovoice -> assistant.picovoice 2024-05-02 00:51:09 +00:00
Fabio Manganiello bb38f2439c Better integration with the native base API of the assistant plugin. 2024-05-02 00:51:09 +00:00
Fabio Manganiello f7517eb321 [WIP] Added speech detection logic over Cheetah. 2024-05-02 00:51:09 +00:00
Fabio Manganiello a9498ea191 [WIP] Added initial hotword integration. 2024-05-02 00:51:09 +00:00
Fabio Manganiello 44f9c03bf3 [#304] Removed old Picovoice integrations 2024-05-02 00:51:09 +00:00
Fabio Manganiello 98c99c7888
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-17 02:09:18 +00:00
Fabio Manganiello e123463804
[media.chromecast] Refactored implementation.
All checks were successful
continuous-integration/drone/push Build is passing
Explicitly use a `CastBrowser` object initialized at plugin boot instead
of relying on blocking calls to `pychromecast.get_chromecasts`.

1. It enables better event handling via callbacks instead of
   synchronously waiting for scan batches.

2. It optimizes resources - only one Zeroconf and one CastBrowser object
   will be created in the plugin, and destroyed upon stop.

3. No need for separate `get_chromecast`/`_refresh_chromecasts` methods:
   all the scanning is run continuously, so we can just return the
   results from the maps.
2024-04-17 03:56:45 +02:00
Fabio Manganiello f99f6bdab9
[media.chromecast] Resource clean up + new API adaptations.
All checks were successful
continuous-integration/drone/push Build is passing
- `pychromecast.get_chromecasts` returns both a list of devices and a
  browser object. Since the Chromecast plugin is the most likely culprit
  of the excessive number of open MDNS sockets, it seems that we may
  need to explicitly stop discovery on the browser and close the
  ZeroConf object after the discovery is done.

- I was still using an ancient version of pychromecast on my RPi4, and I
  didn't notice that more recent versions implemented several breaking
  changes. Adapted the code to cope with those changes.
2024-04-17 02:49:31 +02:00
Fabio Manganiello 4972c8bdcf
Unregister a Zeroconf instance if it already exists before publishing a backend service.
All checks were successful
continuous-integration/drone/push Build is passing
`mdns` connection are another culprit for the increasing number of open
files in the process.
2024-04-16 00:12:55 +02:00
Fabio Manganiello 33d4c8342d
[#389] Possible fix for "Too many open files" media issue.
All checks were successful
continuous-integration/drone/push Build is passing
It seems that the process keeps a lot of open connections to Chromecast
devices during playback.

The most likely culprit is the `_refresh_chromecasts` logic.

We should start a `cast` object and register a status listener only if a
Chromecast with the same identifier isn't already registered in the
plugin.
2024-04-15 23:01:10 +02:00
Fabio Manganiello 027bcea612
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-08 21:05:46 +00:00
Fabio Manganiello b4d0716bc5
Added layer of compatibility with both paho.mqtt >= 2.0.0 and < 2.0.0.
See 28aa2e6b26/ChangeLog.txt (L6)
2024-04-08 23:01:54 +02:00
revil-O 584f226b62 mqtt CallbackAPIVersion fix for paho.mqtt >= 2.0.0
fix to work with paho.mqtt >= 2.0.0
2024-04-08 16:05:27 +02:00
Fabio Manganiello dba0acb82e
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-05 18:57:53 +00:00
Fabio Manganiello a026a101cd
Removed stt.deepspeech integration.
All checks were successful
continuous-integration/drone/push Build is passing
The project hasn't seen a commit in three years and it's probably been
abandoned by Mozilla.

New and better maintained speech-to-text integrations will be
investigated.
2024-04-05 20:56:45 +02:00
Fabio Manganiello b00623f655
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-05 02:00:03 +00:00
Fabio Manganiello 03765ad652
[UI] Better style for music widget.
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-05 03:58:12 +02:00
Fabio Manganiello 96f3420c8e
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-05 01:47:09 +00:00
Fabio Manganiello c31180dae8
[music.mopidy] Fixed parsing of new_state upon playback_state_changed.
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-05 03:46:01 +02:00
Fabio Manganiello b1498bfc28
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-05 01:41:38 +00:00
Fabio Manganiello 083c9e250e
[music.mopidy] Better handling of client events.
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-05 03:40:27 +02:00
Fabio Manganiello 88ffc3b795
[Automatic] Updated components cache
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-04-05 00:56:48 +00:00
Fabio Manganiello 5f6fd4aa54
Added --db CLI option and support for configuration over environment.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #280
2024-04-05 02:54:45 +02:00
Fabio Manganiello c8361aa475
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-04 00:53:18 +00:00
Fabio Manganiello 496a3f4911 Updated docs 2024-04-04 00:52:30 +00:00
Fabio Manganiello d2ec93b798 [#297] Removed music.spotify backend.
1. I no longer I use a Spotify account (I switched to Tidal after
   Spotify deprecated libspotify), and I wouldn't like to create one
   just to test this integration.

2. After a couple of years, the libspotify open fork (Librespot) seems
   to be still in an unstable stage and it's already been discontinued
   once - I would avoid rebuilding the integration against a dependency
   that may change a lot in the near future.
2024-04-04 00:52:30 +00:00
Fabio Manganiello 73cc47b964
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-03 23:57:10 +00:00
Fabio Manganiello 787b6a6af6
[UI] A more consistent light style for the music widget.
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-04 01:54:52 +02:00
Fabio Manganiello 6f24504cc4
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-03 23:11:49 +00:00
Fabio Manganiello 5d9a201a5b
[#297] Mopidy/MPD refactor+migration, UI side.
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-04 01:07:05 +02:00
Fabio Manganiello e2246c8d30
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-04-03 23:02:09 +00:00
Fabio Manganiello 58518a4d63 Better timeout management on mopidy status refresh. 2024-04-03 23:01:22 +00:00
Fabio Manganiello 5346833152 [WIP] API adaptations for music.mpd 2024-04-03 23:01:22 +00:00
Fabio Manganiello 89d618b35f [WIP] music.mopidy refactor, initial backend rewrite. 2024-04-03 23:01:22 +00:00
Fabio Manganiello d2e5e5230b [music.mpd] Removed deprecated actions.
- `setvol` ➡️  `set_volume`
- `seekcur` ➡️  `seek`
- `playlistinfo` ➡️  `get_tracks`
- `listplaylists` ➡️  `get_playlists`
- `listplaylist` ➡️  `get_playlist`
- `listplaylistinfo` ➡️  `get_playlist`
- `playlistadd` ➡️  `add_to_playlist`
- `playlistdelete` ➡️  `remove_from_playlist`
- `playlistmove` ➡️  `playlist_move`
- `playlistclear` ➡️  `playlist_clear`
- `rename` ➡️  `rename_playlist`
- `rm` ➡️  `delete_playlist`

stuff
2024-04-03 23:01:22 +00:00
Fabio Manganiello a3b6d411e4 [music.mpd] Adjust default poll_interval: 5 -> 20 seconds. 2024-04-03 23:01:22 +00:00
dependabot[bot] 749eda16b4
Bump express from 4.18.2 to 4.19.2 in /platypush/backend/http/webapp
Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-29 06:46:45 +00:00
dependabot[bot] 2d72ce9645
Bump webpack-dev-middleware in /platypush/backend/http/webapp
Bumps [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/webpack/webpack-dev-middleware/releases)
- [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v5.3.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: webpack-dev-middleware
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-23 19:14:44 +00:00
dependabot[bot] 8ed358fcc8
Bump follow-redirects in /platypush/backend/http/webapp
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-16 23:30:25 +00:00
snyk-bot a30042e1eb
fix: upgrade sass from 1.70.0 to 1.71.0
Snyk has created this PR to upgrade sass from 1.70.0 to 1.71.0.

See this package in npm:
https://www.npmjs.com/package/sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-08 18:50:38 +00:00
snyk-bot b9d637187c
fix: upgrade core-js from 3.35.1 to 3.36.0
Snyk has created this PR to upgrade core-js from 3.35.1 to 3.36.0.

See this package in npm:
https://www.npmjs.com/package/core-js

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-06 15:26:22 +00:00
snyk-bot 6a55527694
fix: upgrade vue from 3.4.18 to 3.4.19
Snyk has created this PR to upgrade vue from 3.4.18 to 3.4.19.

See this package in npm:
https://www.npmjs.com/package/vue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-06 02:09:43 +00:00
snyk-bot 5488c97f4b
fix: upgrade cronstrue from 2.47.0 to 2.48.0
Snyk has created this PR to upgrade cronstrue from 2.47.0 to 2.48.0.

See this package in npm:
https://www.npmjs.com/package/cronstrue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-06 02:09:40 +00:00
snyk-bot e12054c484
fix: upgrade @fortawesome/fontawesome-free from 6.4.2 to 6.5.1
Snyk has created this PR to upgrade @fortawesome/fontawesome-free from 6.4.2 to 6.5.1.

See this package in npm:
https://www.npmjs.com/package/@fortawesome/fontawesome-free

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-06 02:09:36 +00:00
Fabio Manganiello 288344a348
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-05 10:19:13 +00:00
Fabio Manganiello 8f35fbed16
Merge pull request #404 from BlackLight/snyk-upgrade-66089ad9a01450eef161c7e7fac48843
All checks were successful
continuous-integration/drone/push Build is passing
[Snyk] Upgrade axios from 1.6.4 to 1.6.7
2024-03-05 11:15:26 +01:00
Fabio Manganiello 0e8408a83f
Merge branch 'master' into snyk-upgrade-66089ad9a01450eef161c7e7fac48843 2024-03-05 11:15:09 +01:00
Fabio Manganiello 8c0939c308
Merge pull request #405 from BlackLight/snyk-upgrade-785cc8b707ebb00ef02379485bb64589
[Snyk] Upgrade sass-loader from 10.4.1 to 10.5.2
2024-03-05 11:14:19 +01:00
Fabio Manganiello 8c2abf5d9a
Merge branch 'master' into snyk-upgrade-785cc8b707ebb00ef02379485bb64589 2024-03-05 11:14:08 +01:00
Fabio Manganiello f7d651983a
Merge pull request #403 from BlackLight/snyk-upgrade-eaf91feb3c2e9502206ab6258f4f7a06
[Snyk] Upgrade sass from 1.69.3 to 1.70.0
2024-03-05 11:11:29 +01:00
Fabio Manganiello 57f269486c
Merge pull request #402 from BlackLight/snyk-upgrade-7bb8fbc94f3d6132decf153710b18875
[Snyk] Upgrade core-js from 3.33.0 to 3.35.1
2024-03-05 11:11:13 +01:00
Fabio Manganiello 82c8c79778
Merge pull request #401 from BlackLight/snyk-upgrade-6f8a6cdcfdde123a5d036b41986f9966
[Snyk] Upgrade vue from 3.3.6 to 3.4.18
2024-03-05 11:11:00 +01:00
snyk-bot 9de799f6a1
fix: upgrade sass-loader from 10.4.1 to 10.5.2
Snyk has created this PR to upgrade sass-loader from 10.4.1 to 10.5.2.

See this package in npm:
https://www.npmjs.com/package/sass-loader

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-04 23:22:51 +00:00
snyk-bot b21a27366c
fix: upgrade axios from 1.6.4 to 1.6.7
Snyk has created this PR to upgrade axios from 1.6.4 to 1.6.7.

See this package in npm:
https://www.npmjs.com/package/axios

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-04 23:22:47 +00:00
snyk-bot 50b712a8d3
fix: upgrade sass from 1.69.3 to 1.70.0
Snyk has created this PR to upgrade sass from 1.69.3 to 1.70.0.

See this package in npm:
https://www.npmjs.com/package/sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-04 23:22:44 +00:00
snyk-bot aaa38c0f2d
fix: upgrade core-js from 3.33.0 to 3.35.1
Snyk has created this PR to upgrade core-js from 3.33.0 to 3.35.1.

See this package in npm:
https://www.npmjs.com/package/core-js

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-04 23:22:40 +00:00
snyk-bot 31222b3f05
fix: upgrade vue from 3.3.6 to 3.4.18
Snyk has created this PR to upgrade vue from 3.3.6 to 3.4.18.

See this package in npm:
https://www.npmjs.com/package/vue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-03-04 23:22:36 +00:00
Fabio Manganiello 3ebb59ed26
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-04 00:07:15 +00:00
Fabio Manganiello 5c9c9f0a61
[Nav UI] Better alignment of items on the expanded menu.
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-04 01:05:07 +01:00
Fabio Manganiello 41cbe40362
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-03 22:15:59 +00:00
Fabio Manganiello 0c6d3a5074
Merge pull request #399 from BlackLight/snyk-fix-cbc2d5f1b27baf97088c91fe8a0ed9ad
All checks were successful
continuous-integration/drone/push Build is passing
[Snyk] Security upgrade axios from 1.6.0 to 1.6.4
2024-03-03 23:13:32 +01:00
Fabio Manganiello f78823981b
Merge pull request #396 from BlackLight/snyk-upgrade-f6fc128f6839afbdb22ffdb72a07ffb9
[Snyk] Upgrade vue from 3.3.4 to 3.3.6
2024-03-03 23:11:29 +01:00
Fabio Manganiello 0dea8c3b44
Merge branch 'master' into snyk-fix-cbc2d5f1b27baf97088c91fe8a0ed9ad 2024-03-03 23:10:22 +01:00
Fabio Manganiello c06d97d9b7
Merge branch 'master' into snyk-upgrade-f6fc128f6839afbdb22ffdb72a07ffb9 2024-03-03 23:06:23 +01:00
Fabio Manganiello 0653bcf5b9
Merge pull request #395 from BlackLight/snyk-upgrade-87b37fbfcf86065d749fecde13c6979c
[Snyk] Upgrade vue-router from 4.2.4 to 4.2.5
2024-03-03 23:03:33 +01:00
Fabio Manganiello 085cb1031a
Merge pull request #394 from BlackLight/snyk-upgrade-225081273089712ac56cf6c7af77c223
[Snyk] Upgrade core-js from 3.32.0 to 3.33.0
2024-03-03 23:03:16 +01:00
Fabio Manganiello 27afa90f9d
Merge pull request #393 from BlackLight/snyk-upgrade-8c58c38d04e6adb5e9a1902f135a9d45
[Snyk] Upgrade sass from 1.65.1 to 1.69.3
2024-03-03 23:02:43 +01:00
Fabio Manganiello 938b8761e7
Merge branch 'master' into snyk-upgrade-f6fc128f6839afbdb22ffdb72a07ffb9 2024-03-03 23:02:11 +01:00
Fabio Manganiello 3993a51aed
Merge branch 'master' into snyk-upgrade-87b37fbfcf86065d749fecde13c6979c 2024-03-03 23:00:23 +01:00
Fabio Manganiello 4a6f89582c
Merge branch 'master' into snyk-upgrade-225081273089712ac56cf6c7af77c223 2024-03-03 22:59:38 +01:00
Fabio Manganiello 3019ddfd0e
Merge branch 'master' into snyk-upgrade-8c58c38d04e6adb5e9a1902f135a9d45 2024-03-03 22:58:06 +01:00
Fabio Manganiello 05213d9afc
Updated docs
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-03 22:50:57 +01:00
Fabio Manganiello 91943304e1
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-03 21:38:37 +00:00
Fabio Manganiello 2066db463b
[#295] Merged music.mpd plugin and backend.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #295
2024-03-03 22:37:26 +01:00
Fabio Manganiello e96eae73ec
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-03 14:41:00 +00:00
Fabio Manganiello 6bdc9e77ee
[#349] Refactored/rewritten telegram plugin.
All checks were successful
continuous-integration/drone/push Build is passing
1. `chat.telegram` -> `telegram` plugin.

2. Merged `backend.chat.telegram` logic into `telegram` plugin.

3. Rewritten the architecture of the integration to adapt to the new
   asyncio API introduced in the latest versions of telegram-bot-api.

Closes: #349
2024-03-03 15:39:47 +01:00
Fabio Manganiello 7637890a54
[irc] Plugin rename/refactor.
The `chat.irc` plugin is now `irc`.
2024-03-03 15:39:47 +01:00
Fabio Manganiello 1ba85231d8
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-01 00:10:21 +00:00
Fabio Manganiello 66e19d608a
Fixed flic events module name and path
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-29 23:48:10 +01:00
Fabio Manganiello e462f3becf
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 23:51:02 +00:00
Fabio Manganiello d415d65bff
Removed legacy wiimote plugin
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-29 00:49:56 +01:00
Fabio Manganiello b30dc7ddb5
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 23:28:39 +00:00
Fabio Manganiello c7b0440562
[#357] Migrated backend.button.flic to flic plugin.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #357
2024-02-29 00:27:32 +01:00
Fabio Manganiello 765ac6143e
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 00:57:12 +00:00
Fabio Manganiello d16daa3fdf
Removed backend.sensor.ir.zeroborg.
All checks were successful
continuous-integration/drone/push Build is passing
That code is very old and broken, and it covers a very marginal feature
(events from the IR sensor of a Zeroborg board) that can be easily
covered by any general-purpose IR sensors.
2024-02-28 01:56:06 +01:00
Fabio Manganiello b46d3da5de
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 00:50:56 +00:00
Fabio Manganiello f1e568d6c8
FIX: Fixed refactored plugin name
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 01:49:52 +01:00
Fabio Manganiello ef5c65ff4d
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 00:45:11 +00:00
Fabio Manganiello ac9b82236e
Renamed http.request plugin as http.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 01:44:04 +01:00
Fabio Manganiello d0d80c1edf
Removed old backend.http.request.* files 2024-02-28 01:44:04 +01:00
Fabio Manganiello 3e4b7ac1b5
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-28 00:28:53 +00:00
Fabio Manganiello 553c4090b7
[#309] Remove wiimote integration.
All checks were successful
continuous-integration/drone/push Build is passing
The `cwiid` library and the Python bindings haven't been updated in
years, the `cwiid-git` package on Arch Linux still targets Python 2, and
installing `cwiid` via `pip` breaks recent versions of Python 3.

Closes: #309
2024-02-28 01:25:49 +01:00
Fabio Manganiello 7ccbf9347f
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-27 22:19:30 +00:00
Fabio Manganiello ea4e293338 [#352] Migrated backend.sensor.leap to leap plugin.
Closes: #352
2024-02-27 22:18:41 +00:00
Fabio Manganiello fc45b606ab Removed (currently) incomplete paragraph from README 2024-02-27 21:41:39 +00:00
Fabio Manganiello d77aa0b167 Removed legacy backend.scard.
Closes: #303
2024-02-27 21:39:02 +00:00
Fabio Manganiello 07dfc19bf5 Added nfc.status action. 2024-02-27 21:39:02 +00:00
Fabio Manganiello 99f9737211
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 23:55:43 +00:00
Fabio Manganiello 850cbe4237
Updated docs
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-27 00:53:27 +01:00
Fabio Manganiello dfaa5447ac
[#299] Refactored NFC backend into a runnable plugin. 2024-02-27 00:53:26 +01:00
Fabio Manganiello bbf755eef2
[#299] Refactored NFC backend into a runnable plugin.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-27 00:10:15 +01:00
Fabio Manganiello c7c31fb48d
Log the canonical name of plugins when starting them. 2024-02-27 00:02:30 +01:00
Fabio Manganiello 5ab66e6746
[UI] Render docs link on ExtensionIcon only on docs panel.
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-02-26 23:47:07 +01:00
Fabio Manganiello 8079b08a54
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 20:36:57 +00:00
Fabio Manganiello f8e0b5e17e
[#366] Context variables should be dynamically assigned through locals() instead of exec().
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #366
2024-02-26 21:29:35 +01:00
Fabio Manganiello 6c2e9deda4
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 20:11:46 +00:00
Fabio Manganiello 6de9f741f0
[UI] Use extension icons also for menu entries.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 21:09:36 +01:00
Fabio Manganiello e7c1e2f44e
[UI] Added icons to plugins and backends. 2024-02-26 17:39:19 +01:00
Fabio Manganiello 2d8c34522f
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 00:57:55 +00:00
Fabio Manganiello 5961b08387
[Carousel UI] Removed margin
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 01:55:49 +01:00
Fabio Manganiello d6ea4a1c42
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 00:29:32 +00:00
Fabio Manganiello e58f5d2fa1
[Camera] The wait_for_either barrier should be enabled on streaming by default.
All checks were successful
continuous-integration/drone/push Build is passing
`camera.pi*` plugins are an exception, as they handle the lifecycle of
the camera streaming process through the `picamera*` libraries.

Otherwise, the streaming thread should explicitly wait on either the
plugin stop or streaming stop events and exit accordingly, or the camera
thread may be streaming indefinitely.
2024-02-26 01:28:25 +01:00
Fabio Manganiello 56a04975ae
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-26 00:20:42 +00:00
Fabio Manganiello 9df08de24f
[Carousel UI] Replaced blur filter with brightness for background.
All checks were successful
continuous-integration/drone/push Build is passing
It's much less expensive on the CPU side, and the effect is similar.

Closes: #359
2024-02-26 01:18:51 +01:00
Fabio Manganiello 18f2c26725
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-25 22:12:19 +00:00
Fabio Manganiello 195a4b58b9
[chore] Updated caniuse db
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-25 23:10:15 +01:00
Fabio Manganiello 4ebc29a151
[UI] Added icon for camera.pi.legacy web panel. 2024-02-25 23:10:14 +01:00
Fabio Manganiello b246fbe328
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-25 22:08:34 +00:00
Fabio Manganiello 31528e3c0e
[UI] Added camera.pi.legacy web panel.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-25 23:06:24 +01:00
Fabio Manganiello b6bd86794b
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-25 20:42:51 +00:00
Fabio Manganiello 9445bd4dc4
Added config.yaml example/docs for camera streaming configuration.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-25 21:39:12 +01:00
Fabio Manganiello 1c14450781 FIX: Remove wait_for_either barrier from the streaming thread.
All checks were successful
continuous-integration/drone/push Build is passing
The `_accept_client` logic will be executed anyway at the next
iteration, unless the server socket is closed - in that case, the thread
will fail and exit anyway.

The `wait_for_either` barrier in the streaming thread may instead
prevent other connections from being established after the first one is
closed.
2024-02-25 16:02:52 +01:00
Fabio Manganiello 4c92bdd11c
FIX: Handle stop_streaming exceptions in the main loop of the camera plugin.
All checks were successful
continuous-integration/drone/push Build is passing
Otherwise camera process teardown errors may bubble up and prevent the
plugin from restarting the streaming.
2024-02-24 21:36:08 +01:00
Fabio Manganiello 8999a226b1
[WIP] Updated documentation for camera.pi.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-24 21:16:43 +01:00
Fabio Manganiello e46704010b
[WIP] Rewritten camera.pi.legacy plugin.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-24 14:07:07 +01:00
Fabio Manganiello 9ad9bd20e4
Added stream_on_start argument to camera plugins.
All checks were successful
continuous-integration/drone/push Build is passing
It replaces the functionalities of the deprecated `camera` backends.
2024-02-24 01:31:05 +01:00
Fabio Manganiello 9cf95125a6 [WIP] Added streaming support to camera.pi using new picamera2 API
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-22 22:52:52 +01:00
Fabio Manganiello 659c33837e [WIP] Using new picamera2 module for camera.pi, and moved old picamera integration to camera.pi.legacy
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-19 00:07:29 +00:00
Fabio Manganiello d0f1ee0582
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-16 23:03:08 +00:00
Fabio Manganiello c59446fdb1
Fixed setting of output_file on FfmpegWriter.
All checks were successful
continuous-integration/drone/push Build is passing
Also, fixed parameters passed to camera
writer objects.
2024-02-17 00:01:47 +01:00
Fabio Manganiello a38ef6bc7a Workaround for possible multiple camera parameter error.
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-02-15 00:51:04 +00:00
Fabio Manganiello 191d7a75ea
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-06 22:29:48 +00:00
Fabio Manganiello 8f7aad2af7
google-assistant-sdk is no longer a dependency for the Google Assistant integration
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-06 20:08:57 +01:00
Fabio Manganiello 48756e6287
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-05 01:19:21 +00:00
Fabio Manganiello 2b595623b3
[#348] Converted gps backend into a plugin.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #348
2024-02-05 02:16:02 +01:00
Fabio Manganiello 8351463a11
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-03 21:11:01 +00:00
Fabio Manganiello c8944feca4 [#348] Merge + refactor for the mail backend/plugin (#362)
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #348

Reviewed-on: #362
2024-02-03 22:09:40 +01:00
Fabio Manganiello 5badc935ac
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-03 21:08:07 +00:00
Fabio Manganiello 7d362cae1a
FIX: Redis pub/sub error can also raise a ValueError on close.
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-03 22:06:36 +01:00
Fabio Manganiello 39d5c48088
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-19 20:59:26 +00:00
Fabio Manganiello 746423a113 [#356] Merged adafruit.io plugin and backend. 2024-01-19 20:58:35 +00:00
Fabio Manganiello f21a1dd8e6
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-19 02:15:39 +00:00
Fabio Manganiello eb47f9ded0 [#351] Merged google.pubsub plugin and backend.
Closes: #351
2024-01-19 02:14:49 +00:00
Fabio Manganiello 2e9cb44caf
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-19 00:50:24 +00:00
Fabio Manganiello 1323156838
Fixed google.credentials script order of arguments in the docstring.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-19 01:48:33 +01:00
Fabio Manganiello a5b7e2b52e
[CI/CD] Fixed version format for the platypush-git Arch package.
All checks were successful
continuous-integration/drone/push Build is passing
The format should be `<MAJ>.<MIN>.<PATCH>.r<REVISION>.g<HEAD>`.

The `g` prefix was missing.
2024-01-19 01:06:47 +01:00
Fabio Manganiello aceb9b940a
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-18 23:32:23 +00:00
Fabio Manganiello 6775208b2e Fixed minor docstring typo. 2024-01-18 23:31:27 +00:00
Fabio Manganiello f9bd5b3abc [#350] Merge google.fit backend and plugin.
Closes: #350.
2024-01-18 23:31:27 +00:00
Fabio Manganiello e3c04d9316 Fixed bullet points indentation in Google plugins docstrings. 2024-01-18 23:31:27 +00:00
Fabio Manganiello e022712b7b [Google] Updated authorization flow for Google plugins.
The new authorization flow also requires the user to input a code
returned on the browser's authorization page.

Since the Google authentication libraries seem to use a simple `input()`
to read this code, things are likely to fail quite badly if Platypush is
run in non-interactive mode - e.g. through a systemd service or in a
Docker container.

Thus we need to go with Google's automatic flow only if `DISPLAY` or
`BROWSER` are set (thus the interactive flow can proceed), and throw an
`AssertionError` with the command to execute if no display/browser are
detected.
2024-01-18 23:31:27 +00:00
Fabio Manganiello 31de917631 [Google] Updated documentation of Google plugins.
Expanded explanation of the desktop vs. headless authentication process
and where the credential files are supposed to be copied if the user
opts for a non-automatic authentication flow.
2024-01-18 23:31:27 +00:00
Fabio Manganiello dec2a54740
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-18 23:29:13 +00:00
Fabio Manganiello 998b7be7b8
[media.vlc] Always add --play-and-exit to args.
All checks were successful
continuous-integration/drone/push Build is passing
Without this option VLC seems to hang in the background, and it may
cause PulseAudio failures or memory issues after several videos have
been played - each in its own session.
2024-01-18 21:21:15 +01:00
Fabio Manganiello a47f9f1852
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-18 01:29:46 +00:00
Fabio Manganiello 95c15f3f5f [#347] Merge kafka backend and plugin.
Closes: #347
2024-01-18 01:28:56 +00:00
Fabio Manganiello a596ed80a2
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-17 23:27:34 +00:00
Fabio Manganiello 1c5956c38b
Fixed some docstring warnings.
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-01-18 00:26:22 +01:00
Fabio Manganiello 85db77bb7b
[#298] Merged nextcloud backend and plugin.
Closes: #298
2024-01-18 00:26:22 +01:00
Fabio Manganiello dd5bc7639b
Added disable_monitor flag to RunnablePlugin.
This is useful when users want to use a runnable plugin in a stateless
way. In some cases (for example systems with high latency or limited
quotas for API calls) the user may want to leverage the actions of a
plugin, but without running monitoring/polling logic nor generating
events.
2024-01-18 00:26:22 +01:00
Fabio Manganiello fb91be7628
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-15 23:56:02 +00:00
Fabio Manganiello e9d91471ce
[media.mplayer] Plugin rewrite.
All checks were successful
continuous-integration/drone/push Build is passing
Too many things were falling apart, and many others of MPlayer's "API
smells" had never been addressed.

The plugin has now largely been rewritten, and some workarounds (like
accessory monitoring processes) have been added to deal with the fact
that events like end-of-file aren't published by the player, and some
polling is required.
2024-01-16 00:41:01 +01:00
Fabio Manganiello ca25b3a4e6
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-15 23:39:51 +00:00
Fabio Manganiello 3598253558
Reduced Docker images to a single layer.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-15 21:54:22 +01:00
Fabio Manganiello bf1b8aaf70
Delete pubsub closure to _pubsub_close().
The Redis channel may be closed, and in that case we need to handle the
exception instead of throwing it - which causes the upstream Tornado
worker to fail too.
2024-01-14 21:27:08 +01:00
Fabio Manganiello 6fe1ed44ad
[media] Fixed base interface of media.seek and media.set_position. 2024-01-13 22:39:33 +01:00
Fabio Manganiello cf314f2615
[mpv] Refactored plugin.
I hadn't paid attention to this plugin in a while and the newest mpv API
has diverged so much that it was entirely incompatible with recent mpv
versions.
2024-01-13 22:36:42 +01:00
Fabio Manganiello 641a2fd135
Renamed parameter of volup/voldown for music plugins.
To be consistent with all other media plugins, the parameter name should
be `step`, not `delta`.

A back-compatibility layer has however been introduced for plugins
(namely `music.mpd` and `music.spotify`) that already exposed the old
interface.
2024-01-13 22:35:18 +01:00
Fabio Manganiello f0dcb94862
[pushbullet] Fixed on_error callback on the listener.
The `Listener` class from the `pushbullet.py` library is a mess, and it
has two internal functions to handle errors.
2024-01-13 13:24:47 +01:00
Fabio Manganiello 18bba7e3bf
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-09 23:47:38 +00:00
Fabio Manganiello 9fa5989e21 [#302] Merged pushbullet backend and plugin.
Also, added support for more granular Pushbullet events.

Closes: #302
2024-01-09 23:46:07 +00:00
Fabio Manganiello 4e1943d197
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-08 22:04:48 +00:00
Fabio Manganiello 4505c46071
[Sound] Don't override device index if it's already defined in the info.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-08 23:03:08 +01:00
Fabio Manganiello b097a4c1f4
Remove also the dist directory in the build-ui step before running npm run build
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-08 22:56:05 +01:00
Fabio Manganiello bb2f86f1a5
An empty commit to re-trigger the CI/CD pipelines
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-08 22:38:31 +01:00
Fabio Manganiello 314e1a98ef
Updated dist files
Some checks failed
continuous-integration/drone/push Build is failing
2024-01-08 22:35:57 +01:00
Fabio Manganiello deaedf2462
[Media UI] Don't display the torrent menu entry if no torrent plugin is enabled.
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-01-08 22:25:10 +01:00
Fabio Manganiello 5ef7313bdc
[Music UI] Use the Playlist component also for playlist editors. 2024-01-08 22:17:04 +01:00
Fabio Manganiello e881fedc59
[Automatic] Updated UI files
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-01-08 01:46:55 +00:00
Fabio Manganiello 3282588c6e
[Music UI] Many improvements to the interface.
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-01-08 02:44:53 +01:00
Fabio Manganiello 80c2f0d8dd
[UI] Full restyle of Slider component.
The component has been rewritten using only CSS 3 and no JS.
2024-01-08 02:44:52 +01:00
Fabio Manganiello b785609eda
[Music UI] New music nav logic.
Don't display the vertical nav on mobile by default - same logic as the
generic media nav.
2024-01-08 02:44:52 +01:00
Fabio Manganiello f59a276e09
[Media UI] Set overflow: auto on the innermost grid div only.
If a parent object of the `grid` DOM element has `overflow: auto` as
well, then it will intercept the `@scroll` events, so `Results` won't be
able to render an infinite scroll.
2024-01-08 02:44:52 +01:00
Fabio Manganiello 9f6ac4acd1
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-06 23:53:33 +00:00
Fabio Manganiello 3d2ee5d6bb
Replaced some new typing | notations with Union.
All checks were successful
continuous-integration/drone/push Build is passing
The `|` notation breaks on Python < 3.10.
2024-01-07 00:52:24 +01:00
Fabio Manganiello 1cd328ef44
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-06 23:32:55 +00:00
Fabio Manganiello c64c28f7a8
(Re)-added backend/sensor/__init__.py file.
All checks were successful
continuous-integration/drone/push Build is passing
If the empty file is missing then any remaining backends under that
package won't be indexed.
2024-01-07 00:31:45 +01:00
Fabio Manganiello f9e5117145
[Automatic] Updated components cache
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-06 23:07:31 +00:00
Fabio Manganiello f733c6318f
Moved optional import in constructor block.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-07 00:05:51 +01:00
Fabio Manganiello 1ff8cfd240
[CI/CD] A more robust logic to regenerate components.json.gz.
All checks were successful
continuous-integration/drone/push Build is passing
We shouldn't rely on `git diff`. Even when the underlying source code
hasn't changed, and the cache is dumped with `sort_keys=True`, some of
the generated snippets of docstrings may change, leading the CI/CD
pipeline to get stuck in a push loop.

We should instead look for changes to the plugins, backends, events and
schemas folders before and after the CI/CD trigger to infer if we need
to regenerate the file.
2024-01-06 23:45:51 +01:00
Fabio Manganiello e803807b8d
[Automatic] Updated components cache
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-01-06 21:51:43 +00:00
Fabio Manganiello edd92b8467
Fix: Ensure that components cache keys are ordered before dumping to file.
All checks were successful
continuous-integration/drone/push Build is passing
Reason: The CI/CD automation regenerates the cache file, and commits
the changes if it differs from the previous version.

The only way to ensure semantic equivalence is to sort the keys upon
dump.
2024-01-06 22:50:34 +01:00
Fabio Manganiello 0f130235d3
[Automatic] Updated components cache
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-01-06 21:46:12 +00:00
Fabio Manganiello 4926f28f24
[Automatic] Updated components cache
Some checks reported errors
continuous-integration/drone/push Build was killed
2024-01-06 21:45:04 +00:00
Fabio Manganiello bb6f859262
Fix: typo in git commit argument.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-06 22:43:38 +01:00
Fabio Manganiello cce04ef729
Updated components file
Some checks failed
continuous-integration/drone/push Build is failing
2024-01-06 22:41:25 +01:00
Fabio Manganiello f85fc02cce
Fix: git should be installed earlier in the update-components-cache step. 2024-01-06 22:41:25 +01:00
Fabio Manganiello 771ecd9a5b
Fixed typo in the package name of the Github manifest. 2024-01-06 22:41:24 +01:00
Fabio Manganiello 30bbc396fb
[Automatic] Updated UI files
Some checks failed
continuous-integration/drone/push Build is failing
2024-01-06 21:27:39 +00:00
Fabio Manganiello 6e1ab92298
New components cache management.
All checks were successful
continuous-integration/drone/push Build is passing
The cache is no longer generated at runtime when the application runs -
which may take quite a while, especially on fresh installations.

A `components.json.gz` file is instead generated by the CI/CD process on
every commit to the main branch, and distributed with the package.

The application will read this file when the `inspect` plugin is first
initialized.

This also means that we can no longer cache the `install_cmds`, as they
change depending on the target OS. A new
`application.get_install_commands` action has now been made available to
the UI, so it can get the correct installation commands at runtime.
2024-01-06 22:21:59 +01:00
Fabio Manganiello ef885e096f
Added inspect.get_pkg_managers internal action.
It will be used by the UI to put together the installation commands.
2024-01-06 03:02:31 +01:00
snyk-bot c6593cfa06
fix: platypush/backend/http/webapp/package.json & platypush/backend/http/webapp/package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-AXIOS-6144788
2024-01-05 14:12:29 +00:00
Fabio Manganiello e1b6be7673
Marshmallow has replaced field.default with field.dump_default.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-05 02:56:10 +01:00
Fabio Manganiello 8fd5009553
[foursquare] Proper cast to number for db variables which may be strings. 2024-01-05 02:56:10 +01:00
Fabio Manganiello 5167597ace
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-05 01:27:29 +00:00
Fabio Manganiello afee6c5c85
[music UI] Implemented infinite scroll for playlist view.
All checks were successful
continuous-integration/drone/push Build is passing
Instead of loading all the tracks in the DOM (very inefficient and slow
on slow devices and/or with big playlists), we should keep a window of
100 items in the screen and roll it over the playlists as the status
change or the user scrolls.
2024-01-05 02:19:38 +01:00
Fabio Manganiello dbae2ccc40
Added Redis db dump files to .gitignore 2024-01-04 23:32:03 +01:00
Fabio Manganiello 1e45aa5de9
A more robust logic to wait for the app to start in the tests.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-04 23:24:25 +01:00
Fabio Manganiello 91a8fd3b56
[system] A more robust logic to parse cache size from cpuinfo.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-04 13:55:08 +01:00
Fabio Manganiello 9c3da7a2a9
Several improvements for request/procedure execution.
All checks were successful
continuous-integration/drone/push Build is passing
- Fixed regression introduced by incorrect format string in `exec`.

- LINT for the `procedure` module.

- Apply `Message.Encoder` when dumping values from the context.
2024-01-04 13:13:16 +01:00
Fabio Manganiello b72fb83d18
Merge branch '286/merge-foursquare-backend'
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-01 23:00:55 +01:00
Fabio Manganiello 4aeff10a5d
[#286] Merge Foursquare backend and plugin.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #286
2024-01-01 22:54:18 +01:00
Fabio Manganiello efe46386f4
[Entities UI] Reverted .extension-container max-width.
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-01 14:27:18 +01:00
Fabio Manganiello b8f8236c28
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-01 13:24:56 +00:00
Fabio Manganiello 35772c0ae3 [Entities UI] Reverted .extension-container max-width. 2024-01-01 13:23:24 +00:00
Fabio Manganiello 3fbb0d289b Fixed docstring 2024-01-01 13:23:24 +00:00
Fabio Manganiello 7f13e02803
Fixed docstring 2023-12-31 04:34:42 +01:00
Fabio Manganiello 61d1abf6aa Merge pull request '287/github-backend-migration' (#342) from 287/github-backend-migration into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #342
2023-12-30 16:33:05 +01:00
Fabio Manganiello 1abf8c964a
Merge branch 'master' into 287/github-backend-migration
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-30 16:29:51 +01:00
Fabio Manganiello 5eb09eab1a [#287] Migrated github from a backend to a runnable plugin.
Closes: #287
2023-12-30 15:28:16 +00:00
Fabio Manganiello 2701f69d17
[#287] Migrated github from a backend to a runnable plugin.
Closes: #287
2023-12-30 16:28:12 +01:00
Fabio Manganiello a2a07afc05
[UI] Better default scrollbar width on Webkit.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-30 13:41:45 +01:00
Fabio Manganiello 0fb1035331
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-30 12:38:57 +00:00
Fabio Manganiello 12a043d67e
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-30 03:39:44 +00:00
Fabio Manganiello 57737b1b72
[Entities UI] Don't disable/set loading=true on properties during initial refresh.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-30 04:42:51 +01:00
Fabio Manganiello 5bec01a389
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-29 23:04:08 +00:00
Fabio Manganiello 2c429e9003
[Music UI] Fixed alignment of buttons in the playlist header.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-30 00:06:56 +01:00
Fabio Manganiello e3ea315276
[CI/CD] Create a .skipci file on build-ui.
If new commits are pushed by the step then another pipeline will be
triggered. We shouldn't proceed with the following steps.
2023-12-30 00:04:35 +01:00
Fabio Manganiello 2575d6cbc5
[Extensions UI] Fix hljs.highlight call to match new API. 2023-12-30 00:04:31 +01:00
Fabio Manganiello 7e58044804
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-29 03:04:26 +00:00
Fabio Manganiello 171ed7f743
[Entities UI] Better refresh logic.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-29 03:45:17 +01:00
Fabio Manganiello 6673bb4c19
[CI/CD] Always copy new apt repo root.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-26 05:53:54 +01:00
Fabio Manganiello 581fe6101f
[CI/CD] Debug pipeline by printing content of Packages file.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-26 05:45:34 +01:00
Fabio Manganiello 4b4a8c7aaa
[CI/CD] Another fix.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-26 05:40:56 +01:00
Fabio Manganiello a50ea8dd8e
[CI/CD] Change order of deb cleanup commands.
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-12-26 05:39:25 +01:00
Fabio Manganiello 15c1ac3823
[CI/CD] Clean up any existing *.deb packages before uploading new one.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-26 05:36:29 +01:00
Fabio Manganiello f3f1e96ad9
[CI/CD] Attempt to fix empty branch_dir.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-26 05:21:46 +01:00
Fabio Manganiello 89757d4366
[CI/CD] A more robust way of detecting the presence of a main version package.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-26 05:08:21 +01:00
Fabio Manganiello 995077eea7
[CI/CD] Fixed off-by-one version number issue. 2023-12-26 04:37:05 +01:00
Fabio Manganiello e8a337752a
[CI/CD] Print names of generated deb packages.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-25 15:14:18 +01:00
Fabio Manganiello 2546a582d2
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-25 12:44:31 +00:00
Fabio Manganiello ce1e8513d4 [music UI] Several UI improvements 2023-12-25 12:43:00 +00:00
Fabio Manganiello be54469df0 [music UI] Fixed search form. 2023-12-25 12:43:00 +00:00
Fabio Manganiello 290f98a74f Empty commit to trigger the build pipeline. 2023-12-25 13:31:10 +01:00
Fabio Manganiello 0de322fb95
[assistant.google] Propagate plugin name as a string to events.
All checks were successful
continuous-integration/drone/push Build is passing
This also makes it easier to programmatically stop conversations on
`SpeechRecognizedEvent` with a matched phrase.
2023-12-21 00:28:27 +01:00
Fabio Manganiello 199b42584f
Updated reference configuration sample for alarm.
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-18 14:05:35 +01:00
Fabio Manganiello b107496fbd
[Automatic] Updated UI files
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-12-18 12:56:41 +00:00
Fabio Manganiello 9cad27335d
[UI] Attribute sort.
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-12-18 13:53:09 +01:00
Fabio Manganiello 2e1ed9b176
pip on Alpine now also requires --break-system-packages
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-12-18 13:50:02 +01:00
Fabio Manganiello cfc7a5a6a0
[alarm] Added media_repeat configuration.
Some checks failed
continuous-integration/drone/push Build is failing
2023-12-18 13:46:45 +01:00
Fabio Manganiello 52fd64a162
[alarm] Added dismiss_interval configuration. 2023-12-18 03:01:27 +01:00
Fabio Manganiello 250858fe99
[Alarm UI] Added snooze/dismiss modal when alarm is running. 2023-12-18 01:36:58 +01:00
Fabio Manganiello aff02e0732
[alarm] Include type='alarm' in Alarm.to_dict().
This is for compatibility with other backend/frontend components who
expect valid entities on events or responses, and hence may break if
`type` is not specified.
2023-12-18 01:13:46 +01:00
Fabio Manganiello 29f65371d8
[Alarm UI] Support for adding/removing alarms. 2023-12-18 00:12:16 +01:00
Fabio Manganiello e617a9fe82
[alarm] Added alarm.delete. 2023-12-18 00:05:34 +01:00
Fabio Manganiello b7423e1c34
Added AlarmEditor component. 2023-12-17 17:53:38 +01:00
Fabio Manganiello 430a111303
[alarm] Better default actions inference in alarm.edit. 2023-12-17 17:53:08 +01:00
Fabio Manganiello b0feb8ed8f
[UI] Fixed regex match for initSelectedPanel. 2023-12-17 17:52:43 +01:00
Fabio Manganiello 9d456281a6
[Entities UI] Removed unrequired z-index on header. 2023-12-17 17:52:15 +01:00
Fabio Manganiello 5972c728a4
[Chore] Upgraded hljs.highlight API.
The old API, (lang, code, ...args), is now deprecated.
2023-12-16 23:49:25 +01:00
Fabio Manganiello b916c98b70
[ProcedureEditor] Emit input upon action changes. 2023-12-16 23:29:57 +01:00
Fabio Manganiello 1bd2361a3d
[TimeInterval] Refresh value on mounted. 2023-12-16 23:27:22 +01:00
Fabio Manganiello d4543c2fb7
Added ProcedureEditor component. 2023-12-16 19:03:46 +01:00
Fabio Manganiello 07a144aadc
[ActionTile] Support for drag and drop. 2023-12-16 19:00:04 +01:00
Fabio Manganiello 837007132d
[FloatingButton] Better default colors. 2023-12-16 18:59:30 +01:00
Fabio Manganiello 3bc27a505f
[UI] setUrlArgs should remove args when value == null. 2023-12-16 18:58:31 +01:00
Fabio Manganiello 065f7d74a5
[ActionTile] Better hover style. 2023-12-16 14:23:46 +01:00
Fabio Manganiello 63767cb87c
[UI] Added ActionTile component. 2023-12-16 14:14:34 +01:00
Fabio Manganiello 7fcffe899e
[ActionEditor] Support for action save/input events. 2023-12-16 14:13:11 +01:00
Fabio Manganiello f9ba4564e7
[Tabs UI] Force height to $tab-height. 2023-12-16 14:12:30 +01:00
Fabio Manganiello 028f48ed49
[Autocomplete UI] Better handling of blur events. 2023-12-16 14:09:04 +01:00
Fabio Manganiello 1dfbe0c12d
Ability to specify a custom initial action for the ActionEditor. 2023-12-14 22:22:10 +01:00
Fabio Manganiello 8bbafd2f7d
Better logic on the UI to parse the current URL fragment arguments. 2023-12-13 21:56:34 +01:00
Fabio Manganiello 9beb10c373
Extracted ActionEditor from the Execute plugin.
So it can be reused in other components that need to handle actions.
2023-12-12 23:33:16 +01:00
Fabio Manganiello 4e85087c0f
Added AlarmEditor component to Alarm. 2023-12-12 22:52:11 +01:00
Fabio Manganiello d4f6d174c8
Added FileSelector UI component. 2023-12-12 21:13:55 +01:00
Fabio Manganiello bac06e9e7b
Added TimeInterval component. 2023-12-12 00:05:46 +01:00
Fabio Manganiello 6edb8c8318
[#340] s/datetime.fromisoformat/dateutil.parser.isoparse/
We may receive JavaScript timestamps with non-standard `Z` suffix too.
2023-12-11 22:24:55 +01:00
Fabio Manganiello 6e7c5def2f
CronEditor should contain the raw cron expression and a copy button. 2023-12-11 22:18:57 +01:00
Fabio Manganiello 00694f4e10
CopyButton events should have a .prevent clause. 2023-12-11 22:18:17 +01:00
Fabio Manganiello 61ef48119f
Apply default input rules to time and datetime-local elements. 2023-12-11 22:17:47 +01:00
Fabio Manganiello 627bb66957
Added CronEditor component. 2023-12-11 00:25:24 +01:00
Fabio Manganiello 894faaad1e
[#340] Force a refresh via alarm.status when Alarm view loads. 2023-12-10 21:53:19 +01:00
Fabio Manganiello b4be56ec2c
[#340] Added condition_type field to alarm objects. 2023-12-10 21:52:50 +01:00
Fabio Manganiello e6e4396e49
Enhanced get_default_media_plugin to filter by video/audio plugins. 2023-12-10 21:50:53 +01:00
Fabio Manganiello 03c167d6b7
[#340] Added Alarm.is_cron property. 2023-12-10 20:58:13 +01:00
Fabio Manganiello 2d8f6102c1
[#340] Added alarm.edit action. 2023-12-10 20:39:06 +01:00
Fabio Manganiello 8ddd9879f2
[#340] Alarm model enhancements.
- Allow initialization of alarm actions from `Procedure` objects too.

- Force `state=WAITING` when an alarm is disabled.
2023-12-10 17:56:47 +01:00
Fabio Manganiello 686085750f
[#340] Added configuration snippet for the new alarm integration. 2023-12-10 15:45:36 +01:00
Fabio Manganiello dfa0727289
[#340] Added alarm UI panel. 2023-12-10 15:33:19 +01:00
Fabio Manganiello 62054e83cc
Remaining entity modal style rules moved from Entities to EntityModal. 2023-12-10 15:32:42 +01:00
Fabio Manganiello 42574d054a
[#340] Ironed out some bugs in the alarm integration.
- The alarm ID should be randomly generated - auto-increment IDs are
  subject to race conditions when alarms are created in separate
  processes.

- Clean up alarms that are not static and have been removed from the db.

- Better alarm shut down detection logic.
2023-12-10 15:30:19 +01:00
Fabio Manganiello ca57d3d7b3
[#340] Initial implementation of the alarm entities UI. 2023-12-09 20:33:11 +01:00
Fabio Manganiello f27e7bb7e2
[#340] Better state management for alarms.
- Added `AlarmEnabledEvent` and `AlarmDisabledEvent`.
- Added `snooze_interval` configurable both at plugin level and alarm
  level.
2023-12-09 17:12:20 +01:00
Fabio Manganiello 34e2a59285
Added optional id attribute to ToggleSwitch. 2023-12-09 16:12:08 +01:00
Fabio Manganiello 4b578c38c8
[#340] Better state management for alarms. 2023-12-09 14:25:18 +01:00
Fabio Manganiello 9d5c755188
[#340] Alarm integration improvements.
- Emit `EntityDeleteEvent` when an alarm is expired and removed so
  clients can properly synchronize their state.

- `croniter.get_next()` should be timezone-aware.
2023-12-09 13:33:42 +01:00
Fabio Manganiello fcb6b621ab
[#340] Added persistence of alarm entities. 2023-12-09 01:25:12 +01:00
Fabio Manganiello 3ffaaa0eb9
Added Procedure.to_dict method.
Also, LINT+black for the `procedure` module.
2023-12-09 01:23:36 +01:00
Fabio Manganiello a6d6fd4067
Message objects enhancements.
- Support smart JSON serialization of `Message` objects.
- Added `Message.to_dict` method.
2023-12-09 01:20:20 +01:00
Fabio Manganiello 5ad1a62293
[#340] Merged alarm backend into the alarm plugin.
Closes: #340
2023-12-06 19:23:19 +01:00
Fabio Manganiello 2670d40094
Added get_default_media_plugin utility. 2023-12-06 01:31:05 +01:00
Fabio Manganiello 680de865c4
Minor docstring fix. 2023-12-04 03:09:02 +01:00
Fabio Manganiello 5823dd0e21
[#292] Converted backend.log.http to a runnable plugin.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #292
2023-12-04 03:03:21 +01:00
Fabio Manganiello 1843ab224b
[#289] Converted backend.file.monitor into a runnable plugin.
Closes: #289
2023-12-04 03:03:20 +01:00
Fabio Manganiello d484a34c00
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-03 23:34:57 +00:00
Fabio Manganiello d048752184
[#301] Exposing hosts as entities in the ping plugin.
Some checks reported errors
continuous-integration/drone/push Build was killed
Closes: #301
2023-12-04 00:36:45 +01:00
Fabio Manganiello 3bb7c02572
[#301] Merged ping backend and plugin.
Also, removed `ping` response types.
2023-11-24 02:06:53 +01:00
Fabio Manganiello 71ccffa698
[weather.buienradar] Implemented forecast support. 2023-11-23 01:35:58 +01:00
Fabio Manganiello b969afb1cf
Added support for weather forecast events and entities. 2023-11-23 01:35:58 +01:00
Fabio Manganiello 841a28066b
Added support for generic kwargs to publish_entities. 2023-11-23 01:35:57 +01:00
Fabio Manganiello ca7c89949b
Only react on NewWeatherConditionEvent if plugin_name is compatible. 2023-11-23 01:35:57 +01:00
Fabio Manganiello aca71c6bc7 [wallabag] Improved OAuth flow integration.
All checks were successful
continuous-integration/drone/push Build is passing
If the user provided `username` and `password` in the plugin
configuration, then we should use those credentials to refresh the OAuth
token when expired.
2023-11-22 11:38:00 +01:00
Fabio Manganiello 7bb15b0a03
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-20 02:08:35 +00:00
Fabio Manganiello a0d8c522a2
[#308] Finalized weather integrations migration.
Some checks reported errors
continuous-integration/drone/push Build was killed
- Migrated `weather.buienradar` integration.
- Removed last leftovers of the previous weather backends and responses.

Closes: #308
2023-11-20 03:10:00 +01:00
Fabio Manganiello 2dac98c56e
More rst fixes. 2023-11-20 03:09:59 +01:00
Fabio Manganiello a798cfa387
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-20 01:42:12 +00:00
Fabio Manganiello 80be79f5e8
Fixed link format.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-20 02:43:18 +01:00
Fabio Manganiello bc8730d6f0
[#308] Removed weather backend. 2023-11-20 01:54:10 +01:00
Fabio Manganiello b8a4b9e4c5
Implemented support for weather entities. 2023-11-20 01:46:01 +01:00
Fabio Manganiello bf8f31545a
Fixed alignment of entity icon in modal. 2023-11-19 22:33:19 +01:00
Fabio Manganiello b800899859
[#308] Refactored weather.openweathermap plugin. 2023-11-19 00:10:10 +01:00
Fabio Manganiello 6108cbb621
Added Config.get_device_id() classmethod. 2023-11-18 23:04:19 +01:00
Fabio Manganiello eec2908cc2
Removed DarkSky integration.
The API has gone and it's been merged into Apple Weather.
2023-11-18 21:45:47 +01:00
Fabio Manganiello 674c1036c5
Fixed some plugin usages of self._bus.
All checks were successful
continuous-integration/drone/push Build is passing
Now `_bus` is a common property shared by all the plugins, so it
shouldn't be overloaded.
2023-11-18 16:58:55 +01:00
Fabio Manganiello 8817581061
Removed -U option from pip command when installing deps.
All checks were successful
continuous-integration/drone/push Build is passing
We don't need to forcefully upgrade packages that don't need to be
upgraded.
2023-11-18 16:07:16 +01:00
Fabio Manganiello 869ef38364
Removed explicit numpy pip dependency in assistant.google.
All checks were successful
continuous-integration/drone/push Build is passing
It will be installed by the other dependencies anyway.
2023-11-18 16:01:24 +01:00
Fabio Manganiello 6b68fa607b
(Possible) fix for multi-line breaks in apt/index.txt.
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-18 15:37:17 +01:00
Fabio Manganiello c055edab8f
Moved all list files generation logic within the update-apt-repo step.
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-18 15:33:22 +01:00
Fabio Manganiello e5ca96e004
Fixed Drone CI command indentation.
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-18 15:27:34 +01:00
Fabio Manganiello fdaff32cd0
Fixed docstring for chromecast.status.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-18 14:17:17 +01:00
Fabio Manganiello dcf9561ad1
[CI/CD] Regenerate the Debian repo list files when the repo is rebuilt. 2023-11-18 14:16:49 +01:00
Fabio Manganiello 1a777c6276
Removed Todoist backend and migrated responses to schemas.
All checks were successful
continuous-integration/drone/push Build is passing
The Todoist Websocket interface is no longer working properly, and I'm
sick of reverse engineering it.

Closes: #305
2023-11-18 10:16:48 +01:00
Fabio Manganiello c2f53b7771
Added _bus property on Plugin. 2023-11-18 10:13:35 +01:00
Fabio Manganiello f12af08e73
Minor return type fix. 2023-11-17 22:30:30 +01:00
Fabio Manganiello 0f9614506b
[trello] Updated procedure to retrieve the frontend cloud token. 2023-11-17 10:28:27 +01:00
Fabio Manganiello c919cf0cd8
[trello] (Almost) complete plugin rewrite.
All checks were successful
continuous-integration/drone/push Build is passing
- Merged `trello` plugin and backend into a single plugin.

- Removed legacy `Response` objects, replaced with data classes and
  schemas.

- Fixed the Websocket connection flow to reflect the new authentication
  protocol.

Closes: #307
2023-11-17 02:07:04 +01:00
Fabio Manganiello 39b4483401
Fixed joystick manifest.
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-16 22:08:00 +01:00
Fabio Manganiello e2c72ea24b
Updated docs
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-16 21:44:59 +01:00
Fabio Manganiello 7bb08bca07
[joystick] Rewritten joystick integration as a plugin.
All checks were successful
continuous-integration/drone/push Build is passing
And removed legacy `joystick*` backends and `inputs` plugin.

Closes: #290
2023-11-16 21:43:56 +01:00
Fabio Manganiello 5e629990e6
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-15 02:04:50 +00:00
Fabio Manganiello d617443af6
[YouTube] Added subscriptions+channels support.
Some checks failed
continuous-integration/drone/push Build is failing
Closes: #337
2023-11-15 03:05:58 +01:00
Fabio Manganiello 9ed7026aaf
[media UI] Propagate free text filter to all the views. 2023-11-15 03:05:58 +01:00
Fabio Manganiello ae017516c4
[YouTube UI] Support playlist navigation in the media nav. 2023-11-15 03:05:57 +01:00
Fabio Manganiello 4853f51c8b
[YouTube] Added (read-only) playlists support. 2023-11-15 03:05:57 +01:00
Fabio Manganiello b491f81cda
[media UI] Added loading spin overlay upon play. 2023-11-15 03:05:57 +01:00
Fabio Manganiello 9e5728f8ba
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-13 01:39:51 +00:00
Fabio Manganiello 96e69811fe
[#337] Initial YouTube UI with feed support.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-13 02:40:50 +01:00
Fabio Manganiello f425e95e7e
[media UI] Show track image if available on desktop+ size. 2023-11-13 02:40:50 +01:00
Fabio Manganiello 60fb7bba5f
[media UI] Added support for generic media providers. 2023-11-13 02:40:50 +01:00
Fabio Manganiello be28965d84
[youtube] Added youtube.get_feed action. 2023-11-13 02:40:50 +01:00
Fabio Manganiello b63579b81c
[UI] Fixed some glitches of the Dropdown component. 2023-11-13 02:40:49 +01:00
Fabio Manganiello f6c752c80e
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-12 14:59:23 +00:00
Fabio Manganiello 50922cf149
[media UI] Fixed player selector style after Dropdown component changes.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-12 15:55:28 +01:00
Fabio Manganiello ca72e22820
[UI] Proxy /media/* requests to upstream when Vue is in debug mode. 2023-11-12 15:55:03 +01:00
Fabio Manganiello d4b519a572
[media UI] Wrapped the file browser into a MediaBrowser component.
This will make it easier to support multiple media collection providers
other than local files.
2023-11-12 15:54:27 +01:00
Fabio Manganiello 6dfe2324c1
[UI] Added navigation crumbs to the file browser. 2023-11-12 15:53:46 +01:00
Fabio Manganiello 724f625963
[media.chromecast] Skip errors on cast.wait.
It may be that the cast thread has been recycled and it's already been
awaited. It's safe to skip the error in these cases.
2023-11-12 15:52:31 +01:00
Fabio Manganiello e416a70658
[UI] (Re)-added required logo-256x256.png image. 2023-11-12 15:52:07 +01:00
Fabio Manganiello cad36b7911
[UI] Watch the connected flag for changes to update the Nav indicator. 2023-11-12 14:00:18 +01:00
Fabio Manganiello 60b5f235a7
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-12 02:08:23 +00:00
Fabio Manganiello 1f321c32dc
[media.chromecast] Full plugin rewrite.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-12 03:08:54 +01:00
Fabio Manganiello 20aeb0b72e
[system] Some versions of cpuinfo may return cache sizes in human-readable format.
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-10 21:55:41 +01:00
Fabio Manganiello 9a090d1b46
[system] Cache sizes can also be float, not necessarily int.
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-10 21:30:56 +01:00
snyk-bot d54970765e
fix: upgrade vue from 3.3.4 to 3.3.6
Snyk has created this PR to upgrade vue from 3.3.4 to 3.3.6.

See this package in npm:
https://www.npmjs.com/package/vue

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-11-10 14:35:37 +00:00
Fabio Manganiello 3d62069775
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-10 01:48:45 +00:00
Fabio Manganiello 1d833d25ab
Updated integrations docs.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-10 02:49:29 +01:00
Fabio Manganiello ceae310901
[snapcast] Merged backend logic into the plugin.
Closes: #283
2023-11-10 02:48:07 +01:00
Fabio Manganiello 6c3edb73f9
[music.snapcast] Fixed message serialization issue.
Closes: #338
2023-11-09 22:46:54 +01:00
Fabio Manganiello 1ec42e11fc
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-09 01:46:44 +00:00
Fabio Manganiello 52ee614ec4
[media] Added logic to parse local media metadata.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-09 02:47:34 +01:00
Fabio Manganiello a83f4729a6
[UI] Extracted grid into layout.scss. 2023-11-09 02:47:34 +01:00
Fabio Manganiello 4814c56a2d
[media UI] Added resolution to media info. 2023-11-09 02:47:34 +01:00
Fabio Manganiello 90a9684404
[media UI] Added extra rating fields to the media info component. 2023-11-09 02:47:33 +01:00
Fabio Manganiello cd635ea69e
[torrent] Fixed duration and image for TV series results. 2023-11-09 02:47:33 +01:00
Fabio Manganiello e66ca105d7
[jellyfin] Added duration field to video results. 2023-11-09 02:47:33 +01:00
Fabio Manganiello d1b721dba5
[torrent] Added image to search results. 2023-11-09 02:47:33 +01:00
Fabio Manganiello eb7a96ee94
[youtube] Added more metadata fields to search results. 2023-11-09 02:47:32 +01:00
Fabio Manganiello d7093d18c5
[media UI] Major redesign of the search results. 2023-11-09 02:47:32 +01:00
Fabio Manganiello f7a25a478d
[UI] Dropdown component rewrite.
Dropdown components should always be rendered under the root element, or
nasty effects caused by absolute parenting may end up hiding dropdown
elements regardless of their `z-index`.

The new approach uses a single `<DropdownContainer>` element in the
main `App` file. Each `<Dropdown>` component will push updates to the
bus whenever it triggers open/close events, and the dropdown component
to be rendered will be pushed upstream and rendered in the root element.
2023-11-09 02:47:32 +01:00
Fabio Manganiello fafc1747d6
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-06 23:45:02 +00:00
Fabio Manganiello 3d2dc22ed3
[media UI] Improved media UI.
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-11-07 00:45:45 +01:00
Fabio Manganiello e7bd61e0d4
Black/LINT for Jellyfin plugin. 2023-11-07 00:45:45 +01:00
Fabio Manganiello a94ddd3f05
[torrent] duration * 60 for results returned by PopcornTime API. 2023-11-07 00:45:44 +01:00
Fabio Manganiello 1d41df51e7
[media] Extended current track with ytdl metadata if available. 2023-11-07 00:45:44 +01:00
Fabio Manganiello a939cb648c
[media UI] Extracted PlayPauseButton into its own component. 2023-11-07 00:45:44 +01:00
Fabio Manganiello 7889846cd6
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-06 01:29:16 +00:00
Fabio Manganiello 2caa171c6d
[media UI] Fixed alignment of the controls right handle.
Some checks failed
continuous-integration/drone/push Build is failing
2023-11-06 02:25:54 +01:00
Fabio Manganiello 27da2becd7
[media] Added media.get_info action.
It combines the `-j` and `-g` options of ytdl* to get both the stream
URL and the track metadata.
2023-11-06 02:25:35 +01:00
Fabio Manganiello e0a9ccca24
[media UI] Component refactor.
- Fixed style of the floating control extensions panel.
- Extracted `ProgressBar` and `ExtraControls` into separate components.
2023-11-06 01:54:12 +01:00
Fabio Manganiello 8e8bd7fb9f
[media UI] Fixing/refactoring media UI.
- Fixed broken elements in the media control view.
- Fixed volume bar.
2023-11-05 23:45:37 +01:00
Fabio Manganiello 6411688e65
[youtube] Don't fail if some items in the response have missing attrs. 2023-11-05 22:12:21 +01:00
snyk-bot 9814292a2e
fix: upgrade vue-router from 4.2.4 to 4.2.5
Snyk has created this PR to upgrade vue-router from 4.2.4 to 4.2.5.

See this package in npm:
https://www.npmjs.com/package/vue-router

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-11-05 15:30:06 +00:00
snyk-bot eff126052d
fix: upgrade core-js from 3.32.0 to 3.33.0
Snyk has created this PR to upgrade core-js from 3.32.0 to 3.33.0.

See this package in npm:
https://www.npmjs.com/package/core-js

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-11-05 15:30:02 +00:00
snyk-bot 3ddac09412
fix: upgrade sass from 1.65.1 to 1.69.3
Snyk has created this PR to upgrade sass from 1.65.1 to 1.69.3.

See this package in npm:
https://www.npmjs.com/package/sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-11-05 15:29:57 +00:00
Fabio Manganiello daa93f5994
[media UI] Fixed style of the Play URL modal. 2023-11-05 12:19:36 +01:00
Fabio Manganiello 71bca662a1
media.play should support anything supported by a yt_dlp extractor.
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-05 02:40:38 +01:00
Fabio Manganiello e45fb9c8ac
Major rewrite of the media routes.
All checks were successful
continuous-integration/drone/push Build is passing
- Streaming and media subtitles endpoints moved from Flask to Tornado
  routes - the old Flask streaming route no longer worked behind a
  Tornado server.

- Storing the streaming state on Redis rather than in a local variable,
  or different Tornado processes may end up with different copies of the
  registry.

Closes: #336
2023-11-05 01:33:36 +01:00
Fabio Manganiello 0e2738d849
Added _on_error handler to StreamingRoute. 2023-11-05 01:03:40 +01:00
Fabio Manganiello 7c780e6650
Refactored utils.bus.send_request.
It should return the response output and raise an error if the response
has errors.
2023-11-04 16:22:27 +01:00
Fabio Manganiello f7fe844296
Black/LINT pass for media handler routes. 2023-11-04 16:13:52 +01:00
Fabio Manganiello 11c3b7820d
[torrent] Create download_dir if it doesn't exist. 2023-11-04 15:48:05 +01:00
Fabio Manganiello 07e7f06c7a
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-04 11:12:51 +00:00
Fabio Manganiello 2b12984c81
[youtube] Full plugin rewrite.
Some checks failed
continuous-integration/drone/push Build is failing
Instead of relying on the official Google YouTube API (limited, subject
to breaking changes with short/no notice depending on Google's strategy
against scrapers, and with an initial setup that has a high cost), we'll
just stick to Piped from now on.

It's free, it doesn't require API keys, it's unlikely to change, it's
not subject to Google's hostile practices against developers, and
anybody can run an instance.
2023-11-04 12:11:44 +01:00
Fabio Manganiello 44d4ae2a96
[media] Made the youtube-dl executable configurable.
`youtube-dl` is mostly dead and there are several forks available, thus
we need to give the user the ability to pick which `youtube-dl`
executable fork they want to use.

Among these, `yt-dlp` is probably the most maintained today and it's
also included in many default repos, so it's been added as an extra
requirement for all the media plugins.

Closes: #268
2023-11-04 11:57:09 +01:00
Fabio Manganiello 5478b90288
[Media UI] Start/stop streaming use the configured media plugin.
The base `media` plugin is abstract, hence the `Media` panel needs to
pass the current media plugin to the `Utils` mixins so it can pick the
right action.
2023-11-04 11:54:44 +01:00
Fabio Manganiello b4bf30945a
[media] Black/LINT for MediaPlugin. 2023-11-04 00:50:08 +01:00
Fabio Manganiello efdb63443d
Renamed the youtube plugin.
From `google.youtube` to `youtube`.
2023-11-04 00:07:29 +01:00
Fabio Manganiello 9ac25a7627
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-03 21:24:49 +00:00
Fabio Manganiello 3b335723a9
Merge pull request #387 from BlackLight/snyk-upgrade-7f1672a9074c3d844aa231ad5ba0e90d
Some checks failed
continuous-integration/drone/push Build is failing
[Snyk] Upgrade core-js from 3.23.4 to 3.31.1
2023-11-03 22:18:22 +01:00
Fabio Manganiello 23bae8e31c
Merge pull request #388 from BlackLight/snyk-upgrade-ae486550d733dccfaf3fab04d0756007
[Snyk] Upgrade vue-router from 4.1.2 to 4.2.3
2023-11-03 22:18:06 +01:00
Fabio Manganiello 8acb4156e0
Merge branch 'master' into snyk-upgrade-7f1672a9074c3d844aa231ad5ba0e90d 2023-11-03 22:11:01 +01:00
Fabio Manganiello 4a43f5ebf6
Merge pull request #391 from BlackLight/snyk-fix-6906c0f651d59befdc6753ce60922592
[Snyk] Security upgrade werkzeug from 2.2.3 to 3.0.1
2023-11-03 22:08:47 +01:00
Fabio Manganiello 664ca7f9b5
Merge branch 'master' into snyk-upgrade-ae486550d733dccfaf3fab04d0756007 2023-11-03 22:07:35 +01:00
Fabio Manganiello 2bb7285c8a
Merge pull request #392 from BlackLight/snyk-fix-ccc0cd6dbbb455def4c5435b5511ae11
[Snyk] Security upgrade axios from 0.21.4 to 1.6.0
2023-11-03 22:06:22 +01:00
Fabio Manganiello 10ec4d39ea
Merge pull request #389 from BlackLight/snyk-upgrade-9420343b82254b8e287940baaf3881aa
[Snyk] Upgrade sass from 1.64.2 to 1.65.1
2023-11-03 22:06:03 +01:00
Fabio Manganiello f5af85ee65
Merge pull request #390 from BlackLight/dependabot/npm_and_yarn/platypush/backend/http/webapp/babel/traverse-7.23.2
Bump @babel/traverse from 7.22.8 to 7.23.2 in /platypush/backend/http/webapp
2023-11-03 22:03:12 +01:00
Fabio Manganiello f6952f1198
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-03 20:56:12 +00:00
Fabio Manganiello 170e37945e [UI] Make sure that a Modal never overflows its parent. 2023-11-03 20:54:46 +00:00
Fabio Manganiello 4c5366849d [torrent] Updated plugin.
- The default PopcornTime API host has changed, as popcorn-time.ga is no
  longer available.

- The iMDb API now requires a paid tier even for a basic query. The
  official iMDb API layer (and the API key requirement) has thus been
  replaced with a dear ol' scraping of the frontend endpoint.

- Pass of Black/LINT.
2023-11-03 20:54:46 +00:00
Fabio Manganiello 35571b8d13 [UI] Set max-width for the media info modal.
This modal can grow very large depending on the size of the media
metadata, thus it's wise to keep its width in check.
2023-11-03 20:54:46 +00:00
Fabio Manganiello 96f2a8f8fc [UI] Set a base z-index for the root content canvas.
This allows loading spinners, modals and other components with a real
fullscreen background to stretch over the required space, without being
covered by the navigator or other sibling components.

This also requires the collapsed navigator to have a 1px margin-right,
or its separation border won't be visible.
2023-11-03 20:54:46 +00:00
Fabio Manganiello 266ee3cadf Expose run on the base package level.
This enables a syntax like:

```
from platypush import run

run('application.restart')
```
2023-11-03 20:54:46 +00:00
Fabio Manganiello 5e2973dd5f [UI] Removed <tt> tag. 2023-11-03 20:54:46 +00:00
Fabio Manganiello ba5d505c9b [youtube] Black/LINT pass. 2023-11-03 20:54:46 +00:00
Fabio Manganiello f6cb1fa4a7 Added utils.get_default_downloads_dir. 2023-11-03 20:54:46 +00:00
Fabio Manganiello fd1f93799d [An empty commit to re-trigger the CI/CD pipeline] 2023-11-03 20:54:46 +00:00
Fabio Manganiello 81f7eca319 Better styling of the docs. 2023-11-01 02:30:25 +00:00
Fabio Manganiello 0e29e770fb Updated sample config snippet for tts.mimic3. 2023-11-01 02:30:25 +00:00
Fabio Manganiello f3fe249ae9 [An empty commit to re-trigger the CI/CD pipeline] 2023-11-01 02:30:25 +00:00
Fabio Manganiello d9c4634ce8 [tts.mimic3] Plugin rewrite.
The plugin now leverages the `sound` plugin for playback, like all other
`tts` plugins now do, instead of an external `media` plugin.

This also removes the need for the `/tts/mimic3/say` endpoint.
2023-10-31 00:44:05 +00:00
Fabio Manganiello f960ec4bf4 [sound] Plugin refactor.
- Added `input_format`/`output_format` options to both input and output
  audio streams.

- Replaced the previous (confusing) occurrences of `ffmpeg_format` and
  `format`.

- Added custom `dtype` option for `sound.play`.

- Added `join` flag (default: false) to `sound.play` to wait for the
  playback to finish.
2023-10-31 00:44:05 +00:00
Fabio Manganiello d5514d7f27 Added utils.is_debug_enabled. 2023-10-31 00:44:05 +00:00
Fabio Manganiello ef3b1d20f2 Updated MediaPlugin documentation snippet. 2023-10-31 00:44:05 +00:00
Fabio Manganiello 0cbd0a94d6 tts plugins should leverage sound`, not an external media player. 2023-10-31 00:44:05 +00:00
Fabio Manganiello 72b2625425 Updated tts plugin dependencies, as they now leverage the sound plugin. 2023-10-31 00:44:05 +00:00
Fabio Manganiello 68c73fa181 [tts.mimic3] Added timeout to requests.post proxy. 2023-10-31 00:44:05 +00:00
Fabio Manganiello faacbfd84f [An empty commit to re-trigger the CI/CD pipeline] 2023-10-31 00:44:05 +00:00
snyk-bot c9ac3e624f
fix: platypush/backend/http/webapp/package.json & platypush/backend/http/webapp/package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-AXIOS-6032459
2023-10-27 14:35:27 +00:00
snyk-bot 51a956c607
fix: requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-WERKZEUG-6035177
2023-10-26 14:36:06 +00:00
Fabio Manganiello 42912581f9 [Fix] Always initialize AssistantPlugin._conversation_start_sound. 2023-10-23 21:30:49 +00:00
Fabio Manganiello 4a881c33d0 [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 21:30:49 +00:00
Fabio Manganiello 23e53f13f0 Removed/commented references to numpy.typing.
That module isn't available yet on the numpy version installed on Debian
`oldstable`.
2023-10-23 20:23:57 +00:00
Fabio Manganiello 193314fcd0 [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 20:23:57 +00:00
Fabio Manganiello fc869bf5db [Fix] sounddevice arguments fix.
Different versions of the `sounddevice` dependency may or may not return
the `index` parameter when querying the available sound devices.

Thus, the code should be ready for both cases.
2023-10-23 20:11:14 +00:00
Fabio Manganiello b91d544b89 [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 20:11:14 +00:00
Fabio Manganiello 74ff0f8e33 [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 19:49:16 +00:00
Fabio Manganiello acf0e0f34f [CI/CD] Moved the chmod commands outside of the if. 2023-10-23 19:46:07 +00:00
Fabio Manganiello d7db55cf90 [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 19:46:06 +00:00
Fabio Manganiello 5c857038cf [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 19:40:45 +00:00
Fabio Manganiello f9ce5e3cd2 [CI/CD] chmod should always be the final step in update-apt-repo. 2023-10-23 19:38:51 +00:00
Fabio Manganiello 3a5be7211b [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 19:38:51 +00:00
Fabio Manganiello 905ca1855b [An empty commit to re-trigger the CI/CD pipeline] 2023-10-23 19:35:28 +00:00
Fabio Manganiello 532427eeb5 [CI/CD] The chmod section should be on the update-apt-repo step. 2023-10-23 19:30:26 +00:00
Fabio Manganiello 4afd1b68d0 [Fix] s/chown/chmod/g typo fix 2023-10-23 19:26:21 +00:00
Fabio Manganiello 8c0c551aa5 [CI/CD] Ensure that public repo dirs are always readable by everyone. 2023-10-23 19:23:23 +00:00
Fabio Manganiello cea3055369 Indent pre- and post-install shell scripts in docs. 2023-10-23 15:48:09 +00:00
Fabio Manganiello 6d694f02b4
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-23 14:04:25 +00:00
Fabio Manganiello a005958317
[Assistant] Added assistant entity type.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-23 16:02:05 +02:00
Fabio Manganiello fd26f7fef3
[UI Nav] Fixed position of the connected status dot. 2023-10-23 15:57:47 +02:00
Fabio Manganiello 5c22271e88
[UI] Expose the connected flag on the root element level. 2023-10-23 15:03:36 +02:00
Fabio Manganiello 4c0e3a16b6
Removed Alexa/AVS integration.
The integration was based on my old fork of the AVS service, which is no
longer functional given the changes the the Amazon's backend side.

A new `avs-device-sdk` is now available, but it seems that it requires
lengthy compilation processes which are RaspberryPi-specific.

Further investigation is needed for a new Alexa plugin - see #334.
2023-10-23 00:23:10 +02:00
Fabio Manganiello fb017a8b35
[assistant.google] Added doc on how to configure audio devices. 2023-10-22 22:49:41 +02:00
Fabio Manganiello 2c8b06e471
Remove Snowboy integration.
It hurts to see it go, as I really believed in this project.

But the website of the project went away in 2020, the Github project
hasn't seen any activity since 2021, and the fork that is supposed to be
used as a replacement for training .pmdl models hasn't been updated
since 2021 - and it only supports Python 2 on Ubuntu 16.04 or 18.04.

One day I may dedicate some efforts to bring Snowboy back to life, but
until then it's definitely not in a state where it's usable for a
Platypush integration.
2023-10-22 22:33:22 +02:00
Fabio Manganiello 645e8c8f77
Added updated configuration snippet for assistant.google plugin. 2023-10-22 21:53:15 +02:00
Fabio Manganiello b46c00f015
Removed deprecated google.assistant.pushtotalk plugin.
It only existed as a back-compatibility layer with armv6, since there
was no build of the assistant library that worked on Raspberry Pi Zero.

But that API layer has been discontinued by Google and it's no longer
functional, so only the `assistant.google` integration (on x86_64 and
armv7) is currently supported.
2023-10-22 19:57:55 +02:00
Fabio Manganiello cce6c4c5ad
[#284] Merged assistant.google plugin and backend.
This removes the deprecated `assistant.google` backend and also adds a
new `conversation_start_sound` parameter.
2023-10-22 19:55:11 +02:00
Fabio Manganiello debb4f6f36
[Docs] Wrap generate_missing_docs logic in auto_mocks block.
All checks were successful
continuous-integration/drone/push Build is passing
It should be possible to synchronize the documented modules even on
installations that don't have all the custom dependencies installed.
2023-10-22 19:08:16 +02:00
Fabio Manganiello e24438980a
[sound] Better logic for default sound device auto-detection.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-22 18:07:25 +02:00
Fabio Manganiello 4d582bb6bc
Ensure that the application always terminates on Ctrl+C.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-22 02:33:15 +02:00
Fabio Manganiello f75a2159c7
[platyvenv] Add the venv bin directory to the PATH.
After creating the virtual environment, we should add `<VENV_DIR>/bin`
to the `PATH` variable, so any next `python`/`pip` commands will be
executed in the new environment.
2023-10-22 02:28:31 +02:00
Fabio Manganiello a909dc5f0f
[Fix] The base per-OS requirements filename is always lowercase. 2023-10-22 01:45:23 +02:00
Fabio Manganiello e65eef34d3
[application] application.install should redirect stderr->stdout. 2023-10-22 01:44:39 +02:00
Fabio Manganiello 8b5871af0e
[Fix] platyvenv should also execute the before and after blocks.
Before this fix, `platyvenv`, unlike `platydock`, didn't take into
account any extra before/after installation commands that individual
integrations may instruct to run in their manifest files.
2023-10-22 01:41:19 +02:00
Fabio Manganiello ea88ab7f6c
[Docs] Clone and build wiki pages on docs.platypush.tech.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-21 22:54:49 +02:00
Fabio Manganiello b80a48ec80
[Docs] Added custom style to the main doc page.
Component lists are now displayed in a grid format, each accompained by
an icon.
2023-10-21 22:53:24 +02:00
Fabio Manganiello 02049030d0
paho module added to automocks. 2023-10-21 19:55:50 +02:00
Fabio Manganiello deecde1d72
Fixed module name in docs. 2023-10-21 19:55:00 +02:00
Fabio Manganiello 4883f49b19
Removed unused travisci events. 2023-10-21 19:15:34 +02:00
Fabio Manganiello cd87cc3e43
Minor docstring fixes. 2023-10-21 18:08:29 +02:00
Fabio Manganiello 8634572c34
Small docstring fix. 2023-10-20 01:41:30 +02:00
Fabio Manganiello 0eae6fd48d
Misc dependencies and mock fixes.
All checks were successful
continuous-integration/drone/push Build is passing
- `iputils` should be an explicit system dependency for `ping`.
  Some minimal systems (like some Docker images) may not have the `ping`
  command installed out of the box.

- `hid` and `marshmallow_dataclass` should be among the auto-mocked
  modules.
2023-10-20 01:02:35 +02:00
Fabio Manganiello ed2a56de42
paho.mqtt should also be added to the mock modules
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-20 00:00:07 +02:00
Fabio Manganiello 1e2ffc121f
[CI/CD] Added yum install platypush-git line to index.txt.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-19 23:56:48 +02:00
Fabio Manganiello a915dd1e1f
[CI/CD] Regenerate the full apt and rpm repos in Drone pipeline.
All checks were successful
continuous-integration/drone/push Build is passing
This also includes:

- index.txt
- pubkey.txt
- RPM repo definition
2023-10-19 23:46:36 +02:00
Fabio Manganiello 5d3c7679b6
[Fix] Added mistakenly removed PKG_NAME variable.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-19 21:54:03 +02:00
Fabio Manganiello 6fb432d7bb
[CI/CD] S3 bucket replaced with a local folder.
Some checks failed
continuous-integration/drone/push Build is failing
Managing concurrent copies over s3fs through CI/CD is a hassle.
Input/output errors abound and the steps are also slow.
2023-10-19 21:48:59 +02:00
Fabio Manganiello 1f1eadf962
[CI/CD] Added -o nomixupload option to s3fs.
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-19 20:57:25 +02:00
Fabio Manganiello 2197ce7c78
Revert "[CI/CD] Trying to prevent race conditions on S3 access from Drone CI automation" 2023-10-19 20:11:42 +02:00
Fabio Manganiello 111cb5e62a
[CI/CD] Trying to prevent race conditions on S3 access from Drone CI automation
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-19 20:06:51 +02:00
Fabio Manganiello ff02d2a3c8
[CI/CD] Trying to prevent race conditions on S3 access from Drone CI automation
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-10-19 20:05:51 +02:00
Fabio Manganiello e1fc38e014
[Automatic] Updated UI files
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-19 17:52:56 +00:00
Fabio Manganiello 2c37596478
Updated UI files
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-19 19:52:50 +02:00
Fabio Manganiello a00f034282
Added non-Python static files to setup.cfg.
As it's best practice for the latest versions of Python builders.
2023-10-19 19:48:20 +02:00
dependabot[bot] 569db13a9b
Bump @babel/traverse in /platypush/backend/http/webapp
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.8 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-19 11:30:24 +00:00
Fabio Manganiello 4c6d966038 [Doc fix] Fixed indent in the documentation of the application.install action.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-19 12:13:08 +02:00
Fabio Manganiello 7eaf8dbdc0
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-18 22:53:48 +00:00
Fabio Manganiello 38c5172316
[UI] Show the connected/disconnected status in the Nav icon.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-19 00:33:17 +02:00
Fabio Manganiello f3c5c2fdfa
[Extensions UI] Added RestartButton to the Install tab.
It should be possible to easily restart the service after installing the
dependencies for a new integration.
2023-10-18 23:52:49 +02:00
Fabio Manganiello b724e80ee2
[Settings UI] Added Stop and Restart application buttons. 2023-10-18 23:45:46 +02:00
Fabio Manganiello 2a76a6baa6
[Extensions UI] Added current config to extension panel.
If an extension is configured and enabled, then the UI will now include
a tick next to its name and the currently loaded configuration in the
`Configuration` tab.
2023-10-18 22:51:30 +02:00
Fabio Manganiello f0255549c8
[utils] Added utils.to_yaml action. 2023-10-18 22:50:52 +02:00
Fabio Manganiello c7acc03c8f
[inspect] Added get_enabled_plugins and get_enabled_backends actions. 2023-10-18 22:10:32 +02:00
Fabio Manganiello c05d887551
[application] Added application.install action.
All checks were successful
continuous-integration/drone/push Build is passing
It can be used to programmatically install extensions.
2023-10-18 19:33:00 +02:00
Fabio Manganiello e2e349a2ad
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-18 01:01:06 +00:00
Fabio Manganiello 922297bf58
[Extensions UI] Support for initializing an extension from URL.
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-10-18 03:00:54 +02:00
Fabio Manganiello 137855b4fc
[Entities UI] Fixed collapse toggling logic. 2023-10-18 03:00:54 +02:00
Fabio Manganiello 26b912fae4
[Execute UI]
- If an action is passed over the URL, then initialize the UI with it.

- Added link from the actions back to their plugins.
2023-10-18 03:00:54 +02:00
Fabio Manganiello e5d84242bb
[Extensions UI] Action URLs now point to the Execute panel. 2023-10-18 03:00:53 +02:00
Fabio Manganiello 6f01c35a0f
[UI] Added utilities to get and set args on the URL fragment. 2023-10-18 03:00:53 +02:00
Fabio Manganiello a30c07fbb5
[Execute UI] Make sure that the list of arguments doesn't overflow. 2023-10-18 03:00:53 +02:00
Fabio Manganiello 0c54c8f885
[UI] Refresh the loaded panel when the URL fragment changes. 2023-10-18 03:00:53 +02:00
Fabio Manganiello 6289eb47ab
[Extensions UI] Added Actions and Events sections to Doc. 2023-10-18 03:00:53 +02:00
Fabio Manganiello 6383030e96
[Extensions UI] Added notifications in case of install errors. 2023-10-18 03:00:52 +02:00
Fabio Manganiello 3107df5eba
[UI Nav] Moved Extensions panel from the plugins list to the footer. 2023-10-18 03:00:52 +02:00
Fabio Manganiello 81e99a0e22
[shell] Better buffering for the output sent to websockets. 2023-10-18 03:00:52 +02:00
Fabio Manganiello a652bd9df8
[Extensions UI] Install extensions deps from the UI.
- Added `Install` button
- Added interactive output panel
2023-10-18 03:00:52 +02:00
Fabio Manganiello 033317e0a7
[Extensions UI] Passing config_file to the configuration tab. 2023-10-18 03:00:51 +02:00
Fabio Manganiello 66cba233e5
[config] Added config.get_config_file action. 2023-10-18 03:00:51 +02:00
Fabio Manganiello 20a2203e7e
[Shell plugin] Added support for async output over websockets. 2023-10-18 03:00:51 +02:00
Fabio Manganiello 2806e943c3
[Extensions UI] Added Install tab. 2023-10-18 03:00:51 +02:00
Fabio Manganiello e40a74f11c
Added install_cmds to the JSON representation of a manifest. 2023-10-18 03:00:50 +02:00
Fabio Manganiello 9769520e88
[UI] Use .min.css file for the Highlight.js styles. 2023-10-18 03:00:50 +02:00
Fabio Manganiello 3366732fa8
[UI] Expand Tab width on mobile. 2023-10-18 03:00:50 +02:00
Fabio Manganiello 12f7b190b9
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-16 00:30:42 +00:00
Fabio Manganiello 99e98f70f4
[Integrations UI] Added configuration tab.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-16 02:30:30 +02:00
Fabio Manganiello b19725c72c
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-15 23:18:08 +00:00
Fabio Manganiello 398d64c53f
[Integrations UI] Added new Integrations panel.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-16 01:16:10 +02:00
Fabio Manganiello 0055acad9d
[UI] Fixed Autocomplete behaviour on empty filter. 2023-10-16 01:12:56 +02:00
Fabio Manganiello c88a9da3e6
[UI] Refactored layout classes. 2023-10-16 01:12:05 +02:00
Fabio Manganiello d1afb88b80
[Reflection] Expand RST extensions from object docstrings too. 2023-10-16 00:21:49 +02:00
Fabio Manganiello 0fe1c2768b
[Fix] Some minor docstring indentation fixes. 2023-10-16 00:20:39 +02:00
Fabio Manganiello 3e00a05301
[CI/CD] Restored awscli process for update-debian-oldstable-packages.
All checks were successful
continuous-integration/drone/push Build is passing
The `s3fs` flow seems to have problems on the Debian oldstable image.
2023-10-14 15:35:11 +02:00
Fabio Manganiello d4c790925b
[CI/CD] Changed order of the S3 bucket mount step in deb builds.
Some checks failed
continuous-integration/drone/push Build is failing
It seems that s3fs may fail if two clients try to mount the same
resource with the same token at the same time.
2023-10-14 15:26:07 +02:00
Fabio Manganiello 1649808efc
[CI/CD] Do all the apt repo operations on a temporary folder.
Some checks failed
continuous-integration/drone/push Build is failing
`update-apt-repo` should first copy the existing repo root on the S3
bucket to a local temporary directory, so we don't do expensive (and
very slow) file operations on the s3fs filesystem.

After everything is done, we should do a current->old, tmp->current, rm old
dance to update the repo on S3.
2023-10-14 15:16:41 +02:00
Fabio Manganiello 465ff87f15
[CI/CD] Replaced awscli with s3fs. 2023-10-14 15:16:40 +02:00
Fabio Manganiello e242b2134e
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-14 12:38:25 +00:00
Fabio Manganiello 3cfd72b649
[UI Nav] Ensure that entities and execute tabs are always on top.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-14 14:38:08 +02:00
Fabio Manganiello 6d53a3f80f
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-14 12:09:13 +00:00
Fabio Manganiello a3643c285e
[UI] A friendlier representation of an integration's name.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-14 14:02:17 +02:00
Fabio Manganiello 0aecb50590
[Entities UI] Don't hide variables with null values.
Otherwise, the `variables` panel will still appear, but empty, and
offering no way of actually removing or resetting those variables.
2023-10-14 14:02:17 +02:00
Fabio Manganiello 01c7d230f1
[Entities UI] Added Expand/Collapse and Hide actions to groups.
Also, replaced all the deprecated `::v-deep` SCSS notations with
`:deep`.
2023-10-14 14:02:17 +02:00
Fabio Manganiello dbe19042bc
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-13 21:13:00 +00:00
Fabio Manganiello 891e05a219
[Execute UI] Added syntax highlight to JSON and shell snippets.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-13 23:12:04 +02:00
Fabio Manganiello 8b9ac59167
parse_numpy should also catch AttributeError.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-12 03:24:03 +02:00
Fabio Manganiello 12f38281e1
[Automatic] Updated UI files
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-12 00:58:53 +00:00
Fabio Manganiello e382ad7650 Invert @ensure_initialized and @action annotations.
Otherwise, we won't be able to access the wrapped function from the
inspection logic.
2023-10-12 00:57:31 +00:00
Fabio Manganiello 8ef67012ed [Drone CI] git push in the build-ui step needs a -f flag. 2023-10-12 00:57:31 +00:00
Fabio Manganiello 0a13b4605e
[Execute panel] Procedures merged into actions.
All checks were successful
continuous-integration/drone/push Build is passing
Plus, a last big refactor/redesign for the panel's components.
2023-10-12 02:49:51 +02:00
Fabio Manganiello e760f8e23a
[Execute panel] Introduced a common Response component.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-11 16:57:04 +02:00
Fabio Manganiello b47e729012
[Execute panel] Added cURL snippet modal.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-11 16:38:38 +02:00
Fabio Manganiello fc21e9740b
[Execute panel] Better rendering of responses and errors.
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-11 15:28:49 +02:00
Fabio Manganiello 21820bb185
Big refactor of the Execute panel.
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-11 14:31:46 +02:00
Fabio Manganiello 1b6e9b4df9
Fixed a broken docstring reference. 2023-10-10 22:18:36 +02:00
Fabio Manganiello ff07623803
Auto-focus the first parameter after selecting an action. 2023-10-10 21:31:14 +02:00
Fabio Manganiello 07f0535504
Migrated Execute panel to the new Autocomplete widget. 2023-10-10 21:13:54 +02:00
Fabio Manganiello a717235453
Added autofocus support to Autocomplete element. 2023-10-10 20:51:09 +02:00
Fabio Manganiello 923eb7cadb
Autocomplete is now its own component. 2023-10-10 18:42:41 +02:00
Fabio Manganiello f6bf9438b9
Several improvements for the Execute panel. 2023-10-10 01:45:35 +02:00
Fabio Manganiello 434855ffdd
A better logic to process relative references in docstrings. 2023-10-10 01:35:37 +02:00
Fabio Manganiello 5726c6985f
Added utility function to get the defining class of a method. 2023-10-10 01:35:01 +02:00
Fabio Manganiello 2af304f478
Replaced radio buttons on the Execute panel with buttons. 2023-10-10 00:40:20 +02:00
Fabio Manganiello 84efef710e
Added Tabs and Tab UI elements. 2023-10-10 00:39:27 +02:00
Fabio Manganiello 0c818d3fe0
.. schema:: JSON arguments should be comma-separated. 2023-10-10 00:38:23 +02:00
Fabio Manganiello b225b056b0
ParseContext should also process kwonlyargs. 2023-10-10 00:37:08 +02:00
Fabio Manganiello 52e353dc14
Expose the wrapped function in @action.
Added a `wrapped` "hidden" parameter to the function returned by the
`@action` decorator.

We need this to access the underlying decorated function when e.g. we
need to access its specs or decorators.
2023-10-09 22:35:08 +02:00
Fabio Manganiello 1e93af86f4
Fixed some broken docstring references.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-09 01:33:45 +02:00
Fabio Manganiello 53bdcb9604
A major rewrite of the inspect plugin.
- The `inspect` plugin and the Sphinx inspection extensions now use the
  same underlying logic.

- Moved all the common inspection logic under
  `platypush.common.reflection`.

- Faster scanning of the available integrations and components through a
  pool of threads.

- Added `doc_url` parameters.

- Migrated events and responses metadata scanning logic.

- Now expanding some custom Sphinx tag instead of returning errors when
  running outside of the Sphinx context - it includes `:class:`,
  `:meth:` and `.. schema::`.
2023-10-09 01:33:45 +02:00
Fabio Manganiello 9acd71944c
Skip numpy types serialization errors on Message.Encoder. 2023-10-09 01:33:45 +02:00
Fabio Manganiello e5a5ac5ffb
Added doc_url parameter to integration metadata. 2023-10-09 01:33:45 +02:00
Fabio Manganiello d872835093
New API to check if a table class exists before defining it.
- Check if it's part of the metadata through a function call rather than
  checking `Base.metadata` in every single module.

- Make it possible to override them (mostly for doc generation logic
  that needs to be able to import those classes).

- Make it possible to extend them.
2023-10-09 01:33:44 +02:00
Fabio Manganiello 608844ca0c
[WIP] Large refactor of the inspection plugin and models. 2023-10-09 01:33:44 +02:00
Fabio Manganiello 841643f3ff
Added cachedir to configuration. 2023-10-09 01:33:44 +02:00
Fabio Manganiello 40557f5d5d
Replaced one more occurrence of <type> | None syntax. 2023-10-09 01:33:44 +02:00
Fabio Manganiello 4da3c13976
First WIP commit for the new Integrations panel. 2023-10-09 01:33:44 +02:00
Fabio Manganiello 4d52fd35b9
Skip None responses in the RSS plugin.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-04 22:08:11 +02:00
Fabio Manganiello 40d3ad1150
Removed <type> | None type hints.
All checks were successful
continuous-integration/drone/push Build is passing
They break on Python < 3.10.
2023-10-03 01:15:13 +02:00
Fabio Manganiello fd7037d048
Added git checkout and rebase commands to sync-stable-branch step.
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-01 23:31:46 +02:00
Fabio Manganiello ae66e9c205 Merge pull request '[#317] Added Drone step to sync the stable branch on tag' (#332) from 317-ci-cd-automation-for-stable-branch into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #332
2023-10-01 23:19:22 +02:00
Fabio Manganiello 98b51362e9
[#317] Added Drone step to sync the stable branch on tag.
All checks were successful
continuous-integration/drone/push Build is passing
Closes: #317
2023-10-01 23:17:53 +02:00
Fabio Manganiello 3086dd86fc
LINT+Black+stability fixes for some plugins that hadn't been touched in a while.
All checks were successful
continuous-integration/drone/push Build is passing
- media.mplayer
- media.omxplayer
- media.vlc
- music.mpd
- music.snapcast
2023-10-01 22:55:06 +02:00
Fabio Manganiello 2aefc4e5c8
Several improvements for the Google integrations.
1. Improved documentation. Every plugin now reports the exact steps to
   get the integration up and running with the right API scopes.

2. All Google plugins now have a standard process to get (and reuse) the
   client secret. Except for PubSub, Translate and Maps (which have
   their own flows), all the Google plugins now read the client secrets
   from `<WORKDIR>/credentials/google/client_secret.json` by default.

3. Black/LINT for some of those plugins, which hadn't been touched in a
   while.

4. The interface to pass API scopes is now leaner. It's now possible to
   pass a scope directly as e.g. `calendar.readonly` rather than
   `https://www.googleapis.com/auth/calendar.readonly`.

5. Improved the logic to retrieve the right scope tokens file. If e.g.
   an integration requires the role `A`, and a credentials file exists
   for the roles `A` and `B`, then this file will be used rather than
   prompting the user to authenticate again.
2023-10-01 15:37:20 +02:00
Fabio Manganiello 5ca3757834
A more readable configuration for the calendar plugin.
The old type configuration
(`platypush.plugins.calendar.name.CalendarNamePlugin`) is a bit clunky.

Instead, since the type will always be a plugin, we should encourage
the use of `calendar.name` directly to identify the type.
2023-10-01 01:09:15 +02:00
Fabio Manganiello 966a6ce29e
httplib2 should be an explicit dependency for Google integrations.
Plus, some misc LINT/Black chores.
2023-10-01 00:52:59 +02:00
Fabio Manganiello a7bb81553c
Regex fix.
All checks were successful
continuous-integration/drone/push Build is passing
2023-09-30 15:11:09 +02:00
Fabio Manganiello 9e489bb5cf
Propagate the default/required properties of a parameter upon merge.
All checks were successful
continuous-integration/drone/push Build is passing
2023-09-30 14:57:11 +02:00
Fabio Manganiello 1732bfa82c
Fixed _default_docstring regex. 2023-09-30 14:36:08 +02:00
Fabio Manganiello 532f5479b3
Added full YAML example for chat.irc configuration. 2023-09-30 14:34:54 +02:00
Fabio Manganiello ecffbf29bf
Skip vararg/varkw parameters from the config snippet.
All checks were successful
continuous-integration/drone/push Build is passing
2023-09-30 13:53:33 +02:00
Fabio Manganiello acb40bd5fd
The test step should also install all dependencies via apk add.
Some checks failed
continuous-integration/drone/push Build is failing
2023-09-30 13:36:28 +02:00
Fabio Manganiello 4f5ccda353
Better documentation for the calendar plugin. 2023-09-30 13:31:41 +02:00
Fabio Manganiello 7bd721e6a4
Added missing pip install parameter. 2023-09-30 13:31:04 +02:00
Fabio Manganiello c82f7bbfbe
Ignore the default docstring text for __init__.
If no docstring is specified for a constructor, Python usually pre-fills
a standard text - "Initialize self. See help(type(self))".

We don't need this default text in our plugins documentation.
2023-09-30 13:29:49 +02:00
Fabio Manganiello d030e2b8c7
Install all the deps via apk add on Alpine in the build-docs step. 2023-09-30 13:29:10 +02:00
Fabio Manganiello 15d06fa5c2
Improved docstring parser logic.
Some checks failed
continuous-integration/drone/push Build is failing
2023-09-30 12:35:31 +02:00
Fabio Manganiello e6f05dfe07 Merge pull request '[#311] Logic to automatically generate the documentation for the dependencies of the integrations' (#330) from 311/auto-generate-deps-docs into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #330
2023-09-30 02:31:43 +02:00
snyk-bot 46c40f6fa6
fix: upgrade sass from 1.64.2 to 1.65.1
Snyk has created this PR to upgrade sass from 1.64.2 to 1.65.1.

See this package in npm:
https://www.npmjs.com/package/sass

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-09-01 23:15:47 +00:00
snyk-bot 7cda9954d4
fix: upgrade vue-router from 4.1.2 to 4.2.3
Snyk has created this PR to upgrade vue-router from 4.1.2 to 4.2.3.

See this package in npm:
https://www.npmjs.com/package/vue-router

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-07-27 02:01:02 +00:00
snyk-bot 26c9694664
fix: upgrade core-js from 3.23.4 to 3.31.1
Snyk has created this PR to upgrade core-js from 3.23.4 to 3.31.1.

See this package in npm:
https://www.npmjs.com/package/core-js

See this project in Snyk:
https://app.snyk.io/org/blacklight/project/96bfd125-5816-4d9e-83c6-94d1569ab0f1?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-07-27 02:00:57 +00:00
1602 changed files with 68445 additions and 30717 deletions

View file

@ -8,6 +8,10 @@ volumes:
host: host:
path: /opt/docs/platypush path: /opt/docs/platypush
- name: repos
host:
path: /opt/repos/platypush
steps: steps:
### ###
@ -23,19 +27,7 @@ steps:
from_secret: ssh_privkey from_secret: ssh_privkey
commands: commands:
- apk add --update --no-cache git openssh - . .drone/github-mirror.sh
- mkdir -p ~/.ssh
- echo $SSH_PUBKEY > ~/.ssh/id_rsa.pub
- |
cat <<EOF > ~/.ssh/id_rsa
$SSH_PRIVKEY
EOF
- chmod 0600 ~/.ssh/id_rsa
- ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null
- git config --global --add safe.directory $PWD
- git remote add github git@github.com:/BlackLight/platypush.git
- git pull --rebase github "$(git branch | head -1 | awk '{print $2}')" || echo "No such branch on Github"
- git push --all -v github
### ###
### Rebuild the docs ### Rebuild the docs
@ -48,24 +40,7 @@ steps:
path: /docs path: /docs
commands: commands:
- echo "Installing required build dependencies" - . .drone/rebuild-docs.sh
- apk add --update --no-cache make py3-sphinx py3-pip py3-paho-mqtt py3-yaml
- pip install -U hid sphinx-rtd-theme sphinx-book-theme
- pip install .
- mkdir -p /docs/current
- export APPDIR=$PWD
- rm -rf "$APPDIR/docs/build"
- echo "Building the updated documentation"
- cd "$APPDIR/docs"
- make html
- rm -f config*.yaml
- cd "$APPDIR"
- echo "Copying the new documentation files to the target folder"
- mv -v "$APPDIR/docs/build" /docs/new
- cd /docs
- mv current old
- mv new current
- rm -rf old
when: when:
event: event:
@ -76,15 +51,9 @@ steps:
### ###
- name: tests - name: tests
image: python:3.11-alpine image: alpine
commands: commands:
- apk add --update --no-cache redis - . .drone/run-tests.sh
- apk add --update --no-cache --virtual build-base g++ rust linux-headers
- pip install -U pip
- pip install .
- pip install -r requirements-tests.txt
- apk del build-base g++ rust linux-headers
- pytest tests
### ###
### Rebuild the UI files ### Rebuild the UI files
@ -113,68 +82,70 @@ steps:
- tests - tests
commands: commands:
- apk add --update --no-cache git - . .drone/build-ui.sh
# Backup the original git configuration before changing attributes
- export GIT_CONF=$PWD/.git/config
- cp $GIT_CONF /tmp/git.config.orig
- git config --global --add safe.directory $PWD
- cd platypush/backend/http/webapp
- |
if [ $(git log --pretty=oneline $DRONE_COMMIT_AFTER...$DRONE_COMMIT_BEFORE . | wc -l) -eq 0 ]; then
echo "No UI changes detected, skipping build"
exit 0
fi
- |
if [ "$(git log --pretty=format:%s HEAD...HEAD~1 | head -1)" == "[Automatic] Updated UI files" ]; then
echo "UI changes have already been committed, skipping build"
exit 0
fi
- rm -rf node_modules
- npm install
- npm run build
- |
if [ $(git status --porcelain dist | wc -l) -eq 0 ]; then
echo "No build files have been changed"
exit 0
fi
- apk add --update --no-cache bash gnupg openssh
- mkdir -p ~/.ssh
- |
cat <<EOF | gpg --import --armor
$PGP_KEY
EOF
- echo $SSH_PUBKEY > ~/.ssh/id_rsa.pub
- |
cat <<EOF > ~/.ssh/id_rsa
$SSH_PRIVKEY
EOF
- chmod 0600 ~/.ssh/id_rsa
- ssh-keyscan git.platypush.tech >> ~/.ssh/known_hosts 2>/dev/null
- git config user.name "Platypush CI/CD Automation"
- git config user.email "admin@platypush.tech"
- git config commit.gpgsign true
- git config user.signingkey $PGP_KEY_ID
- git add dist
- git commit dist -S -m "[Automatic] Updated UI files" --no-verify
- git remote rm origin
- git remote add origin git@git.platypush.tech:platypush/platypush.git
- git push origin master
# Restore the original git configuration
- mv /tmp/git.config.orig $GIT_CONF
### ###
### Update the Arch packages ### Regenerate the components.json cache
### ###
- name: update-arch-packages - name: update-components-cache
image: alpine
environment:
SSH_PUBKEY:
from_secret: ssh_pubkey
SSH_PRIVKEY:
from_secret: ssh_privkey
PGP_KEY:
from_secret: pgp_key
PGP_KEY_ID:
from_secret: pgp_key_id
when:
branch:
- master
event:
- push
depends_on:
- build-ui
commands:
- . .drone/update-components-cache.sh
###
### Update the Arch git package
### Note: This is probably no longer required, as the platypush-git PKGBUILD
### #now includes a dynamic pkgver() function.
### See https://aur.archlinux.org/packages/platypush-git#comment-982845
###
# - name: update-arch-git-package
# image: python:3.11-alpine
# environment:
# WORKDIR: /tmp/workdir
# SSH_PUBKEY:
# from_secret: ssh_pubkey
# SSH_PRIVKEY:
# from_secret: ssh_privkey
#
# when:
# branch:
# - master
# event:
# - push
#
# depends_on:
# - update-components-cache
#
# commands:
# - . .drone/update-arch-git-package.sh
###
### Update the Arch stable package
###
- name: update-arch-stable-package
image: python:3.11-alpine image: python:3.11-alpine
environment: environment:
WORKDIR: /tmp/workdir WORKDIR: /tmp/workdir
@ -184,85 +155,11 @@ steps:
from_secret: ssh_privkey from_secret: ssh_privkey
when: when:
branch:
- master
event: event:
- push - tag
depends_on:
- build-ui
commands: commands:
- echo "-- Installing dependencies" - . .drone/update-arch-stable-package.sh
- apk add --update --no-cache curl git openssh pacman sudo
- echo "--- Parsing metadata"
- git config --global --add safe.directory $PWD
- git pull --rebase origin master --tags
- export VERSION=$(python setup.py --version)
- export HEAD=$(git log --pretty=format:%h HEAD...HEAD~1 | head -1)
- export GIT_VERSION="$VERSION.r$(git log --pretty=oneline HEAD...v$VERSION | wc -l).$HEAD"
- export TAG_URL="https://git.platypush.tech/platypush/platypush/archive/v$VERSION.tar.gz"
- echo "--- Preparing environment"
- mkdir -p ~/.ssh
- echo $SSH_PUBKEY > ~/.ssh/id_rsa.pub
- |
cat <<EOF > ~/.ssh/id_rsa
$SSH_PRIVKEY
EOF
- chmod 0600 ~/.ssh/id_rsa
- ssh-keyscan git.platypush.tech >> ~/.ssh/known_hosts 2>/dev/null
- ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hosts 2>/dev/null
- adduser -u 1000 -D build
- mkdir -p $WORKDIR
- echo "--- Updating Arch git version"
- export PKGDIR=$WORKDIR/git
- git clone ssh://aur@aur.archlinux.org/platypush-git.git $PKGDIR
- git config --global --add safe.directory $PKGDIR
- chown -R build $PKGDIR
- cd $PKGDIR
- |
sed -i 'PKGBUILD' -r \
-e "s/^pkgver=.*/pkgver=$GIT_VERSION/" \
-e "s/^pkgrel=.*/pkgrel=1/" \
- sudo -u build makepkg --printsrcinfo > .SRCINFO
- export FILES_CHANGED=$(git status --porcelain --untracked-files=no | wc -l)
- |
if [ $FILES_CHANGED -gt 0 ]; then
echo "--- Pushing git package version $GIT_VERSION"
git commit -a -m '[Automatic] Package update'
git push origin master
fi
- echo "--- Updating Arch stable version"
- export PKGDIR=$WORKDIR/stable
- git clone ssh://aur@aur.archlinux.org/platypush.git $PKGDIR
- git config --global --add safe.directory $PKGDIR
- chown -R build $PKGDIR
- cd $PKGDIR
- export RELEASED_VERSION=$(grep -e '^pkgver=' PKGBUILD | sed -r -e 's/^pkgver=(.*)\s*/\1/')
- |
if [ "$RELEASED_VERSION" == "$VERSION" ]; then
exit 0
fi
- export TAG_CHECKSUM=$(curl --silent "$TAG_URL" | sha512sum | awk '{print $1}')
- |
sed -i 'PKGBUILD' -r \
-e "s/^pkgver=.*/pkgver=$VERSION/" \
-e "s/^pkgrel=.*/pkgrel=1/" \
-e "s/^sha512sums=.*/sha512sums=('$TAG_CHECKSUM')/"
- sudo -u build makepkg --printsrcinfo > .SRCINFO
- export FILES_CHANGED=$(git status --porcelain --untracked-files=no | wc -l)
- |
if [ $FILES_CHANGED -gt 0 ]; then
echo "--- Pushing stable package version $VERSION"
git commit -a -m '[Automatic] Package update'
git push origin master
fi
### ###
### Update the Debian (stable) packages ### Update the Debian (stable) packages
@ -270,17 +167,15 @@ steps:
- name: update-debian-stable-packages - name: update-debian-stable-packages
image: debian:stable image: debian:stable
volumes:
- name: repos
path: /repos
environment: environment:
DEB_VERSION: stable DEB_VERSION: stable
WORKDIR: /tmp/workdir WORKDIR: /tmp/workdir
APT_ROOT: /repos/apt
PKG_NAME: platypush PKG_NAME: platypush
S3_URL: s3://platypush-pkg/apt
AWS_ENDPOINT_URL: https://s3.nl-ams.scw.cloud
AWS_DEFAULT_REGION: nl-ams
AWS_ACCESS_KEY_ID:
from_secret: aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: aws_secret_access_key
when: when:
branch: branch:
@ -289,74 +184,10 @@ steps:
- push - push
depends_on: depends_on:
- build-ui - update-components-cache
commands: commands:
- echo "-- Installing dependencies" - . .drone/update-deb-packages.sh
- apt update
- apt install -y curl dpkg-dev gpg git python3 python3-pip
- pip install awscli --break-system-packages
- echo "-- Copying source directory"
- mkdir -p "$WORKDIR"
- export SRCDIR="$WORKDIR/src"
- cp -r "$PWD" "$SRCDIR"
- cd "$SRCDIR"
- echo "--- Parsing metadata"
- git config --global --add safe.directory $PWD
- git pull --rebase origin master --tags
- export VERSION=$(python3 setup.py --version)
- export GIT_VERSION="$VERSION-$(( $(git log --pretty=oneline HEAD...v$VERSION | wc -l) + 1))"
- export GIT_BUILD_DIR="$WORKDIR/$${PKG_NAME}_$${GIT_VERSION}_all"
- export GIT_DEB="$WORKDIR/$${PKG_NAME}_$${GIT_VERSION}_all.deb"
- echo "--- Building git package"
- pip install --prefix="$GIT_BUILD_DIR/usr" --no-cache --no-deps .
- |
find "$GIT_BUILD_DIR" -name "site-packages" | while read dir; do
base="$(dirname "$dir")"
mv "$dir" "$base/dist-packages"
done
- mkdir -p "$GIT_BUILD_DIR/DEBIAN"
- |
cat <<EOF > "$GIT_BUILD_DIR/DEBIAN/control"
Package: $PKG_NAME
Version: $GIT_VERSION
Maintainer: Fabio Manganiello <fabio@platypush.tech>
Depends: $(cat platypush/install/requirements/debian.txt | tr '\n' ',' | sed -re 's/,$//' -e 's/,/, /g')
Architecture: all
Homepage: https://platypush.tech
Description: Universal command executor and automation hub.
EOF
- dpkg --build "$GIT_BUILD_DIR"
- echo "--- Pushing package to the S3 bucket"
- aws s3 cp "$GIT_DEB" "$S3_URL/pool/$DEB_VERSION/dev/"
# If main/all/Packages doesn't exist, then we should create the first main release
- export PKGURL="https://apt.platypush.tech/dists/$DEB_VERSION/main/all/Packages"
- |
[ -z "$UPDATE_STABLE_PKG" ] &&
curl -ILs -o /dev/null -w "%{http_code}" "$PKGURL" |
grep -e '^4' >/dev/null && export UPDATE_STABLE_PKG=1
# If the published release version differs from the current one, then we should publish a new main release
- |
if [ -z "$UPDATE_STABLE_PKG" ]; then
RELEASED_VERSION=$(curl -s "$PKGURL" | grep -e '^Version: ' | head -1 | awk '{print $2}' | cut -d- -f 1)
[ "$RELEASED_VERSION" != "$VERSION" ] && export UPDATE_STABLE_PKG=1
fi
# Don't proceed and update the main release if it hasn't changed
- |
if [ -z "$UPDATE_STABLE_PKG" ]; then
exit 0
fi
- echo "--- Updating main package"
- aws s3 cp "$GIT_DEB" "$S3_URL/pool/$DEB_VERSION/main/$${PKG_NAME}_$${VERSION}-1_all.deb"
### ###
### Update the Debian (oldstable) packages ### Update the Debian (oldstable) packages
@ -364,17 +195,15 @@ steps:
- name: update-debian-oldstable-packages - name: update-debian-oldstable-packages
image: debian:oldstable image: debian:oldstable
volumes:
- name: repos
path: /repos
environment: environment:
DEB_VERSION: oldstable DEB_VERSION: oldstable
WORKDIR: /tmp/workdir WORKDIR: /tmp/workdir
APT_ROOT: /repos/apt
PKG_NAME: platypush PKG_NAME: platypush
S3_URL: s3://platypush-pkg/apt
AWS_ENDPOINT_URL: https://s3.nl-ams.scw.cloud
AWS_DEFAULT_REGION: nl-ams
AWS_ACCESS_KEY_ID:
from_secret: aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: aws_secret_access_key
when: when:
branch: branch:
@ -383,74 +212,38 @@ steps:
- push - push
depends_on: depends_on:
- build-ui - update-components-cache
commands: commands:
- echo "-- Copying source directory" - . .drone/update-deb-packages.sh
- mkdir -p "$WORKDIR"
- export SRCDIR="$WORKDIR/src"
- cp -r "$PWD" "$SRCDIR"
- cd "$SRCDIR"
- echo "-- Installing dependencies" ###
- apt update ### Update the Ubuntu (latest) packages
- apt install -y curl dpkg-dev gpg git python3 python3-pip ###
- pip install awscli
- echo "--- Parsing metadata" - name: update-ubuntu-packages
- git config --global --add safe.directory $PWD image: ubuntu:latest
- git pull --rebase origin master --tags volumes:
- export VERSION=$(python3 setup.py --version) - name: repos
- export GIT_VERSION="$VERSION-$(( $(git log --pretty=oneline HEAD...v$VERSION | wc -l) + 1))" path: /repos
- export GIT_BUILD_DIR="$WORKDIR/$${PKG_NAME}_$${GIT_VERSION}_all"
- export GIT_DEB="$WORKDIR/$${PKG_NAME}_$${GIT_VERSION}_all.deb"
- echo "--- Building git package" environment:
- pip install --prefix="$GIT_BUILD_DIR/usr" --no-cache --no-deps . DEB_VERSION: ubuntu
- | WORKDIR: /tmp/workdir
find "$GIT_BUILD_DIR" -name "site-packages" | while read dir; do APT_ROOT: /repos/apt
base="$(dirname "$dir")" PKG_NAME: platypush
mv "$dir" "$base/dist-packages"
done
- mkdir -p "$GIT_BUILD_DIR/DEBIAN" when:
- | branch:
cat <<EOF > "$GIT_BUILD_DIR/DEBIAN/control" - master
Package: $PKG_NAME event:
Version: $GIT_VERSION - push
Maintainer: Fabio Manganiello <fabio@platypush.tech>
Depends: $(cat platypush/install/requirements/debian.txt | tr '\n' ',' | sed -re 's/,$//' -e 's/,/, /g')
Architecture: all
Homepage: https://platypush.tech
Description: Universal command executor and automation hub.
EOF
- dpkg --build "$GIT_BUILD_DIR"
- echo "--- Pushing package to the S3 bucket" depends_on:
- aws s3 cp "$GIT_DEB" "$S3_URL/pool/$DEB_VERSION/dev/" - update-components-cache
# If main/all/Packages doesn't exist, then we should create the first main release commands:
- export PKGURL="https://apt.platypush.tech/dists/$DEB_VERSION/main/all/Packages" - . .drone/update-deb-packages.sh
- |
[ -z "$UPDATE_STABLE_PKG" ] &&
curl -ILs -o /dev/null -w "%{http_code}" "$PKGURL" |
grep -e '^4' >/dev/null && export UPDATE_STABLE_PKG=1
# If the published release version differs from the current one, then we should publish a new main release
- |
if [ -z "$UPDATE_STABLE_PKG" ]; then
RELEASED_VERSION=$(curl -s "$PKGURL" | grep -e '^Version: ' | head -1 | awk '{print $2}' | cut -d- -f 1)
[ "$RELEASED_VERSION" != "$VERSION" ] && export UPDATE_STABLE_PKG=1
fi
# Don't proceed and update the main release if it hasn't changed
- |
if [ -z "$UPDATE_STABLE_PKG" ]; then
exit 0
fi
- echo "--- Updating main package"
- aws s3 cp "$GIT_DEB" "$S3_URL/pool/$DEB_VERSION/main/$${PKG_NAME}_$${VERSION}-1_all.deb"
### ###
### Updates the APT repository after new packages have been pushed ### Updates the APT repository after new packages have been pushed
@ -458,16 +251,13 @@ steps:
- name: update-apt-repo - name: update-apt-repo
image: debian:stable image: debian:stable
privileged: true # Required to use the FUSE module for s3fs volumes:
- name: repos
path: /repos
environment: environment:
S3_BUCKET: platypush-pkg REPOS_ROOT: /repos
BUCKET_MNT: /mnt/s3 APT_ROOT: /repos/apt
AWS_ENDPOINT_URL: https://s3.nl-ams.scw.cloud
AWS_DEFAULT_REGION: nl-ams
AWS_ACCESS_KEY_ID:
from_secret: aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: aws_secret_access_key
PGP_PUBKEY: PGP_PUBKEY:
from_secret: apt_pgp_pub_key from_secret: apt_pgp_pub_key
PGP_PRIVKEY: PGP_PRIVKEY:
@ -482,97 +272,10 @@ steps:
depends_on: depends_on:
- update-debian-stable-packages - update-debian-stable-packages
- update-debian-oldstable-packages - update-debian-oldstable-packages
- update-ubuntu-packages
commands: commands:
- echo "-- Installing dependencies" - . .drone/update-apt-repo.sh
- apt update
- apt install -y s3fs dpkg-dev gpg
- echo "-- Mounting the S3 bucket"
- mkdir -p "$BUCKET_MNT"
- s3fs "$S3_BUCKET" "$BUCKET_MNT" -o url="$AWS_ENDPOINT_URL"
- export APT_ROOT="$BUCKET_MNT/apt"
- echo "-- Cleaning up older apt releases"
- |
find "$APT_ROOT/pool" -mindepth 2 -maxdepth 2 -type d | while read reldir; do
pkg_to_remove=$(( $(ls "$reldir"/*.deb | wc -l) - 1 ))
[ $pkg_to_remove -le 0 ] && continue
ls "$reldir"/*.deb | sort -V | head -n$pkg_to_remove | xargs rm -f
done
- echo "-- Updating Packages files"
- |
echo "stable\noldstable" | while read distro; do
echo "main\ndev" | while read branch; do
branch_dir="$APT_ROOT/pool/$distro/$branch"
[ -d "$branch_dir" ] || continue
dist_dir="$APT_ROOT/dists/$distro/$branch/all"
mkdir -p "$dist_dir"
pkg_file="$dist_dir/Packages"
dpkg-scanpackages --arch all "$branch_dir" > "$pkg_file"
sed -i "$pkg_file" -re "s|^Filename: $APT_ROOT/|Filename: |"
cat "$pkg_file" | gzip -9 > "$pkg_file.gz"
done
done
- echo "-- Updating Release files"
- |
add_hashes() {
dist_dir=$1
hash_cmd=$2
hash_label=$3
echo "$hash_label:"
find "$dist_dir" -name 'Packages*' | while read file; do
basename="$(echo "$file" | sed -r -e "s|^$dist_dir/||")"
hash="$($hash_cmd "$file" | cut -d" " -f1)"
size="$(wc -c < $file)"
echo " $hash $size $basename"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-i386/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-amd64/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-armel/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-armhf/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-arm64/|')"
done
}
echo "stable\noldstable" | while read distro; do
dist_dir="$APT_ROOT/dists/$distro"
components=$(find "$dist_dir" -name Packages | awk -F '/' '{print $(NF-2)}' | uniq | tr '\n' ' ')
release_file="$dist_dir/Release"
cat <<EOF > "$release_file"
Origin: Platypush repository
Label: Platypush
Suite: $distro
Codename: $distro
Architectures: i386 amd64 armel armhf arm64
Components: $components
Description: The official APT repository for Platypush
Date: $(date -Ru)
EOF
add_hashes "$dist_dir" "md5sum" "MD5Sum" >> "$release_file"
add_hashes "$dist_dir" "sha1sum" "SHA1" >> "$release_file"
add_hashes "$dist_dir" "sha256sum" "SHA256" >> "$release_file"
done
- echo "-- Importing and refreshing PGP key"
- echo "$PGP_PUBKEY" > "$APT_ROOT/pubkey.txt"
- export PGP_KEYID=$(echo "$PGP_PUBKEY" | gpg --with-colons --import-options show-only --import --fingerprint | grep -e '^fpr:' | head -1 | awk -F ':' '{print $(NF - 1)}')
- |
cat <<EOF | gpg --import --armor
$PGP_PRIVKEY
EOF
- echo "-- Signing Release files"
- |
find "$APT_ROOT/dists" -type f -name Release | while read file; do
dirname="$(dirname "$file")"
cat "$file" | gpg -q --default-key "$PGP_KEYID" -abs > "$file.gpg"
cat "$file" | gpg -q --default-key "$PGP_KEYID" -abs --clearsign > "$dirname/InRelease"
done
### ###
### Update the RPM (stable) packages ### Update the RPM (stable) packages
@ -580,19 +283,16 @@ steps:
- name: update-rpm-repo - name: update-rpm-repo
image: fedora image: fedora
privileged: true # Required to use the FUSE module for s3fs volumes:
- name: repos
path: /repos
environment: environment:
RPM_VERSION: stable RPM_VERSION: stable
REPOS_ROOT: /repos
RPM_ROOT: /repos/rpm
WORKDIR: /tmp/workdir WORKDIR: /tmp/workdir
PKG_NAME: platypush PKG_NAME: platypush
S3_BUCKET: platypush-pkg
BUCKET_MNT: /mnt/s3
AWS_ENDPOINT_URL: https://s3.nl-ams.scw.cloud
AWS_DEFAULT_REGION: nl-ams
AWS_ACCESS_KEY_ID:
from_secret: aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: aws_secret_access_key
PGP_PUBKEY: PGP_PUBKEY:
from_secret: rpm_pgp_pub_key from_secret: rpm_pgp_pub_key
PGP_PRIVKEY: PGP_PRIVKEY:
@ -605,179 +305,17 @@ steps:
- push - push
depends_on: depends_on:
- build-ui - update-components-cache
commands: commands:
- echo "-- Installing dependencies" - . .drone/update-rpm-repo.sh
- yum install -y createrepo rpm-build rpm-sign gpg wget yum-utils git python python-pip s3fs-fuse
- echo "-- Copying source directory"
- mkdir -p "$WORKDIR"
- export SRCDIR="$WORKDIR/src"
- cp -r "$PWD" "$SRCDIR"
- cd "$SRCDIR"
- echo "-- Mounting the S3 bucket"
- mkdir -p "$BUCKET_MNT"
- s3fs "$S3_BUCKET" "$BUCKET_MNT" -o url="$AWS_ENDPOINT_URL"
- export RPM_ROOT="$BUCKET_MNT/rpm"
- mkdir -p "$RPM_ROOT"
- echo "--- Parsing metadata"
- git config --global --add safe.directory $PWD
- git pull --rebase origin master --tags
- export VERSION=$(python3 setup.py --version)
- export RELNUM=$(git log --pretty=oneline HEAD...v$VERSION | wc -l)
- export SPECFILE="$WORKDIR/$PKG_NAME.spec"
- export BUILD_DIR="$WORKDIR/build"
- export TMP_RPM_ROOT="$WORKDIR/repo"
- export SRC_URL="https://git.platypush.tech/platypush/platypush/archive/master.tar.gz"
- echo "--- Creating git package spec"
- |
cat <<EOF > $SPECFILE
Summary: Universal command executor and automation hub.
Name: $PKG_NAME-git
Version: $VERSION
Release: $RELNUM
URL: https://platypush.tech
Group: System
License: MIT
Packager: Fabio Manganiello <fabio@platypush.tech>
Source: $SRC_URL
Requires: $(cat platypush/install/requirements/fedora.txt | tr '\n' ' ')
Conflicts: $PKG_NAME
Prefix: %{_prefix}
BuildRoot: %{_tmppath}/%{name}-root
%description
Universal command executor and automation hub.
%install
mkdir -p %{buildroot}/
cp -r "$BUILD_DIR"/* %{buildroot}/
%clean
%files
/usr/bin/*
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush-$VERSION.dist-info
%changelog
* $(date +'%a %b %d %Y') admin <admin@platypush.tech>
- [Automatic] Release $VERSION-$RELNUM
EOF
- echo "--- Building git package"
- mkdir -p "$BUILD_DIR"
- pip install --prefix="$BUILD_DIR/usr" --no-cache --no-deps .
- rpmbuild --target "noarch" -bb "$SPECFILE"
- echo "--- Copying the new RPM package"
- mkdir -p "$TMP_RPM_ROOT"
- cp "$HOME/rpmbuild/RPMS/noarch/$PKG_NAME-git-$VERSION-$RELNUM.noarch.rpm" "$TMP_RPM_ROOT"
- echo "--- Checking the latest released stable version"
- export LATEST_STABLE_PKG=$(ls -rt "$RPM_ROOT/$PKG_NAME"*.rpm 2>/dev/null | grep -v "$PKG_NAME-git" | tail -1)
- |
if [ -z "$LATEST_STABLE_PKG" ]; then
# If not stable release is available, then create one
export UPDATE_STABLE_PKG=1
else
# Otherwise, create a new release if the reported version on the repo is different
# from the latest released version.
export LATEST_STABLE_VERSION=$(basename $LATEST_STABLE_PKG | cut -d- -f 2)
if [ "$VERSION" != "$LATEST_STABLE_VERSION" ]; then
export UPDATE_STABLE_PKG=1
else
# If the version has remained the same, then simply copy the existing RPM to the
# new repository directory.
echo "Copying the existing release $LATEST_STABLE_VERSION to the new repository"
cp "$LATEST_STABLE_PKG" "$TMP_RPM_ROOT"
fi
fi
# If a new stable release is required, build another RPM
- |
if [ -n "$UPDATE_STABLE_PKG" ]; then
export RELNUM=1
export SRC_URL="https://git.platypush.tech/platypush/platypush/archive/v$VERSION.tar.gz"
cat <<EOF > $SPECFILE
Summary: Universal command executor and automation hub.
Name: $PKG_NAME
Version: $VERSION
Release: $RELNUM
URL: https://platypush.tech
Group: System
License: MIT
Packager: Fabio Manganiello <fabio@platypush.tech>
Source: $SRC_URL
Requires: $(cat platypush/install/requirements/fedora.txt | tr '\n' ' ')
Conflicts: $PKG_NAME-git
Prefix: %{_prefix}
BuildRoot: %{_tmppath}/%{name}-root
%description
Universal command executor and automation hub.
%install
mkdir -p %{buildroot}/
cp -r "$BUILD_DIR"/* %{buildroot}/
%clean
%files
/usr/bin/*
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush-$VERSION.dist-info
%changelog
* $(date +'%a %b %d %Y') admin <admin@platypush.tech>
- [Automatic] Release $VERSION-$RELNUM
EOF
echo "--- Building package for stable release $VERSION"
rpmbuild --target "noarch" -bb "$SPECFILE"
cp "$HOME/rpmbuild/RPMS/noarch/$PKG_NAME-$VERSION-$RELNUM.noarch.rpm" "$TMP_RPM_ROOT"
fi
- echo "--- Importing the repository keys"
- |
cat <<EOF | gpg --import --armor
$PGP_PRIVKEY
EOF
- export PGP_KEYID=$(echo "$PGP_PUBKEY" | gpg --with-colons --import-options show-only --import --fingerprint | grep -e '^fpr:' | head -1 | awk -F ':' '{print $(NF - 1)}')
- |
cat <<EOF > $HOME/.rpmmacros
%signature gpg
%_gpg_name $PGP_KEYID
EOF
- echo "--- Signing the new RPM packages"
- rpm --addsign "$TMP_RPM_ROOT"/*.rpm
- echo "--- Creating a new copy of the RPM repository"
- createrepo "$TMP_RPM_ROOT"
- gpg --detach-sign --armor "$TMP_RPM_ROOT/repodata/repomd.xml"
- echo "--- Updating the S3 bucket"
- export NEW_RPM_ROOT="$BUCKET_MNT/rpm_new"
- export OLD_RPM_ROOT="$BUCKET_MNT/rpm_old"
- cp -r "$TMP_RPM_ROOT" "$NEW_RPM_ROOT"
- rm -rf "$TMP_RPM_ROOT"
- mv "$RPM_ROOT" "$OLD_RPM_ROOT"
- mv "$NEW_RPM_ROOT" "$RPM_ROOT"
- rm -rf "$OLD_RPM_ROOT"
### ###
### Updates the pip package upon new releases ### Updates the pip package upon new releases
### ###
- name: update-pip-package - name: update-pip-package
image: python:3.11-alpine image: alpine
environment: environment:
TWINE_USERNAME: TWINE_USERNAME:
from_secret: pypi_user from_secret: pypi_user
@ -793,9 +331,7 @@ steps:
- docs - docs
commands: commands:
- apk add --update --no-cache py3-twine - . .drone/update-pip-package.sh
- python setup.py sdist bdist_wheel
- twine upload dist/platypush-$(python setup.py --version).tar.gz
### ###
### Checkpoint step that waits for all the package update ### Checkpoint step that waits for all the package update
@ -812,7 +348,7 @@ steps:
- push - push
depends_on: depends_on:
- update-arch-packages # - update-arch-git-package
- update-rpm-repo - update-rpm-repo
- update-apt-repo - update-apt-repo
@ -835,6 +371,7 @@ steps:
depends_on: depends_on:
- update-pip-package - update-pip-package
- update-arch-stable-package
commands: commands:
- apk add --update --no-cache curl - apk add --update --no-cache curl

46
.drone/build-ui.sh Executable file
View file

@ -0,0 +1,46 @@
#!/bin/sh
export SRCDIR="$PWD"
export WEBAPP_DIR="$SRCDIR/platypush/backend/http/webapp"
export SKIPCI="$PWD/.skipci"
rm -rf "$SKIPCI"
. .drone/macros/configure-git.sh
cd "$WEBAPP_DIR"
if [ $(git log --pretty=oneline $DRONE_COMMIT_AFTER...$DRONE_COMMIT_BEFORE . | wc -l) -eq 0 ]; then
echo "No UI changes detected, skipping build"
exit 0
fi
if [ "$(git log --pretty=format:%s HEAD...HEAD~1 | head -1)" == "[Automatic] Updated UI files" ]; then
echo "UI changes have already been committed, skipping build"
exit 0
fi
rm -rf dist node_modules
npm install
npm run build
if [ $(git status --porcelain dist | wc -l) -eq 0 ]; then
echo "No build files have been changed"
exit 0
fi
# Create a .skipci file to mark the fact that the next steps should be skipped
# (we're going to do another push anyway, so another pipeline will be triggered)
touch "$SKIPCI"
cd "$SRCDIR"
. .drone/macros/configure-ssh.sh
. .drone/macros/configure-gpg.sh
git add "${WEBAPP_DIR}/dist"
git commit "${WEBAPP_DIR}/dist" -S -m "[Automatic] Updated UI files" --no-verify
git remote rm origin
git remote add origin git@git.platypush.tech:platypush/platypush.git
git push -f origin master
# Restore the original git configuration
mv "$TMP_GIT_CONF" "$GIT_CONF"

14
.drone/github-mirror.sh Executable file
View file

@ -0,0 +1,14 @@
#!/bin/sh
. .drone/macros/configure-git.sh
. .drone/macros/configure-ssh.sh
ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null
# Clone the repository
git remote add github git@github.com:/blacklight/platypush.git
git pull --rebase github "$(git branch | head -1 | awk '{print $2}')" || echo "No such branch on Github"
# Push the changes to the GitHub mirror
git push --all -v github
git push --tags -v github

29
.drone/macros/configure-git.sh Executable file
View file

@ -0,0 +1,29 @@
#!/bin/sh
# Install git
if [ -z "$(which git)" ]; then
if [ -n "$(which apt-get)" ]; then
apt-get update
apt-get install -y git
elif [ -n "$(which apk)" ]; then
apk add --update --no-cache git
elif [ -n "$(which yum)" ]; then
yum install -y git
elif [ -n "$(which dnf)" ]; then
dnf install -y git
elif [ -n "$(which pacman)" ]; then
pacman -Sy --noconfirm git
else
echo "Could not find a package manager to install git"
exit 1
fi
fi
# Backup the original git configuration before changing attributes
export GIT_CONF="$PWD/.git/config"
export TMP_GIT_CONF=/tmp/git.config.orig
cp "$GIT_CONF" "$TMP_GIT_CONF"
git config --global --add safe.directory "$PWD"
git config user.name "Platypush CI/CD Automation"
git config user.email "admin@platypush.tech"

30
.drone/macros/configure-gpg.sh Executable file
View file

@ -0,0 +1,30 @@
#!/bin/sh
[ -z "$PGP_KEY" ] && echo "PGP_KEY is not set" && exit 1
[ -z "$PGP_KEY_ID" ] && echo "PGP_KEY_ID is not set" && exit 1
# Install gpg
if [ -z "$(which gpg)" ]; then
if [ -n "$(which apt-get)" ]; then
apt-get update
apt-get install -y gnupg
elif [ -n "$(which apk)" ]; then
apk add --update --no-cache bash gnupg
elif [ -n "$(which yum)" ]; then
yum install -y gnupg
elif [ -n "$(which dnf)" ]; then
dnf install -y gnupg
elif [ -n "$(which pacman)" ]; then
pacman -Sy --noconfirm gnupg
else
echo "Could not find a package manager to install gnupg"
exit 1
fi
fi
cat <<EOF | gpg --import --armor
$PGP_KEY
EOF
git config commit.gpgsign true
git config user.signingkey "$PGP_KEY_ID"

35
.drone/macros/configure-ssh.sh Executable file
View file

@ -0,0 +1,35 @@
#!/bin/sh
if [ -z "$SSH_PUBKEY" ] || [ -z "$SSH_PRIVKEY" ]; then
echo "SSH_PUBKEY and SSH_PRIVKEY environment variables must be set"
exit 1
fi
# Install ssh
if [ -z "$(which ssh)" ]; then
if [ -n "$(which apt-get)" ]; then
apt-get update
apt-get install -y openssh
elif [ -n "$(which apk)" ]; then
apk add --update --no-cache openssh
elif [ -n "$(which yum)" ]; then
yum install -y openssh
elif [ -n "$(which dnf)" ]; then
dnf install -y openssh
elif [ -n "$(which pacman)" ]; then
pacman -Sy --noconfirm openssh
else
echo "Could not find a package manager to install openssh"
exit 1
fi
fi
mkdir -p ~/.ssh
echo $SSH_PUBKEY > ~/.ssh/id_rsa.pub
cat <<EOF > ~/.ssh/id_rsa
$SSH_PRIVKEY
EOF
chmod 0600 ~/.ssh/id_rsa
ssh-keyscan git.platypush.tech >> ~/.ssh/known_hosts 2>/dev/null

27
.drone/rebuild-docs.sh Executable file
View file

@ -0,0 +1,27 @@
#!/bin/sh
echo "Installing required build dependencies"
apk add --update --no-cache git make py3-sphinx py3-myst-parser py3-pip $(cat platypush/install/requirements/alpine.txt)
pip install -U sphinx-rtd-theme sphinx-book-theme --break-system-packages
pip install . --break-system-packages
mkdir -p /docs/current
export APPDIR="$PWD"
rm -rf "$APPDIR/docs/build"
echo "Building the updated documentation"
cd "$APPDIR/docs/source"
git clone 'https://git.platypush.tech/platypush/platypush.wiki.git' wiki
echo "Linking the wiki to the Sphinx index"
cd wiki
cd "$APPDIR/docs"
make html
rm -f config*.yaml
cd "$APPDIR"
echo "Copying the new documentation files to the target folder"
mv -v "$APPDIR/docs/build" /docs/new
cd /docs
mv current old
mv new current
rm -rf old

6
.drone/run-tests.sh Executable file
View file

@ -0,0 +1,6 @@
#!/bin/sh
apk add --update --no-cache $(cat platypush/install/requirements/alpine.txt)
pip install . --break-system-packages
pip install -r requirements-tests.txt --break-system-packages
pytest tests

169
.drone/update-apt-repo.sh Executable file
View file

@ -0,0 +1,169 @@
#!/bin/sh
[ -f .skipci ] && exit 0
echo "-- Installing dependencies"
apt update
apt install -y dpkg-dev gpg
echo "-- Creating a new apt root folder"
export TMP_APT_ROOT="/tmp/apt"
cp -r "$APT_ROOT" "$TMP_APT_ROOT"
echo "-- Cleaning up older apt releases"
find "$TMP_APT_ROOT/pool" -mindepth 2 -maxdepth 2 -type d | while read reldir; do
pkg_to_remove=$(( $(ls "$reldir"/*.deb | wc -l) - 1 ))
[ $pkg_to_remove -le 0 ] && continue
ls "$reldir"/*.deb | sort -V | head -n$pkg_to_remove | xargs rm -f
done
echo "-- Updating Packages files"
echo "stable\noldstable\nubuntu" | while read distro; do
echo "main\ndev" | while read branch; do
branch_dir="$TMP_APT_ROOT/pool/$distro/$branch"
echo "Checking pool folder: $branch_dir"
[ -d "$branch_dir" ] || mkdir -p "$branch_dir"
dist_dir="$TMP_APT_ROOT/dists/$distro/$branch/all"
mkdir -p "$dist_dir"
pkg_file="$dist_dir/Packages"
dpkg-scanpackages --arch all "$branch_dir" > "$pkg_file"
sed -i "$pkg_file" -re "s|^Filename: $TMP_APT_ROOT/|Filename: |"
cat "$pkg_file" | gzip -9 > "$pkg_file.gz"
echo "Generated Packages file: $pkg_file"
cat "$pkg_file"
done
done
echo "-- Updating Release files"
add_hashes() {
dist_dir=$1
hash_cmd=$2
hash_label=$3
echo "$hash_label:"
find "$dist_dir" -name 'Packages*' | while read file; do
basename="$(echo "$file" | sed -r -e "s|^$dist_dir/||")"
hash="$($hash_cmd "$file" | cut -d" " -f1)"
size="$(wc -c < $file)"
echo " $hash $size $basename"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-i386/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-amd64/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-armel/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-armhf/|')"
echo " $hash $size $(echo $basename | sed -re 's|/all/|/binary-arm64/|')"
done
}
echo "stable\noldstable\nubuntu" | while read distro; do
dist_dir="$TMP_APT_ROOT/dists/$distro"
components=$(find "$dist_dir" -name Packages | awk -F '/' '{print $(NF-2)}' | uniq | tr '\n' ' ')
release_file="$dist_dir/Release"
cat <<EOF > "$release_file"
Origin: Platypush repository
Label: Platypush
Suite: $distro
Codename: $distro
Architectures: i386 amd64 armel armhf arm64
Components: $components
Description: The official APT repository for Platypush
Date: $(date -Ru)
EOF
add_hashes "$dist_dir" "md5sum" "MD5Sum" >> "$release_file"
add_hashes "$dist_dir" "sha1sum" "SHA1" >> "$release_file"
add_hashes "$dist_dir" "sha256sum" "SHA256" >> "$release_file"
done
echo "-- Generating list files"
mkdir -p "$TMP_APT_ROOT/lists"
for distro in stable oldstable ubuntu; do
for branch in main dev; do
echo "deb https://apt.platypush.tech/ $distro $branch" > "$TMP_APT_ROOT/lists/platypush-$distro-$branch.list"
done
done
echo "-- Updating index file"
cat <<EOF > "$TMP_APT_ROOT/index.txt"
Welcome to the Platypush APT repository!
Project homepage: https://platypush.tech
Source code: https://git.platypush.tech/platypush/platypush
Documentation / API reference: https://docs.platypush.tech
You can use this APT repository to install Platypush on Debian, Ubuntu or any
Debian-based distro.
Steps:
1. Add this repository's PGP key to your apt keyring
====================================================
# wget -q -O \\\
/etc/apt/trusted.gpg.d/platypush.asc \\\
https://apt.platypush.tech/pubkey.txt
2. Add the repository to your sources
=====================================
# wget -q -O \\\
/etc/apt/sources.list.d/platypush.list \\\
https://apt.platypush.tech/lists/platypush-<deb_version>-<branch>.list
Where:
- deb_version can be:
- *stable* - current Debian stable version
- *oldstable* - previous Debian stable version
- *ubuntu* - latest Ubuntu version
- branch can be either:
- *main* - latest stable release
- *dev* a package always in sync with the git version
For example, to install the latest stable tags on Debian stable:
# wget -q -O \\\
/etc/apt/sources.list.d/platypush.list \\\
https://apt.platypush.tech/lists/platypush-stable-main.list
3. Update your repos
====================
# apt update
4. Install Platypush
====================
# apt install platypush
EOF
echo "-- Importing and refreshing PGP key"
echo "$PGP_PUBKEY" > "$TMP_APT_ROOT/pubkey.txt"
export PGP_KEYID=$(echo "$PGP_PUBKEY" | gpg --with-colons --import-options show-only --import --fingerprint | grep -e '^fpr:' | head -1 | awk -F ':' '{print $(NF - 1)}')
cat <<EOF | gpg --import --armor
$PGP_PRIVKEY
EOF
echo "-- Signing Release files"
find "$TMP_APT_ROOT/dists" -type f -name Release | while read file; do
dirname="$(dirname "$file")"
cat "$file" | gpg -q --default-key "$PGP_KEYID" -abs > "$file.gpg"
cat "$file" | gpg -q --default-key "$PGP_KEYID" -abs --clearsign > "$dirname/InRelease"
done
echo "-- Updating the apt repo root"
export OLD_APT_ROOT="$REPOS_ROOT/oldapt"
rm -rf "$OLD_APT_ROOT"
mv "$APT_ROOT" "$OLD_APT_ROOT"
mv "$TMP_APT_ROOT" "$APT_ROOT"
chmod -R a+r "$APT_ROOT"
chmod a+x "$APT_ROOT"

View file

@ -0,0 +1,38 @@
#!/bin/sh
[ -f .skipci ] && exit 0
apk add --update --no-cache curl pacman sudo
. .drone/macros/configure-ssh.sh
. .drone/macros/configure-git.sh
git pull --rebase origin master --tags
export VERSION=$(python setup.py --version)
export HEAD=$(git log --pretty=format:%h HEAD...HEAD~1 | head -1)
export GIT_VERSION="$VERSION.r$(git log --pretty=oneline HEAD...v$VERSION | wc -l).g${HEAD}"
ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hosts 2>/dev/null
adduser -u 1000 -D build
mkdir -p "$WORKDIR"
echo "--- Updating Arch git version"
export PKGDIR=$WORKDIR/git
git clone ssh://aur@aur.archlinux.org/platypush-git.git "$PKGDIR"
git config --global --add safe.directory "$PKGDIR"
chown -R build "$PKGDIR"
cd "$PKGDIR"
sed -i 'PKGBUILD' -r \
-e "s/^pkgver=.*/pkgver=$GIT_VERSION/" \
-e "s/^pkgrel=.*/pkgrel=1/" \
sudo -u build makepkg --printsrcinfo > .SRCINFO
export FILES_CHANGED=$(git status --porcelain --untracked-files=no | wc -l)
if [ $FILES_CHANGED -gt 0 ]; then
echo "--- Pushing git package version $GIT_VERSION"
git commit -a -m '[Automatic] Package update'
git push origin master
fi

View file

@ -0,0 +1,46 @@
#!/bin/sh
[ -f .skipci ] && exit 0
apk add --update --no-cache curl pacman sudo
. .drone/macros/configure-ssh.sh
. .drone/macros/configure-git.sh
git pull --rebase origin master --tags
export VERSION=$(python setup.py --version)
export TAG_URL="https://git.platypush.tech/platypush/platypush/archive/v$VERSION.tar.gz"
ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hosts 2>/dev/null
adduser -u 1000 -D build
mkdir -p "$WORKDIR"
echo "--- Updating Arch stable version"
export PKGDIR="$WORKDIR/stable"
git clone ssh://aur@aur.archlinux.org/platypush.git "$PKGDIR"
git config --global --add safe.directory "$PKGDIR"
chown -R build "$PKGDIR"
cd "$PKGDIR"
export RELEASED_VERSION=$(grep -e '^pkgver=' PKGBUILD | sed -r -e 's/^pkgver=(.*)\s*/\1/')
if [ "$RELEASED_VERSION" == "$VERSION" ]; then
echo "--- No changes in the stable package version"
exit 0
fi
export TAG_CHECKSUM=$(curl --silent "$TAG_URL" | sha512sum | awk '{print $1}')
sed -i 'PKGBUILD' -r \
-e "s/^pkgver=.*/pkgver=$VERSION/" \
-e "s/^pkgrel=.*/pkgrel=1/" \
-e "s/^sha512sums=.*/sha512sums=('$TAG_CHECKSUM')/"
sudo -u build makepkg --printsrcinfo > .SRCINFO
export FILES_CHANGED=$(git status --porcelain --untracked-files=no | wc -l)
if [ $FILES_CHANGED -gt 0 ]; then
echo "--- Pushing stable package version $VERSION"
git commit -a -m '[Automatic] Package update'
git push origin master
fi

View file

@ -0,0 +1,46 @@
#!/bin/sh
export SKIPCI="$PWD/.skipci"
export CACHEFILE="$PWD/platypush/components.json.gz"
[ -f "$SKIPCI" ] && exit 0
# Backup the original git configuration before changing attributes
export GIT_CONF="$PWD/.git/config"
export TMP_GIT_CONF="/tmp/git.config.orig"
cp "$GIT_CONF" "$TMP_GIT_CONF"
. .drone/macros/configure-git.sh
# Only regenerate the components cache if either the plugins, backends,
# events or schemas folders have some changes (excluding the webapp files).
if [ -z "$(git log --pretty=oneline $DRONE_COMMIT_AFTER...$DRONE_COMMIT_BEFORE -- platypush/backend platypush/plugins platypush/schemas platypush/message/event ':(exclude)platypush/backend/http/webapp')" ]; then
echo 'No changes to the components file'
exit 0
fi
. .drone/macros/configure-ssh.sh
. .drone/macros/configure-gpg.sh
echo 'Updating components cache'
apk add --update --no-cache $(cat platypush/install/requirements/alpine.txt)
pip install . --break-system-packages
python - <<EOF
from platypush import get_plugin
get_plugin('inspect').refresh_cache(force=True)
EOF
# Create a .skipci file to mark the fact that the next steps should be skipped
# (we're going to do another push anyway, so another pipeline will be triggered)
touch "$SKIPCI"
git add "$CACHEFILE"
git commit "$CACHEFILE" -S -m "[Automatic] Updated components cache" --no-verify
git remote rm origin
git remote add origin git@git.platypush.tech:platypush/platypush.git
git push -f origin master
# Restore the original git configuration
mv "$TMP_GIT_CONF" "$GIT_CONF"

103
.drone/update-deb-packages.sh Executable file
View file

@ -0,0 +1,103 @@
#!/bin/sh
[ -f .skipci ] && exit 0
echo "-- Copying source directory"
mkdir -p "$WORKDIR/src"
export SRCDIR="$WORKDIR/src/$DEB_VERSION"
cp -r "$PWD" "$SRCDIR"
cd "$SRCDIR"
echo "-- Installing dependencies"
export DEBIAN_FRONTEND=noninteractive
apt update
apt install -y curl dpkg-dev gpg git python3 python3-pip python3-setuptools
echo "--- Parsing metadata"
git config --global --add safe.directory "$PWD"
git pull --rebase origin master --tags
export VERSION=$(grep -e '^__version__' "${SRCDIR}/version.py" | sed -r -e 's/^__version__\s*=\s*"([^"]+)"$/\1/')
export GIT_VERSION="$VERSION-$(git log --pretty=oneline HEAD...v$VERSION | wc -l)"
export GIT_BUILD_DIR="$WORKDIR/${PKG_NAME}_${GIT_VERSION}_all"
export GIT_DEB="$WORKDIR/${PKG_NAME}_${GIT_VERSION}_all.deb"
export POOL_PATH="$APT_ROOT/pool/$DEB_VERSION/dev"
echo "--- Building git package"
pip install --prefix="$GIT_BUILD_DIR/usr" --no-cache --no-deps .
find "$GIT_BUILD_DIR" -name "site-packages" | while read dir; do
base="$(dirname "$dir")"
mv "$dir" "$base/dist-packages"
done
install -m755 -d "${GIT_BUILD_DIR}/usr/lib/systemd/system"
install -m755 -d "${GIT_BUILD_DIR}/usr/lib/systemd/user"
install -m750 -d "${GIT_BUILD_DIR}/var/lib/platypush"
install -m750 -d "${GIT_BUILD_DIR}/etc/platypush/scripts"
install -m644 "${SRCDIR}/platypush/config/config.yaml" "${GIT_BUILD_DIR}/etc/platypush/config.yaml"
install -m644 "${SRCDIR}/platypush/config/systemd/platypush.service" "${GIT_BUILD_DIR}/usr/lib/systemd/user/platypush.service"
install -m644 "${SRCDIR}/platypush/config/systemd/platypush.service" "${GIT_BUILD_DIR}/usr/lib/systemd/system/platypush.service"
sed -i "${GIT_BUILD_DIR}/usr/lib/systemd/system/platypush.service" -r \
-e 's/^#\s*Requires=(.*)/Requires=\1/' \
-e 's/^\[Service\]$/\[Service\]\
User=platypush\
Group=platypush\
WorkingDirectory=\/var\/lib\/platypush\
Environment="PLATYPUSH_CONFIG=\/etc\/platypush\/config.yaml"\
Environment="PLATYPUSH_WORKDIR=\/var\/lib\/platypush"/'
mkdir -p "$GIT_BUILD_DIR/DEBIAN"
cat <<EOF > "$GIT_BUILD_DIR/DEBIAN/control"
Package: $PKG_NAME
Version: $GIT_VERSION
Maintainer: Fabio Manganiello <fabio@platypush.tech>
Depends: $(cat platypush/install/requirements/debian.txt | tr '\n' ',' | sed -re 's/,$//' -e 's/,/, /g')
Architecture: all
Homepage: https://platypush.tech
Description: Universal command executor and automation hub.
EOF
cat <<EOF > "$GIT_BUILD_DIR/DEBIAN/postinst" && chmod +x "$GIT_BUILD_DIR/DEBIAN/postinst"
#!/bin/sh
set -e
if [ "\$1" = "configure" ]; then
grep -e '^platypush:' /etc/passwd 2>/dev/null || useradd -U -r -s /bin/false -d /var/lib/platypush platypush
mkdir -p /var/lib/platypush
chown -R platypush:platypush /var/lib/platypush
chown -R platypush:platypush /etc/platypush
if which systemctl; then systemctl daemon-reload; fi
fi
EOF
mkdir -p "$POOL_PATH"
rm -f "$POOL_PATH/"*.deb
dpkg --build "$GIT_BUILD_DIR"
echo "--- Copying $GIT_DEB to $POOL_PATH"
cp "$GIT_DEB" "$POOL_PATH"
# If main/all/Packages doesn't exist, then we should create the first main release
[ $(ls "$APT_ROOT/pool/$DEB_VERSION/main/${PKG_NAME}_${VERSION}-"*"_all.deb" 2>/dev/null | wc -l) -eq 0 ] && export UPDATE_STABLE_PKG=1
export PKGURL="https://apt.platypush.tech/dists/$DEB_VERSION/main/all/Packages"
[ -z "$UPDATE_STABLE_PKG" ] &&
curl -ILs -o /dev/null -w "%{http_code}" "$PKGURL" |
grep -e '^4' >/dev/null && export UPDATE_STABLE_PKG=1
# If the published release version differs from the current one, then we should publish a new main release
if [ -z "$UPDATE_STABLE_PKG" ]; then
RELEASED_VERSION=$(curl -s "$PKGURL" | grep -e '^Version: ' | head -1 | awk '{print $2}' | cut -d- -f 1)
[ "$RELEASED_VERSION" != "$VERSION" ] && export UPDATE_STABLE_PKG=1
fi
# Proceed and update the main release if the version number has changed
if [ -n "$UPDATE_STABLE_PKG" ]; then
echo "--- Updating main package"
mkdir -p "$APT_ROOT/pool/$DEB_VERSION/main"
cp "$GIT_DEB" "$APT_ROOT/pool/$DEB_VERSION/main/${PKG_NAME}_${VERSION}-1_all.deb"
fi

5
.drone/update-pip-package.sh Executable file
View file

@ -0,0 +1,5 @@
#!/bin/sh
apk add --update --no-cache py3-twine py3-setuptools py3-wheel py3-pip
python setup.py sdist bdist_wheel
twine upload dist/platypush-$(python setup.py --version).tar.gz

261
.drone/update-rpm-repo.sh Executable file
View file

@ -0,0 +1,261 @@
#!/bin/sh
[ -f .skipci ] && exit 0
echo "-- Installing dependencies"
yum install -y \
createrepo \
git \
gpg \
python \
python-pip \
python-setuptools \
rpm-build \
rpm-sign \
systemd-rpm-macros \
wget \
yum-utils \
echo "-- Copying source directory"
mkdir -p "$WORKDIR"
export SRCDIR="$WORKDIR/src"
cp -r "$PWD" "$SRCDIR"
cd "$SRCDIR"
mkdir -p "$RPM_ROOT"
echo "--- Parsing metadata"
git config --global --add safe.directory $PWD
git pull --rebase origin master --tags
export VERSION=$(grep -e '^__version__' "${SRCDIR}/version.py" | sed -r -e 's/^__version__\s*=\s*"([^"]+)"$/\1/')
export RELNUM="$(git log --pretty=oneline HEAD...v$VERSION | wc -l)"
export SPECFILE="$WORKDIR/$PKG_NAME.spec"
export BUILD_DIR="$WORKDIR/build"
export TMP_RPM_ROOT="$WORKDIR/repo"
export SRC_URL="https://git.platypush.tech/platypush/platypush/archive/master.tar.gz"
echo "--- Creating git package spec"
cat <<EOF > $SPECFILE
Summary: Universal command executor and automation hub.
Name: $PKG_NAME-git
Version: $VERSION
Release: $RELNUM
URL: https://platypush.tech
Group: System
License: MIT
Packager: Fabio Manganiello <fabio@platypush.tech>
Source: $SRC_URL
Requires: $(cat platypush/install/requirements/fedora.txt | tr '\n' ' ')
Conflicts: $PKG_NAME
Prefix: %{_prefix}
BuildRoot: %{_tmppath}/%{name}-root
BuildRequires: systemd-rpm-macros
%{?sysusers_requires_compat}
%description
Universal command executor and automation hub.
%install
mkdir -p %{buildroot}/
cp -r "$BUILD_DIR"/* %{buildroot}/
install -p -Dm0644 "${BUILD_DIR}/usr/lib/sysusers.d/platypush.conf" %{buildroot}%{_sysusersdir}/platypush.conf
%pre
%sysusers_create_compat "${BUILD_DIR}/usr/lib/sysusers.d/platypush.conf"
%clean
%files
%defattr(750,platypush,platypush,750)
%dir /etc/platypush
/etc/platypush/*
/usr/bin/*
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush-$VERSION.dist-info
/usr/lib/systemd/system/*
/usr/lib/systemd/user/*
%defattr(750,platypush,platypush,750)
%dir /var/lib/platypush
%{_sysusersdir}/platypush.conf
%changelog
* $(date +'%a %b %d %Y') admin <admin@platypush.tech>
- [Automatic] Release $VERSION-$RELNUM
EOF
echo "--- Building git package"
mkdir -p "$BUILD_DIR"
pip install --prefix="$BUILD_DIR/usr" --no-cache --no-deps .
install -m755 -d "${BUILD_DIR}/usr/lib/systemd/system"
install -m755 -d "${BUILD_DIR}/usr/lib/systemd/user"
install -m755 -d "${BUILD_DIR}/usr/lib/sysusers.d"
install -m750 -d "${BUILD_DIR}/var/lib/platypush"
install -m750 -d "${BUILD_DIR}/etc/platypush/scripts"
install -m644 "${SRCDIR}/platypush/config/config.yaml" "${BUILD_DIR}/etc/platypush/config.yaml"
install -Dm644 "${SRCDIR}/platypush/config/systemd/platypush-sysusers.conf" "${BUILD_DIR}/usr/lib/sysusers.d/platypush.conf"
install -m644 "${SRCDIR}/platypush/config/systemd/platypush.service" "${BUILD_DIR}/usr/lib/systemd/user/platypush.service"
install -m644 "${SRCDIR}/platypush/config/systemd/platypush.service" "${BUILD_DIR}/usr/lib/systemd/system/platypush.service"
sed -i "${BUILD_DIR}/usr/lib/systemd/system/platypush.service" -r \
-e 's/^#\s*Requires=(.*)/Requires=\1/' \
-e 's/^\[Service\]$/\[Service\]\
User=platypush\
Group=platypush\
WorkingDirectory=\/var\/lib\/platypush\
Environment="PLATYPUSH_CONFIG=\/etc\/platypush\/config.yaml"\
Environment="PLATYPUSH_WORKDIR=\/var\/lib\/platypush"/'
rpmbuild --target "noarch" -bb "$SPECFILE"
echo "--- Copying the new RPM package"
mkdir -p "$TMP_RPM_ROOT"
cp "$HOME/rpmbuild/RPMS/noarch/$PKG_NAME-git-$VERSION-$RELNUM.noarch.rpm" "$TMP_RPM_ROOT"
echo "--- Checking the latest released stable version"
export LATEST_STABLE_PKG=$(ls -rt "$RPM_ROOT/$PKG_NAME"*.rpm 2>/dev/null | grep -v "$PKG_NAME-git" | tail -1)
if [ -z "$LATEST_STABLE_PKG" ]; then
# If not stable release is available, then create one
export UPDATE_STABLE_PKG=1
else
# Otherwise, create a new release if the reported version on the repo is different
# from the latest released version.
export LATEST_STABLE_VERSION=$(basename $LATEST_STABLE_PKG | cut -d- -f 2)
if [ "$VERSION" != "$LATEST_STABLE_VERSION" ]; then
export UPDATE_STABLE_PKG=1
else
# If the version has remained the same, then simply copy the existing RPM to the
# new repository directory.
echo "Copying the existing release $LATEST_STABLE_VERSION to the new repository"
cp "$LATEST_STABLE_PKG" "$TMP_RPM_ROOT"
fi
fi
# If a new stable release is required, build another RPM
if [ -n "$UPDATE_STABLE_PKG" ]; then
export RELNUM=1
export SRC_URL="https://git.platypush.tech/platypush/platypush/archive/v$VERSION.tar.gz"
cat <<EOF > $SPECFILE
Summary: Universal command executor and automation hub.
Name: $PKG_NAME
Version: $VERSION
Release: $RELNUM
URL: https://platypush.tech
Group: System
License: MIT
Packager: Fabio Manganiello <fabio@platypush.tech>
Source: $SRC_URL
Requires: $(cat platypush/install/requirements/fedora.txt | tr '\n' ' ')
Conflicts: $PKG_NAME-git
Prefix: %{_prefix}
BuildRoot: %{_tmppath}/%{name}-root
BuildRequires: systemd-rpm-macros
%{?sysusers_requires_compat}
%description
Universal command executor and automation hub.
%install
mkdir -p %{buildroot}/
cp -r "$BUILD_DIR"/* %{buildroot}/
install -p -Dm0644 "${BUILD_DIR}/usr/lib/sysusers.d/platypush.conf" %{buildroot}%{_sysusersdir}/platypush.conf
%pre
%sysusers_create_compat "${BUILD_DIR}/usr/lib/sysusers.d/platypush.conf"
%clean
%files
%defattr(750,platypush,platypush,750)
%dir /etc/platypush
/etc/platypush/*
/usr/bin/*
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush
/usr/lib/python$(python3 --version | awk '{print $2}' | cut -d. -f 1,2)/site-packages/platypush-$VERSION.dist-info
/usr/lib/systemd/system/*
/usr/lib/systemd/user/*
%defattr(750,platypush,platypush,750)
%dir /var/lib/platypush
%{_sysusersdir}/platypush.conf
%changelog
* $(date +'%a %b %d %Y') admin <admin@platypush.tech>
- [Automatic] Release $VERSION-$RELNUM
EOF
echo "--- Building package for stable release $VERSION"
rpmbuild --target "noarch" -bb "$SPECFILE"
cp "$HOME/rpmbuild/RPMS/noarch/$PKG_NAME-$VERSION-$RELNUM.noarch.rpm" "$TMP_RPM_ROOT"
fi
echo "--- Importing the repository keys"
cat <<EOF | gpg --import --armor
$PGP_PRIVKEY
EOF
export PGP_KEYID=$(echo "$PGP_PUBKEY" | gpg --with-colons --import-options show-only --import --fingerprint | grep -e '^fpr:' | head -1 | awk -F ':' '{print $(NF - 1)}')
cat <<EOF > $HOME/.rpmmacros
%signature gpg
%_gpg_name $PGP_KEYID
EOF
echo "--- Signing the new RPM packages"
rpm --addsign "$TMP_RPM_ROOT"/*.rpm
echo "--- Creating a new copy of the RPM repository"
createrepo "$TMP_RPM_ROOT"
gpg --detach-sign --armor "$TMP_RPM_ROOT/repodata/repomd.xml"
cat <<EOF > "$TMP_RPM_ROOT/platypush.repo"
[platypush]
name=Platypush repository
baseurl=https://rpm.platypush.tech
enabled=1
type=rpm
gpgcheck=1
gpgkey=https://rpm.platypush.tech/pubkey.txt
EOF
cat <<EOF > "$TMP_RPM_ROOT/index.txt"
Welcome to the Platypush RPM repository!
Project homepage: https://platypush.tech
Source code: https://git.platypush.tech/platypush/platypush
Documentation / API reference: https://docs.platypush.tech
You can use this RPM repository to install Platypush on Fedora or other
RPM-based distros - as long as they are compatible with the latest Fedora
release.
Steps:
1. Add the repository to your sources
=====================================
# yum config-manager --add-repo https://rpm.platypush.tech/platypush.repo
2. Install Platypush
====================
# yum install platypush
Or, if you want to install a version always up-to-date with the git repo:
# yum install platypush-git
EOF
cat <<EOF > "$TMP_RPM_ROOT/pubkey.txt"
$PGP_PUBKEY
EOF
echo "--- Updating the repository"
export NEW_RPM_ROOT="$REPOS_ROOT/rpm_new"
export OLD_RPM_ROOT="$REPOS_ROOT/rpm_old"
cp -r "$TMP_RPM_ROOT" "$NEW_RPM_ROOT"
rm -rf "$TMP_RPM_ROOT"
mv "$RPM_ROOT" "$OLD_RPM_ROOT"
mv "$NEW_RPM_ROOT" "$RPM_ROOT"
rm -rf "$OLD_RPM_ROOT"

22
.env.example Normal file
View file

@ -0,0 +1,22 @@
# The device ID is the unique identifier for the device that runs Platypush.
# You should make sure that it's unique at least within your local network,
# as it is used to identify the device in the MQTT topics, on the HTTP API
# and on the published ZeroConf services.
PLATYPUSH_DEVICE_ID=platypush
# Use an external Redis server for the message queue. By default, the Platypush
# container will run a Redis server on the same container. Also remove the
# `--start-redis` option from the `docker run` command if you want to use an
# external Redis server.
# PLATYPUSH_REDIS_HOST=localhost
# PLATYPUSH_REDIS_PORT=6379
# Custom location for the Platypush configuration file.
# PLATYPUSH_CONFIG=/etc/platypush/config.yaml
# Custom location for the Platypush working directory.
# PLATYPUSH_WORKDIR=/var/lib/platypush
# SQLAlchemy database URL. By default, the Platypush container will run on a
# SQLite database installed under <WORKDIR>/main.db. If you want
# PLATYPUSH_DB=sqlite:////var/lib/platypush/main.db

4
.gitignore vendored
View file

@ -25,3 +25,7 @@ Session.vim
/jsconfig.json /jsconfig.json
/package.json /package.json
/Dockerfile /Dockerfile
/docs/source/wiki
/.skipci
dump.rdb
.env

View file

@ -2,7 +2,7 @@
# See https://pre-commit.com/hooks.html for more hooks # See https://pre-commit.com/hooks.html for more hooks
repos: repos:
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.1.0 rev: v4.6.0
hooks: hooks:
# - id: trailing-whitespace # - id: trailing-whitespace
# - id: end-of-file-fixer # - id: end-of-file-fixer
@ -11,15 +11,15 @@ repos:
- id: check-xml - id: check-xml
- id: check-symlinks - id: check-symlinks
- id: check-added-large-files - id: check-added-large-files
args: ['--maxkb=1500'] args: ['--maxkb=3000']
- repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs - repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs
rev: v1.1.2 rev: v1.1.2
hooks: hooks:
- id: markdown-toc - id: markdown-toc
- repo: https://github.com/pycqa/flake8 - repo: https://github.com/PyCQA/flake8
rev: 4.0.1 rev: 7.1.0
hooks: hooks:
- id: flake8 - id: flake8
additional_dependencies: additional_dependencies:

View file

@ -1,8 +1,269 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. ## [1.2.3]
Given the high speed of development in the first phase, changes are being
reported only starting from v0.20.2. - [[#422](https://git.platypush.tech/platypush/platypush/issues/422)]: adapted
media plugins to support streaming from the yt-dlp process. This allows
videos to have merged audio+video even if they had separate tracks upstream.
- [`media.*`] Many improvements on the media UI.
- [`zigbee.mqtt`] Removed synchronous logic from `zigbee.mqtt.device_set`. It
was prone to timeouts as well as pointless - the updated device state will
anyway be received as an event.
## [1.2.2]
- Fixed regression on older version of Python that don't fully support
`pyproject.toml` and can't install data files the new way.
## [1.2.1]
- Added static `/login` and `/register` Flask fallback routes to prevent 404 if
the client doesn't have JavaScript enabled.
- Fixed `apt` packages for Debian oldstable after the `setup.py` to
`pyproject.toml` migration.
- Fixed license string in the `pyproject.toml`.
## [1.2.0]
- [#419](https://git.platypush.tech/platypush/platypush/issues/419): added
support for randomly generated API tokens alongside JWT.
- [#339](https://git.platypush.tech/platypush/platypush/issues/339): added
support for 2FA with OTP codes.
- [#393](https://git.platypush.tech/platypush/platypush/issues/393): added
`bind_socket` parameter to `backend.http`, so Platypush can listen on (or
exclusively if `listen_port` is null) on a local UNIX socket as well.
- [#401](https://git.platypush.tech/platypush/platypush/issues/401): added
`--redis-bin` option / `PLATYPUSH_REDIS_BIN` environment variable to support
custom Redis (or drop-in replacements) executables when `--start-redis` is
specified.
- [#413](https://git.platypush.tech/platypush/platypush/issues/401): added
support for page-specific PWAs. If you navigate to `/plugin/<plugin-name>`,
and you install it as a PWA, you'll install a PWA only for that plugin - not
for the whole Platypush UI.
- Migrated project setup from `setup.py` to `pyproject.toml`.
- [`70db33b4e`](https://git.platypush.tech/platypush/platypush/commit/70db33b4e):
more application resilience in case Redis goes down.
- [`ee27b2c4`](https://git.platypush.tech/platypush/platypush/commit/ee27b2c4):
Refactor of all the authentication endpoints into a single `/auth` endpoint:
- `POST /register``POST /auth?type=register`
- `POST /login``POST /auth?type=login`
- `POST /auth``POST /auth?type=token`
- `POST /auth``POST /auth?type=jwt`
- [`2ccf0050`](https://git.platypush.tech/platypush/platypush/commit/2ccf0050):
Added support for binary content to `qrcode.generate`.
- [`b69e9500`](https://git.platypush.tech/platypush/platypush/commit/b69e9500):
Support for fullscreen mode on the `camera` plugins UI.
## [1.1.3] - 2024-07-16
- [`core`]: New architecture for the Redis bus - now leveraging pub/sub with a
connection pool instead of a single-connection queue. It makes the
application much faster and less prone to Redis deadlocks.
- [`youtube`]:
[#391](https://git.platypush.tech/platypush/platypush/issues/391): added
support for:
- Add/remove playlists (UI)
- Add to/remove from playlist (UI)
- Subscribe/unsubscribe from channels (UI)
- Browse channels and playlists directly in the UI
- Download media and audio
## [1.1.1] - 2024-06-24
- [`torrent`]: [[#263](https://git.platypush.tech/platypush/platypush/issues/263)], [[#375](https://git.platypush.tech/platypush/platypush/issues/375)],
[[#407](https://git.platypush.tech/platypush/platypush/issues/407)] and
[[#408](https://git.platypush.tech/platypush/platypush/issues/408)]: added
torrents.csv search provider and rewritten torrents UI.
- [[#281](https://git.platypush.tech/platypush/platypush/issues/281)]
replaced `warnings.warn` with `logging.warning`, as there is no easy and
reliable way of routing `warnings.warn` to `logging`.
## [1.1.0] - 2024-06-06
- [[#405](https://git.platypush.tech/platypush/platypush/issues/405)] Fixed
timezone/timestamp rendering issues for `calendar.ical` events.
- [[#403](https://git.platypush.tech/platypush/platypush/issues/403)]
Included inherited actions in plugins docs.
## [1.0.7] - 2024-06-02
- [[#384](https://git.platypush.tech/platypush/platypush/issues/384)] Added
`assistant.openai` and `tts.openai` plugins.
## [1.0.6] - 2024-06-01
- 🐛 Bug fix on one of the entities modules that prevented the application from
loading when `.` is part of `PYTHONPATH`.
## [1.0.5] - 2024-06-01
- A proper solution for the `utcnow()` issue.
It was a bit trickier than expected to solve, but now Platypush uses a
`utcnow()` facade that always returns a UTC datetime in a timezone-aware
representation.
The code should however also handle the case of timestamps stored on the db in
the old format.
## [1.0.4] - 2024-05-31
- Fixed regression introduced by
[c18768e61fef62924f4c1fac3089ecfb83666dab](https://git.platypush.tech/platypush/platypush/commit/c18768e61fef62924f4c1fac3089ecfb83666dab).
Python seems to have introduced a breaking change from the version 3.12 -
`datetime.utcnow()` is not deprecated, but `datetime.UTC`, the suggested
alternative, isn't available on older versions of Python. Added a workaround
that makes Platypush compatible with both the implementations.
## [1.0.3] - 2024-05-31
- [[#368](https://git.platypush.tech/platypush/platypush/issues/368)] Added
Ubuntu packages.
- Fixed bug that didn't get hooks to match events imported through the new
`platypush.events` symlinked module.
## [1.0.2] - 2024-05-26
- Fixed regression introduced by the support of custom names through the
`@procedure` decorator.
## [1.0.0] - 2024-05-26
Many, many changes for the first major release of Platypush after so many
years.
- [!3](https://git.platypush.tech/platypush/platypush/milestone/3) All
backends, except for `http`, `nodered`, `redis` and `tcp`, are gone. Many
were already deprecated a while ago, but the change now applies to all of
them. Backends should only be components that actively listen for application
messages to process, not generic daemon threads for integrations. This had
been a source of confusion for a long time. Backends and plugins are now
merged, meaning that you won't need to configure two different sections
instead of one for many integrations (one for the stateless plugin, and one
for the background state listener). Please check the
[documentation](https://docs.platypush.tech) to verify the configuration
changes required by your integrations. This has been a long process that has
involved the rewrite of most of the integrations, and many bugs have been
fixed.
- Improved Docker support - now with a default `docker-compose.yml`, multiple
Dockerfiles for
[Alpine](https://git.platypush.tech/platypush/platypush/src/branch/master/platypush/install/docker/alpine.Dockerfile),
[Debian](https://git.platypush.tech/platypush/platypush/src/branch/master/platypush/install/docker/debian.Dockerfile),
[Ubuntu](https://git.platypush.tech/platypush/platypush/src/branch/master/platypush/install/docker/ubuntu.Dockerfile)
and
[Fedora](https://git.platypush.tech/platypush/platypush/src/branch/master/platypush/install/docker/fedora.Dockerfile)
base images. Many improvements on the `platydock` and `platyvenv` scripts
too, with better automated installation processes for optional dependencies.
- Added [official
packages](https://git.platypush.tech/platypush/platypush#system-package-manager-installation)
for
[Debian](https://git.platypush.tech/platypush/platypush#debian-ubuntu)
and [Fedora](https://git.platypush.tech/platypush/platypush#fedora).
- Added `--device-id`, `--workdir`, `--logsdir`, `--cachedir`, `--main-db`,
`--redis-host`, `--redis-port` and `--redis-queue` CLI arguments, along the
`PLATYPUSH_DEVICE_ID`, `PLATYPUSH_WORKDIR`, `PLATYPUSH_LOGSDIR`,
`PLATYPUSH_CACHEDIR`, `PLATYPUSH_DB`, `PLATYPUSH_REDIS_HOST`,
`PLATYPUSH_REDIS_PORT` and `PLATYPUSH_REDIS_QUEUE` environment variables.
- Added an _Extensions_ panel to the UI to dynamically:
- Install new dependencies directly from the Web view.
- Explore the documentation as well as the supported actions and events for
each plugin.
- Get ready-to-paste configuration snippets/templates.
- New, completely rewritten [documentation](https://docs.platypush.tech), which
now integrates the wiki, dynamically includes plugins configuration snippets
and dependencies, and adds a global filter bar for the integrations.
- [[#394](https://git.platypush.tech/platypush/platypush/issues/394)] A more
intuitive way of installing extra dependencies via `pip`. Instead of a static
list that the user should check inside of `setup.py`, the syntax `pip install
'platypush[plugin1,plugin2,...]'` is now supported.
- No more need to manually create `__init__.py` in each of the `scripts`
folders that you want to use to store your custom scripts. Automatic
discovery of scripts and creation of module files has been implemented. You
can now just drop a `.py` script with your procedures, hooks or crons in the
scripts folder and it should be picked up by the application.
- The _Execute_ Web panel now supports procedures too, as well as curl snippets.
- Removed all `Response` objects outside of the root type. They are now all
replaced by Marshmallow schemas with the structure automatically generated in
the documentation.
- [`alarm`] [[#340](https://git.platypush.tech/platypush/platypush/issues/340)]
Rewritten integration. It now includes a powerful UI panel to set up alarms
with custom procedures too.
- [`assistant.picovoice`]
[[#304](https://git.platypush.tech/platypush/platypush/issues/304)] New
all-in-one Picovoice integration that replaces the previous `stt.picovoice.*`
integrations.
- [`youtube`]
[[#337](https://git.platypush.tech/platypush/platypush/issues/337)] Full
rewrite of the plugin. It now supports Piped instances instead of the
official YouTube API. A new UI has also been designed to explore
subscriptions, playlists and channels.
- [`weather.*`]
[[#308](https://git.platypush.tech/platypush/platypush/issues/308)] Removed
the `weather.darksky` integration (it's now owned by Apple and the API is
basically dead) and enhanced the `weather.openweathermap` plugin instead.
- [`camera.pi*`] The old `camera.pi` integration based on the deprecated
`picamera` module has been moved to `camera.pi.legacy`. `camera.pi` is now a
new plugin which uses the new `picamera2` API (and it's so far only
compatible with recent versions on the Raspberry Pi OS).
- Dynamically auto-generate plugins documentation in the UI from the RST
docstrings.
- New design for the configuration panel.
- Better synchronization between processes on threads on application stop -
greatly reduced the risk of hanging processes on shutdown.
- Migrated all CI/CD pipelines to [Drone
CI](https://ci-cd.platypush.tech/platypush/platypush).
- Removed `google.fit` integration, as Google has deprecated the API.
- Removed `wiimote` integration: the `cwiid` library hasn't been updated in
years, it doesn't even work well with Python 3, and I'm not in the mood of
bringing it back from the dead.
- Removed `stt.deepspeech` integration. That project has been basically
abandoned by Mozilla, the libraries are very buggy and I don't think it's
going to see new developments any time soon.
- [[#297](https://git.platypush.tech/platypush/platypush/issues/297)] Removed
`spotify` backend integration based on Librespot. The project has gone
through a lot of changes, and I no longer have a Spotify premium account to
work on a new implementation. Open to contributions if somebody still wants
it.
## [0.50.3] - 2023-07-22 ## [0.50.3] - 2023-07-22

View file

@ -27,13 +27,9 @@ Guidelines:
you are changing some of the core entities (e.g. requests, events, procedures, hooks, crons you are changing some of the core entities (e.g. requests, events, procedures, hooks, crons
or the bus) then make sure to add tests and not to break the existing tests. or the bus) then make sure to add tests and not to break the existing tests.
- If the feature requires an optional dependency then make sure to document it: - If the feature requires an optional dependency then make sure to document it
in the `manifest.json` - refer to the Wiki (how to write
- In the class docstring (see other plugins and backends for examples). [plugins](https://git.platypush.tech/platypush/platypush/wiki/Writing-your-own-plugins)
- In [`setup.py`](https://git.platypush.tech/platypush/platypush/-/blob/master/setup.py#L72) as and
an `extras_require` entry. [backends](https://git.platypush.tech/platypush/platypush/wiki/Writing-your-own-backends))
- In the plugin/backend class pydoc string. for examples on how to write an extension manifest file.
- In the `manifest.yaml` - refer to the Wiki (how to write
[plugins](https://git.platypush.tech/platypush/platypush/wiki/Writing-your-own-plugins)
and [backends](https://git.platypush.tech/platypush/platypush/wiki/Writing-your-own-backends))
for examples on how to write an extension manifest file.

1
Dockerfile.alpine Symbolic link
View file

@ -0,0 +1 @@
platypush/install/docker/alpine.Dockerfile

View file

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2017, 2020 Fabio Manganiello Copyright (c) 2017, 2024 Fabio Manganiello
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View file

@ -2,4 +2,16 @@ recursive-include platypush/backend/http/webapp/dist *
recursive-include platypush/install * recursive-include platypush/install *
include platypush/plugins/http/webpage/mercury-parser.js include platypush/plugins/http/webpage/mercury-parser.js
include platypush/config/*.yaml include platypush/config/*.yaml
global-include manifest.yaml include platypush/config/systemd/*
global-include manifest.json
global-include components.json.gz
global-exclude __pycache__/*
global-exclude *.pyc
# Exclude symlinks to avoid issues with setuptools
exclude platypush/backend/http/webapp/public/icons/openweathermap/black
exclude platypush/backend/http/webapp/public/icons/openweathermap/white
exclude platypush/backend/http/webapp/src/**
exclude platypush/events
exclude platypush/install/scripts/ubuntu

1734
README.md

File diff suppressed because it is too large Load diff

46
docker-compose.yml Normal file
View file

@ -0,0 +1,46 @@
services:
platypush:
restart: "always"
command:
- platypush
# Comment --start-redis if you want to run an external Redis service
# In such case you'll also have to ensure that the appropriate Redis
# variables are set in the .env file, or the Redis configuration is
# passed in the config.yaml, or use the --redis-host and --redis-port
# command-line options
- --start-redis
# Custom list of host devices that should be accessible to the container -
# e.g. an Arduino, an ESP-compatible microcontroller, a joystick etc.
# devices:
# - /dev/ttyUSB0
# Uncomment if you need plugins that require access to low-level hardware
# (e.g. Bluetooth BLE or GPIO/SPI/I2C) if access to individual devices is
# not enough or isn't practical
# privileged: true
build:
context: .
# Alpine base image
dockerfile: ./platypush/install/docker/alpine.Dockerfile
# Debian base image
# dockerfile: ./platypush/install/docker/debian.Dockerfile
# Ubuntu base image
# dockerfile: ./platypush/install/docker/ubuntu.Dockerfile
# Fedora base image
# dockerfile: ./platypush/install/docker/fedora.Dockerfile
# Copy .env.example to .env and modify as needed
# env_file:
# - .env
ports:
# Comment if you don't have the HTTP backend enable or you don't want to
# expose it
- "8008:8008"
volumes:
- /path/to/your/config.yaml:/etc/platypush
- /path/to/a/workdir:/var/lib/platypush
# - /path/to/a/cachedir:/var/cache/platypush

View file

@ -3,7 +3,6 @@ import os
import re import re
import sys import sys
import textwrap as tw import textwrap as tw
from contextlib import contextmanager
from sphinx.application import Sphinx from sphinx.application import Sphinx
@ -13,14 +12,14 @@ base_path = os.path.abspath(
sys.path.insert(0, base_path) sys.path.insert(0, base_path)
from platypush.utils import get_plugin_name_by_class # noqa from platypush.common.reflection import Integration # noqa: E402
from platypush.utils.mock import mock # noqa from platypush.utils import get_plugin_name_by_class # noqa: E402
from platypush.utils.reflection import IntegrationMetadata, import_file # noqa from platypush.utils.mock import auto_mocks # noqa: E402
class IntegrationEnricher: class IntegrationEnricher:
@staticmethod @staticmethod
def add_events(source: list[str], manifest: IntegrationMetadata, idx: int) -> int: def add_events(source: list[str], manifest: Integration, idx: int) -> int:
if not manifest.events: if not manifest.events:
return idx return idx
@ -37,7 +36,7 @@ class IntegrationEnricher:
return idx + 1 return idx + 1
@staticmethod @staticmethod
def add_actions(source: list[str], manifest: IntegrationMetadata, idx: int) -> int: def add_actions(source: list[str], manifest: Integration, idx: int) -> int:
if not (manifest.actions and manifest.cls): if not (manifest.actions and manifest.cls):
return idx return idx
@ -56,11 +55,16 @@ class IntegrationEnricher:
@staticmethod @staticmethod
def _shellify(title: str, cmd: str) -> str: def _shellify(title: str, cmd: str) -> str:
return f'**{title}**\n\n' + '.. code-block:: bash\n\n\t' + cmd + '\n\n' return (
f'**{title}**\n\n'
+ '.. code-block:: bash\n\n'
+ tw.indent(cmd, '\t')
+ '\n\n'
)
@classmethod @classmethod
def add_install_deps( def add_install_deps(
cls, source: list[str], manifest: IntegrationMetadata, idx: int cls, source: list[str], manifest: Integration, idx: int
) -> int: ) -> int:
deps = manifest.deps deps = manifest.deps
parsed_deps = { parsed_deps = {
@ -80,7 +84,9 @@ class IntegrationEnricher:
idx += 1 idx += 1
if parsed_deps['pip']: if parsed_deps['pip']:
source.insert(idx, cls._shellify('pip', 'pip ' + ' '.join(deps.pip))) source.insert(
idx, cls._shellify('pip', 'pip install ' + ' '.join(deps.pip))
)
idx += 1 idx += 1
for pkg_manager, sys_deps in deps.by_pkg_manager.items(): for pkg_manager, sys_deps in deps.by_pkg_manager.items():
@ -104,9 +110,7 @@ class IntegrationEnricher:
return idx return idx
@classmethod @classmethod
def add_description( def add_description(cls, source: list[str], manifest: Integration, idx: int) -> int:
cls, source: list[str], manifest: IntegrationMetadata, idx: int
) -> int:
docs = ( docs = (
doc doc
for doc in ( for doc in (
@ -125,7 +129,7 @@ class IntegrationEnricher:
@classmethod @classmethod
def add_conf_snippet( def add_conf_snippet(
cls, source: list[str], manifest: IntegrationMetadata, idx: int cls, source: list[str], manifest: Integration, idx: int
) -> int: ) -> int:
source.insert( source.insert(
idx, idx,
@ -155,14 +159,14 @@ class IntegrationEnricher:
base_path, base_path,
*doc.split(os.sep)[:-1], *doc.split(os.sep)[:-1],
*doc.split(os.sep)[-1].split('.'), *doc.split(os.sep)[-1].split('.'),
'manifest.yaml', 'manifest.json',
) )
if not os.path.isfile(manifest_file): if not os.path.isfile(manifest_file):
return return
with mock_imports(): with auto_mocks():
manifest = IntegrationMetadata.from_manifest(manifest_file) manifest = Integration.from_manifest(manifest_file)
idx = self.add_description(src, manifest, idx=3) idx = self.add_description(src, manifest, idx=3)
idx = self.add_conf_snippet(src, manifest, idx=idx) idx = self.add_conf_snippet(src, manifest, idx=idx)
idx = self.add_install_deps(src, manifest, idx=idx) idx = self.add_install_deps(src, manifest, idx=idx)
@ -173,14 +177,6 @@ class IntegrationEnricher:
source[0] = '\n'.join(src) source[0] = '\n'.join(src)
@contextmanager
def mock_imports():
conf_mod = import_file(os.path.join(base_path, 'docs', 'source', 'conf.py'))
mock_mods = getattr(conf_mod, 'autodoc_mock_imports', [])
with mock(*mock_mods):
yield
def setup(app: Sphinx): def setup(app: Sphinx):
app.connect('source-read', IntegrationEnricher()) app.connect('source-read', IntegrationEnricher())
return { return {

View file

@ -0,0 +1,249 @@
const processList = (list, level, addTitle) => {
const title = list.parentElement.querySelector('a')
list.classList.add('grid')
if (addTitle)
title.classList.add('grid-title')
list.querySelectorAll(`li.toctree-l${level}`).forEach((item) => {
const link = item.querySelector('a')
if (link) {
item.style.cursor = 'pointer'
item.addEventListener('click', () => link.click())
}
const name = item.querySelector('a').innerText
const img = document.createElement('img')
img.src = `https://static.platypush.tech/icons/${name.toLowerCase()}-64.png`
img.alt = ' '
item.prepend(img)
})
}
const addClipboard = (parent) => {
const pre = parent.tagName === 'PRE' ? parent : parent.querySelector('pre')
if (!pre)
return
const clipboard = document.createElement('i')
const setClipboard = (img, text) => {
clipboard.innerHTML = `<img src="https://static.platypush.tech/icons/${img}-64.png" alt="${text}">`
}
clipboard.classList.add('clipboard')
setClipboard('clipboard-bw', 'Copy')
clipboard.onclick = () => {
if (navigator && navigator.clipboard && navigator.clipboard.writeText) {
setClipboard('ok', 'Copied!')
setTimeout(() => setClipboard('clipboard-bw', 'Copy'), 2000)
return navigator.clipboard.writeText(pre.innerText.trim())
}
return Promise.reject('The Clipboard API is not available.');
}
pre.style.position = 'relative'
pre.appendChild(clipboard)
}
const Tabs = () => {
let selectedTab = null
let parent = null
let data = {}
const init = (obj) => {
data = obj
if (Object.keys(data).length && selectedTab == null)
selectedTab = Object.keys(data)[0]
}
const select = (name) => {
if (!parent) {
console.warn('Cannot select tab: parent not set')
return
}
if (!data[name]) {
console.warn(`Cannot select tab: invalid name: ${name}`)
return
}
const tabsBody = parent.querySelector('.body')
selectedTab = name
tabsBody.innerHTML = data[selectedTab]
parent.querySelectorAll('.tabs li').forEach(
(tab) => tab.classList.remove('selected')
)
const tab = [...parent.querySelectorAll('.tabs li')].find(
(t) => t.innerText === name
)
if (!tab) {
console.warn(`Cannot select tab: invalid name: ${name}`)
return
}
addClipboard(tabsBody)
tab.classList.add('selected')
}
const mount = (p) => {
const tabs = document.createElement('div')
tabs.classList.add('tabs')
parent = p
const tabsList = document.createElement('ul')
Object.keys(data).forEach((title) => {
const tab = document.createElement('li')
tab.innerText = title
tab.onclick = (event) => {
event.stopPropagation()
select(title)
},
tabsList.appendChild(tab)
})
const tabsBody = document.createElement('div')
tabsBody.classList.add('body')
tabs.appendChild(tabsList)
tabs.appendChild(tabsBody)
parent.innerHTML = ''
parent.appendChild(tabs)
select(selectedTab)
}
return {
init,
select,
mount,
}
}
const depsTabs = Tabs()
const convertDepsToTabs = () => {
const depsContainer = document.getElementById('dependencies')
if (!depsContainer)
return
const blocks = [...depsContainer.querySelectorAll('.highlight-bash')].map((block) => block.outerHTML)
const titles = [...depsContainer.querySelectorAll('p strong')].map((title) => title.innerText)
if (!(blocks.length && titles.length && blocks.length === titles.length))
return
const title = depsContainer.querySelector('h2')
const tabsData = titles.reduce((obj, title, i) => {
obj[title] = blocks[i]
return obj
}, {})
depsTabs.init(tabsData)
depsTabs.mount(depsContainer)
depsContainer.prepend(title)
}
const generateComponentsGrid = () => {
const tocWrappers = document.querySelectorAll('.toctree-wrapper.compound')
if (!tocWrappers.length) {
return
}
if (window.location.pathname === '/' || window.location.pathname.endsWith('/index.html')) {
if (tocWrappers.length < 2) {
return
}
const referenceLists = [
...tocWrappers[1].querySelectorAll('ul li.toctree-l1 ul')
].slice(0, 4)
referenceLists.forEach((list) => processList(list, 2, true))
} else if (window.location.pathname.endsWith('/plugins.html') || window.location.pathname.endsWith('/backends.html')) {
if (tocWrappers.length < 1) {
return
}
const list = tocWrappers[0].querySelector('ul')
if (list)
processList(list, 1, false)
}
}
const addClipboardToCodeBlocks = () => {
document.querySelectorAll('pre').forEach((pre) => addClipboard(pre))
}
const renderActionsList = () => {
const actionsList = document.getElementById('actions')?.querySelector('ul')
if (!actionsList)
return
[...actionsList.querySelectorAll('li')].forEach((li) => {
const link = li.querySelector('a')
link.innerHTML = `<code class="docutils literal notranslate"><span class="pre">${link.innerText}</span></code>`
})
}
const createFilterBar = () => {
const input = document.createElement('input')
const referenceSection = document.getElementById('reference')
input.type = 'text'
input.placeholder = 'Filter'
input.classList.add('filter-bar')
input.addEventListener('input', (event) => {
const filter = event.target.value.toLowerCase()
referenceSection.querySelectorAll('ul.grid li').forEach((li) => {
if (li.innerText.toLowerCase().includes(filter)) {
li.style.display = 'flex'
} else {
li.style.display = 'none'
}
})
})
return input
}
const addFilterBar = () => {
const container = document.querySelector('.bd-main')
if (!container)
return
const referenceSection = document.getElementById('reference')
if (!referenceSection)
return
const header = referenceSection.querySelector('h2')
if (!header)
return
const origInnerHTML = header.innerHTML
header.innerHTML = '<span class="header-content">' + origInnerHTML + '</span>'
const input = createFilterBar()
header.appendChild(input)
const headerOffsetTop = header.offsetTop
// Apply the fixed class if the header is above the viewport
document.addEventListener('scroll', () => {
if (headerOffsetTop < window.scrollY) {
header.classList.add('fixed')
} else {
header.classList.remove('fixed')
}
})
}
document.addEventListener("DOMContentLoaded", function() {
generateComponentsGrid()
convertDepsToTabs()
addClipboardToCodeBlocks()
renderActionsList()
addFilterBar()
})

View file

@ -0,0 +1,188 @@
a, a:visited {
/* Don't change the color for visited links */
color: var(--pst-color-link) !important;
}
ul.grid {
display: grid;
@media screen and (max-width: 500px) {
grid-template-columns: repeat(1, 1fr);
}
@media screen and (min-width: 501px) and (max-width: 699px) {
grid-template-columns: repeat(2, 1fr);
}
@media screen and (min-width: 700px) {
grid-template-columns: repeat(3, 1fr);
}
}
a.grid-title {
width: 100%;
display: block;
margin: 1.5em 0;
font-size: 1.5em !important;
border-bottom: 1px solid #ccc;
}
ul.grid li {
display: flex;
background: linear-gradient(0deg, #fff, #f9f9f9);
align-items: center;
justify-content: space-between;
margin: 0 10px 10px 0;
padding: 20px;
border: 1px solid #ccc;
border-radius: 15px;
flex-direction: column;
}
ul.grid img {
width: 48px;
margin-right: 5px;
}
ul.grid li code {
width: 100%;
}
ul.grid li code .pre {
width: 100%;
display: block;
white-space: pre-wrap;
}
ul.grid li:hover {
background: linear-gradient(0deg, #157765, #cbffd8) !important;
}
ul.grid li a {
width: 100%;
display: flex;
justify-content: center;
text-align: center;
margin-top: 0.5em;
}
ul.grid li:hover a,
ul.grid li:hover a > code {
color: white !important;
}
ul.grid li a code {
background: none;
border: none;
}
ul.grid .icon {
width: 32px;
}
/* Clipboard button */
.clipboard {
position: absolute;
display: inline-block;
width: 32px;
top: 0.5em;
right: 0.5em;
cursor: pointer;
}
/* Tabs */
.tabs {
margin: 0 0 1em 0;
padding: 0;
list-style: none;
}
.tabs ul {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin: 0 0 1em 0;
padding: 0;
list-style: none;
border-bottom: 1px solid #ccc;
}
.tabs ul li {
display: inline-flex;
max-width: 25%;
margin: 0;
padding: 0.25em 0.5em;
list-style: none;
cursor: pointer;
flex-grow: 1;
justify-content: center;
align-items: center;
border-radius: 0.75em 0.75em 0 0;
border: 1px solid #ddd;
}
.tabs ul li.selected {
background: rgb(200,255,208);
}
.tabs ul li:hover {
background: rgb(190,246,218);
}
.tabs .body {
margin-top: -1em;
padding: 1em;
border: 1px solid #ccc;
border-top: none;
border-radius: 0 0 0.75em 0.75em;
}
.bd-article-container {
position: relative;
}
.filter-bar {
width: 100%;
display: block;
font-size: 0.6em;
border: 1px solid #ccc;
border-radius: 0.75em;
margin: 0.5em 0;
padding: 0.25em;
}
#reference h2.fixed {
position: fixed;
top: 0;
background: white;
z-index: 1;
}
#reference h2.fixed .header-content {
display: none;
}
@media screen and (max-width: 768px) {
#reference h2.fixed {
width: 100%;
margin-left: -0.5em;
padding: 0.5em 0.5em 0 0.5em;
}
}
@media screen and (max-width: 959px) {
#reference h2.fixed {
width: 100%;
margin-left: -1em;
padding: 0.5em 0.5em 0 0.5em;
}
}
@media screen and (min-width: 960px) {
#reference h2.fixed {
width: 75%;
max-width: 800px;
padding-top: 0.5em;
}
}

View file

@ -6,47 +6,7 @@ Backends
:maxdepth: 1 :maxdepth: 1
:caption: Backends: :caption: Backends:
platypush/backend/adafruit.io.rst
platypush/backend/alarm.rst
platypush/backend/assistant.google.rst
platypush/backend/assistant.snowboy.rst
platypush/backend/button.flic.rst
platypush/backend/camera.pi.rst
platypush/backend/chat.telegram.rst
platypush/backend/file.monitor.rst
platypush/backend/foursquare.rst
platypush/backend/github.rst
platypush/backend/google.fit.rst
platypush/backend/google.pubsub.rst
platypush/backend/gps.rst
platypush/backend/http.rst platypush/backend/http.rst
platypush/backend/joystick.rst
platypush/backend/joystick.jstest.rst
platypush/backend/joystick.linux.rst
platypush/backend/kafka.rst
platypush/backend/log.http.rst
platypush/backend/mail.rst
platypush/backend/midi.rst
platypush/backend/music.mopidy.rst
platypush/backend/music.mpd.rst
platypush/backend/music.snapcast.rst
platypush/backend/music.spotify.rst
platypush/backend/nextcloud.rst
platypush/backend/nfc.rst
platypush/backend/nodered.rst platypush/backend/nodered.rst
platypush/backend/ping.rst
platypush/backend/pushbullet.rst
platypush/backend/redis.rst platypush/backend/redis.rst
platypush/backend/scard.rst
platypush/backend/sensor.ir.zeroborg.rst
platypush/backend/sensor.leap.rst
platypush/backend/stt.deepspeech.rst
platypush/backend/stt.picovoice.hotword.rst
platypush/backend/stt.picovoice.speech.rst
platypush/backend/tcp.rst platypush/backend/tcp.rst
platypush/backend/todoist.rst
platypush/backend/trello.rst
platypush/backend/weather.buienradar.rst
platypush/backend/weather.darksky.rst
platypush/backend/weather.openweathermap.rst
platypush/backend/wiimote.rst

View file

@ -21,7 +21,7 @@ sys.path.insert(0, os.path.abspath("./_ext"))
# -- Project information ----------------------------------------------------- # -- Project information -----------------------------------------------------
project = 'Platypush' project = 'Platypush'
copyright = '2017-2023, Fabio Manganiello' copyright = '2017-2024, Fabio Manganiello'
author = 'Fabio Manganiello <fabio@manganiello.tech>' author = 'Fabio Manganiello <fabio@manganiello.tech>'
# The short X.Y version # The short X.Y version
@ -40,6 +40,7 @@ release = ''
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones. # ones.
extensions = [ extensions = [
'myst_parser',
'sphinx.ext.autodoc', 'sphinx.ext.autodoc',
'sphinx.ext.intersphinx', 'sphinx.ext.intersphinx',
'sphinx.ext.todo', 'sphinx.ext.todo',
@ -58,8 +59,8 @@ templates_path = ['_templates']
# The suffix(es) of source filenames. # The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string: # You can specify multiple suffix as a list of string:
# #
# source_suffix = ['.rst', '.md'] source_suffix = ['.rst', '.md']
source_suffix = '.rst' # source_suffix = '.rst'
# The master toctree document. # The master toctree document.
master_doc = 'index' master_doc = 'index'
@ -111,7 +112,14 @@ html_theme_options = {
# Add any paths that contain custom static files (such as style sheets) here, # Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files, # relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css". # so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static'] html_static_path = ['_static']
html_css_files = [
'styles/custom.css',
]
html_js_files = [
'scripts/custom.js',
]
# Custom sidebar templates, must be a dictionary that maps document names # Custom sidebar templates, must be a dictionary that maps document names
# to template names. # to template names.
@ -163,9 +171,9 @@ latex_documents = [
man_pages = [(master_doc, 'platypush', 'platypush Documentation', [author], 1)] man_pages = [(master_doc, 'platypush', 'platypush Documentation', [author], 1)]
# -- Options for Texinfo output ---------------------------------------------- # -- Options for TexInfo output ----------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples # Grouping the document tree into TexInfo files. List of tuples
# (source start file, target name, title, author, # (source start file, target name, title, author,
# dir menu entry, description, category) # dir menu entry, description, category)
texinfo_documents = [ texinfo_documents = [
@ -191,128 +199,28 @@ intersphinx_mapping = {'python': ('https://docs.python.org/3', None)}
autodoc_default_options = { autodoc_default_options = {
'members': True, 'members': True,
'show-inheritance': True, 'show-inheritance': True,
'inherited-members': True,
} }
autodoc_mock_imports = [
'gunicorn',
'googlesamples.assistant.grpc.audio_helpers',
'google.assistant.embedded',
'google.assistant.library',
'google.assistant.library.event',
'google.assistant.library.file_helpers',
'google.oauth2.credentials',
'oauth2client',
'apiclient',
'tenacity',
'smartcard',
'Leap',
'oauth2client',
'rtmidi',
'bluetooth',
'gevent.wsgi',
'Adafruit_IO',
'pyclip',
'pydbus',
'inputs',
'inotify',
'omxplayer',
'plexapi',
'cwiid',
'sounddevice',
'soundfile',
'numpy',
'cv2',
'nfc',
'ndef',
'bcrypt',
'google',
'feedparser',
'kafka',
'googlesamples',
'icalendar',
'httplib2',
'mpd',
'serial',
'pyHS100',
'grpc',
'envirophat',
'gps',
'picamera',
'pmw3901',
'PIL',
'croniter',
'pyaudio',
'avs',
'PyOBEX',
'PyOBEX.client',
'todoist',
'trello',
'telegram',
'telegram.ext',
'pyfirmata2',
'cups',
'graphyte',
'cpuinfo',
'psutil',
'openzwave',
'deepspeech',
'wave',
'pvporcupine ',
'pvcheetah',
'pyotp',
'linode_api4',
'pyzbar',
'tensorflow',
'keras',
'pandas',
'samsungtvws',
'paramiko',
'luma',
'zeroconf',
'dbus',
'gi',
'gi.repository',
'twilio',
'Adafruit_Python_DHT',
'RPi.GPIO',
'RPLCD',
'imapclient',
'pysmartthings',
'aiohttp',
'watchdog',
'pyngrok',
'irc',
'irc.bot',
'irc.strings',
'irc.client',
'irc.connection',
'irc.events',
'defusedxml',
'nio',
'aiofiles',
'aiofiles.os',
'async_lru',
'bleak',
'bluetooth_numbers',
'TheengsDecoder',
'simple_websocket',
'uvicorn',
'websockets',
'docutils',
'aioxmpp',
]
sys.path.insert(0, os.path.abspath('../..')) sys.path.insert(0, os.path.abspath('../..'))
from platypush.utils.mock.modules import mock_imports # noqa
def skip(app, what, name, obj, skip, options): autodoc_mock_imports = [*mock_imports]
# _ = app
# __ = what
# ___ = obj
# ____ = options
def _skip(_, __, name, ___, skip, ____):
if name == "__init__": if name == "__init__":
return False return False
return skip return skip
def setup(app): def setup(app):
app.connect("autodoc-skip-member", skip) app.connect("autodoc-skip-member", _skip)
# vim:sw=4:ts=4:et: # vim:sw=4:ts=4:et:

View file

@ -11,21 +11,19 @@ Events
platypush/events/application.rst platypush/events/application.rst
platypush/events/assistant.rst platypush/events/assistant.rst
platypush/events/bluetooth.rst platypush/events/bluetooth.rst
platypush/events/button.flic.rst
platypush/events/camera.rst platypush/events/camera.rst
platypush/events/chat.slack.rst platypush/events/chat.slack.rst
platypush/events/chat.telegram.rst
platypush/events/clipboard.rst platypush/events/clipboard.rst
platypush/events/custom.rst platypush/events/custom.rst
platypush/events/dbus.rst platypush/events/dbus.rst
platypush/events/distance.rst platypush/events/distance.rst
platypush/events/entities.rst platypush/events/entities.rst
platypush/events/file.rst platypush/events/file.rst
platypush/events/flic.rst
platypush/events/foursquare.rst platypush/events/foursquare.rst
platypush/events/geo.rst platypush/events/geo.rst
platypush/events/github.rst platypush/events/github.rst
platypush/events/google.rst platypush/events/google.rst
platypush/events/google.fit.rst
platypush/events/google.pubsub.rst platypush/events/google.pubsub.rst
platypush/events/gotify.rst platypush/events/gotify.rst
platypush/events/gpio.rst platypush/events/gpio.rst
@ -66,17 +64,15 @@ Events
platypush/events/sound.rst platypush/events/sound.rst
platypush/events/stt.rst platypush/events/stt.rst
platypush/events/sun.rst platypush/events/sun.rst
platypush/events/telegram.rst
platypush/events/tensorflow.rst platypush/events/tensorflow.rst
platypush/events/todoist.rst
platypush/events/torrent.rst platypush/events/torrent.rst
platypush/events/travisci.rst
platypush/events/trello.rst platypush/events/trello.rst
platypush/events/video.rst platypush/events/video.rst
platypush/events/weather.rst platypush/events/weather.rst
platypush/events/web.rst platypush/events/web.rst
platypush/events/web.widget.rst platypush/events/web.widget.rst
platypush/events/websocket.rst platypush/events/websocket.rst
platypush/events/wiimote.rst
platypush/events/xmpp.rst platypush/events/xmpp.rst
platypush/events/zeroborg.rst platypush/events/zeroborg.rst
platypush/events/zeroconf.rst platypush/events/zeroconf.rst

View file

@ -1,28 +1,58 @@
Platypush Platypush
######### #########
Welcome to the Platypush reference of available plugins, backends and event types. Description
===========
For more information on Platypush check out: This is the main documentation hub for Platypush. It includes both the wiki and
the complete reference of the available integrations.
* The `main page`_ of the project Platypush is a general-purpose automation framework that can be used to cover
* The `Gitea page`_ of the project all the cases where you'd use a home automation hub, a media center, a smart
* The `online wiki`_ for quickstart and examples assistant, some IFTTT recipes, and a variety of other products and services.
* The `Blog articles`_ for inspiration on use-cases possible projects
.. _main page: https://platypush.tech It draws inspiration from the following projects, and it aims to cover all of
.. _Gitea page: https://git.platypush.tech/platypush/platypush their use-cases:
.. _online wiki: https://git.platypush.tech/platypush/platypush/wiki
.. _Blog articles: https://blog.platypush.tech * `Home Assistant <https://www.home-assistant.io/>`_
* `Homebridge <https://homebridge.io/>`_
* `OpenHAB <https://www.openhab.org/>`_
* `IFTTT <https://ifttt.com/>`_
* `Tasker <https://tasker.joaoapps.com/>`_
Useful links
============
* The `main page <https://platypush.tech>`_ of the project.
* The `source code <https://git.platypush.tech/platypush/platypush>`_.
* The `blog <https://blog.platypush.tech>`_.
Wiki
====
.. toctree::
:maxdepth: 3
wiki/Home
wiki/Quickstart
wiki/Installation
wiki/Plugins-installation
wiki/APIs
wiki/Variables
wiki/Entities
wiki/Configuration
wiki/A-full-configuration-example
wiki/The-Web-interface
Reference
=========
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
:caption: Contents:
backends backends
plugins plugins
events events
responses
Indices and tables Indices and tables
================== ==================

View file

@ -1,6 +0,0 @@
``adafruit.io``
=================================
.. automodule:: platypush.backend.adafruit.io
:members:

View file

@ -1,5 +0,0 @@
``alarm``
===========================
.. automodule:: platypush.backend.alarm
:members:

View file

@ -1,6 +0,0 @@
``assistant.google``
======================================
.. automodule:: platypush.backend.assistant.google
:members:

View file

@ -1,6 +0,0 @@
``assistant.snowboy``
=======================================
.. automodule:: platypush.backend.assistant.snowboy
:members:

View file

@ -1,6 +0,0 @@
``button.flic``
=================================
.. automodule:: platypush.backend.button.flic
:members:

View file

@ -1,6 +0,0 @@
``camera.pi``
===============================
.. automodule:: platypush.backend.camera.pi
:members:

View file

@ -1,5 +0,0 @@
``chat.telegram``
===================================
.. automodule:: platypush.backend.chat.telegram
:members:

View file

@ -1,5 +0,0 @@
``file.monitor``
==================================
.. automodule:: platypush.backend.file.monitor
:members:

View file

@ -1,5 +0,0 @@
``foursquare``
================================
.. automodule:: platypush.backend.foursquare
:members:

View file

@ -1,5 +0,0 @@
``github``
============================
.. automodule:: platypush.backend.github
:members:

View file

@ -1,6 +0,0 @@
``google.fit``
================================
.. automodule:: platypush.backend.google.fit
:members:

View file

@ -1,5 +0,0 @@
``google.pubsub``
===================================
.. automodule:: platypush.backend.google.pubsub
:members:

View file

@ -1,6 +0,0 @@
``gps``
=========================
.. automodule:: platypush.backend.gps
:members:

View file

@ -1,5 +0,0 @@
``joystick.jstest``
=====================================
.. automodule:: platypush.backend.joystick.jstest
:members:

View file

@ -1,5 +0,0 @@
``joystick.linux``
====================================
.. automodule:: platypush.backend.joystick.linux
:members:

View file

@ -1,6 +0,0 @@
``joystick``
==============================
.. automodule:: platypush.backend.joystick
:members:

View file

@ -1,6 +0,0 @@
``kafka``
===========================
.. automodule:: platypush.backend.kafka
:members:

View file

@ -1,5 +0,0 @@
``log.http``
==============================
.. automodule:: platypush.backend.log.http
:members:

View file

@ -1,5 +0,0 @@
``mail``
==========================
.. automodule:: platypush.backend.mail
:members:

View file

@ -1,6 +0,0 @@
``midi``
==========================
.. automodule:: platypush.backend.midi
:members:

View file

@ -1,6 +0,0 @@
``music.mopidy``
==================================
.. automodule:: platypush.backend.music.mopidy
:members:

View file

@ -1,6 +0,0 @@
``music.mpd``
===============================
.. automodule:: platypush.backend.music.mpd
:members:

View file

@ -1,6 +0,0 @@
``music.snapcast``
====================================
.. automodule:: platypush.backend.music.snapcast
:members:

View file

@ -1,5 +0,0 @@
``music.spotify``
===================================
.. automodule:: platypush.backend.music.spotify
:members:

View file

@ -1,5 +0,0 @@
``nextcloud``
===============================
.. automodule:: platypush.backend.nextcloud
:members:

View file

@ -1,6 +0,0 @@
``nfc``
=========================
.. automodule:: platypush.backend.nfc
:members:

View file

@ -1,5 +0,0 @@
``ping``
==========================
.. automodule:: platypush.backend.ping
:members:

View file

@ -1,6 +0,0 @@
``pushbullet``
================================
.. automodule:: platypush.backend.pushbullet
:members:

View file

@ -1,6 +0,0 @@
``scard``
===========================
.. automodule:: platypush.backend.scard
:members:

View file

@ -1,6 +0,0 @@
``sensor.ir.zeroborg``
========================================
.. automodule:: platypush.backend.sensor.ir.zeroborg
:members:

View file

@ -1,7 +0,0 @@
``sensor.leap``
=================================
.. automodule:: platypush.backend.sensor.leap
:members:

View file

@ -1,5 +0,0 @@
``stt.deepspeech``
====================================
.. automodule:: platypush.backend.stt.deepspeech
:members:

View file

@ -1,5 +0,0 @@
``stt.picovoice.hotword``
===========================================
.. automodule:: platypush.backend.stt.picovoice.hotword
:members:

View file

@ -1,5 +0,0 @@
``stt.picovoice.speech``
==========================================
.. automodule:: platypush.backend.stt.picovoice.speech
:members:

View file

@ -1,5 +0,0 @@
``todoist``
=============================
.. automodule:: platypush.backend.todoist
:members:

View file

@ -1,5 +0,0 @@
``trello``
============================
.. automodule:: platypush.backend.trello
:members:

View file

@ -1,5 +0,0 @@
``weather.buienradar``
========================================
.. automodule:: platypush.backend.weather.buienradar
:members:

View file

@ -1,5 +0,0 @@
``weather.darksky``
=====================================
.. automodule:: platypush.backend.weather.darksky
:members:

View file

@ -1,5 +0,0 @@
``weather.openweathermap``
============================================
.. automodule:: platypush.backend.weather.openweathermap
:members:

View file

@ -1,6 +0,0 @@
``wiimote``
=============================
.. automodule:: platypush.backend.wiimote
:members:

View file

@ -1,6 +0,0 @@
``button.flic``
=======================================
.. automodule:: platypush.message.event.button.flic
:members:

View file

@ -1,5 +0,0 @@
``chat.telegram``
=========================================
.. automodule:: platypush.message.event.chat.telegram
:members:

View file

@ -0,0 +1,5 @@
``flic``
========
.. automodule:: platypush.message.event.flic
:members:

View file

@ -1,6 +0,0 @@
``google.fit``
======================================
.. automodule:: platypush.message.event.google.fit
:members:

View file

@ -0,0 +1,5 @@
``telegram``
============
.. automodule:: platypush.message.event.telegram
:members:

View file

@ -1,5 +0,0 @@
``todoist``
===================================
.. automodule:: platypush.message.event.todoist
:members:

View file

@ -1,5 +0,0 @@
``travisci``
====================================
.. automodule:: platypush.message.event.travisci
:members:

View file

@ -1,6 +0,0 @@
``wiimote``
===================================
.. automodule:: platypush.message.event.wiimote
:members:

View file

@ -1,5 +1,5 @@
``event.xmpp`` ``xmpp``
============== ========
.. automodule:: platypush.message.event.xmpp .. automodule:: platypush.message.event.xmpp
:members: :members:

View file

@ -1,6 +0,0 @@
``assistant.echo``
====================================
.. automodule:: platypush.plugins.assistant.echo
:members:

View file

@ -1,6 +0,0 @@
``assistant.google.pushtotalk``
=================================================
.. automodule:: platypush.plugins.assistant.google.pushtotalk
:members:

View file

@ -0,0 +1,5 @@
``assistant.openai``
====================
.. automodule:: platypush.plugins.assistant.openai
:members:

View file

@ -0,0 +1,5 @@
``assistant.picovoice``
=======================
.. automodule:: platypush.plugins.assistant.picovoice
:members:

View file

@ -0,0 +1,5 @@
``camera.pi.legacy``
====================
.. automodule:: platypush.plugins.camera.pi.legacy
:members:

View file

@ -1,5 +0,0 @@
``chat.irc``
============
.. automodule:: platypush.plugins.chat.irc
:members:

View file

@ -1,5 +0,0 @@
``chat.telegram``
===================================
.. automodule:: platypush.plugins.chat.telegram
:members:

View file

@ -0,0 +1,5 @@
``cups``
========
.. automodule:: platypush.plugins.cups
:members:

View file

@ -0,0 +1,5 @@
``file.monitor``
================
.. automodule:: platypush.plugins.file.monitor
:members:

View file

@ -0,0 +1,5 @@
``flic``
========
.. automodule:: platypush.plugins.flic
:members:

View file

@ -0,0 +1,5 @@
``github``
==========
.. automodule:: platypush.plugins.github
:members:

View file

@ -1,6 +0,0 @@
``google.fit``
================================
.. automodule:: platypush.plugins.google.fit
:members:

View file

@ -1,6 +0,0 @@
``google.youtube``
====================================
.. automodule:: platypush.plugins.google.youtube
:members:

View file

@ -0,0 +1,5 @@
``gps``
=======
.. automodule:: platypush.plugins.gps
:members:

View file

@ -1,7 +0,0 @@
``http.request``
==================================
.. automodule:: platypush.plugins.http.request
:members:

View file

@ -0,0 +1,5 @@
``http``
========
.. automodule:: platypush.plugins.http
:members:

View file

@ -1,5 +0,0 @@
``inputs``
============================
.. automodule:: platypush.plugins.inputs
:members:

View file

@ -0,0 +1,5 @@
``irc``
=======
.. automodule:: platypush.plugins.irc
:members:

View file

@ -0,0 +1,5 @@
``joystick``
============
.. automodule:: platypush.plugins.joystick
:members:

Some files were not shown because too many files have changed in this diff Show more