Commit graph

1548 commits

Author SHA1 Message Date
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
fcb6b621ab
[#340] Added persistence of alarm entities. 2023-12-09 01:25:12 +01:00
5ad1a62293
[#340] Merged alarm backend into the alarm plugin.
Closes: #340
2023-12-06 19:23:19 +01:00
2670d40094
Added get_default_media_plugin utility. 2023-12-06 01:31:05 +01:00
680de865c4
Minor docstring fix. 2023-12-04 03:09:02 +01:00
5823dd0e21
[#292] Converted backend.log.http to a runnable plugin.
Closes: #292
2023-12-04 03:03:21 +01:00
1843ab224b
[#289] Converted backend.file.monitor into a runnable plugin.
Closes: #289
2023-12-04 03:03:20 +01:00
d048752184
[#301] Exposing hosts as entities in the ping plugin.
Closes: #301
2023-12-04 00:36:45 +01:00
3bb7c02572
[#301] Merged ping backend and plugin.
Also, removed `ping` response types.
2023-11-24 02:06:53 +01:00
71ccffa698
[weather.buienradar] Implemented forecast support. 2023-11-23 01:35:58 +01:00
b969afb1cf
Added support for weather forecast events and entities. 2023-11-23 01:35:58 +01:00
aca71c6bc7 [wallabag] Improved OAuth flow integration.
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
a0d8c522a2
[#308] Finalized weather integrations migration.
- Migrated `weather.buienradar` integration.
- Removed last leftovers of the previous weather backends and responses.

Closes: #308
2023-11-20 03:10:00 +01:00
2dac98c56e
More rst fixes. 2023-11-20 03:09:59 +01:00
80be79f5e8
Fixed link format. 2023-11-20 02:43:18 +01:00
b8a4b9e4c5
Implemented support for weather entities. 2023-11-20 01:46:01 +01:00
b800899859
[#308] Refactored weather.openweathermap plugin. 2023-11-19 00:10:10 +01:00
eec2908cc2
Removed DarkSky integration.
The API has gone and it's been merged into Apple Weather.
2023-11-18 21:45:47 +01:00
674c1036c5
Fixed some plugin usages of self._bus.
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
869ef38364
Removed explicit numpy pip dependency in assistant.google.
It will be installed by the other dependencies anyway.
2023-11-18 16:01:24 +01:00
fdaff32cd0
Fixed docstring for chromecast.status. 2023-11-18 14:17:17 +01:00
1a777c6276
Removed Todoist backend and migrated responses to schemas.
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
c2f53b7771
Added _bus property on Plugin. 2023-11-18 10:13:35 +01:00
f12af08e73
Minor return type fix. 2023-11-17 22:30:30 +01:00
0f9614506b
[trello] Updated procedure to retrieve the frontend cloud token. 2023-11-17 10:28:27 +01:00
c919cf0cd8
[trello] (Almost) complete plugin rewrite.
- 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
39b4483401
Fixed joystick manifest. 2023-11-16 22:08:00 +01:00
7bb08bca07
[joystick] Rewritten joystick integration as a plugin.
And removed legacy `joystick*` backends and `inputs` plugin.

Closes: #290
2023-11-16 21:43:56 +01:00
d617443af6
[YouTube] Added subscriptions+channels support.
Closes: #337
2023-11-15 03:05:58 +01:00
4853f51c8b
[YouTube] Added (read-only) playlists support. 2023-11-15 03:05:57 +01:00
be28965d84
[youtube] Added youtube.get_feed action. 2023-11-13 02:40:50 +01:00
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
1f321c32dc
[media.chromecast] Full plugin rewrite. 2023-11-12 03:08:54 +01:00
ceae310901
[snapcast] Merged backend logic into the plugin.
Closes: #283
2023-11-10 02:48:07 +01:00
6c3edb73f9
[music.snapcast] Fixed message serialization issue.
Closes: #338
2023-11-09 22:46:54 +01:00
52ee614ec4
[media] Added logic to parse local media metadata. 2023-11-09 02:47:34 +01:00
cd635ea69e
[torrent] Fixed duration and image for TV series results. 2023-11-09 02:47:33 +01:00
d1b721dba5
[torrent] Added image to search results. 2023-11-09 02:47:33 +01:00
eb7a96ee94
[youtube] Added more metadata fields to search results. 2023-11-09 02:47:32 +01:00
e7bd61e0d4
Black/LINT for Jellyfin plugin. 2023-11-07 00:45:45 +01:00
a94ddd3f05
[torrent] duration * 60 for results returned by PopcornTime API. 2023-11-07 00:45:44 +01:00
1d41df51e7
[media] Extended current track with ytdl metadata if available. 2023-11-07 00:45:44 +01:00
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
6411688e65
[youtube] Don't fail if some items in the response have missing attrs. 2023-11-05 22:12:21 +01:00
71bca662a1
media.play should support anything supported by a yt_dlp extractor. 2023-11-05 02:40:38 +01:00
11c3b7820d
[torrent] Create download_dir if it doesn't exist. 2023-11-04 15:48:05 +01:00
2b12984c81
[youtube] Full plugin rewrite.
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
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
b4bf30945a
[media] Black/LINT for MediaPlugin. 2023-11-04 00:50:08 +01:00
efdb63443d
Renamed the youtube plugin.
From `google.youtube` to `youtube`.
2023-11-04 00:07:29 +01:00
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
ba5d505c9b [youtube] Black/LINT pass. 2023-11-03 20:54:46 +00:00
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
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
ef3b1d20f2 Updated MediaPlugin documentation snippet. 2023-10-31 00:44:05 +00:00
0cbd0a94d6 tts plugins should leverage sound`, not an external media player. 2023-10-31 00:44:05 +00:00
72b2625425 Updated tts plugin dependencies, as they now leverage the sound plugin. 2023-10-31 00:44:05 +00:00
42912581f9 [Fix] Always initialize AssistantPlugin._conversation_start_sound. 2023-10-23 21:30:49 +00:00
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
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
cea3055369 Indent pre- and post-install shell scripts in docs. 2023-10-23 15:48:09 +00:00
a005958317
[Assistant] Added assistant entity type. 2023-10-23 16:02:05 +02:00
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
fb017a8b35
[assistant.google] Added doc on how to configure audio devices. 2023-10-22 22:49:41 +02:00
645e8c8f77
Added updated configuration snippet for assistant.google plugin. 2023-10-22 21:53:15 +02:00
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
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
e24438980a
[sound] Better logic for default sound device auto-detection. 2023-10-22 18:07:25 +02:00
e65eef34d3
[application] application.install should redirect stderr->stdout. 2023-10-22 01:44:39 +02:00
cd87cc3e43
Minor docstring fixes. 2023-10-21 18:08:29 +02:00
8634572c34
Small docstring fix. 2023-10-20 01:41:30 +02:00
0eae6fd48d
Misc dependencies and mock fixes.
- `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
4c6d966038 [Doc fix] Fixed indent in the documentation of the application.install action. 2023-10-19 12:13:08 +02:00
f0255549c8
[utils] Added utils.to_yaml action. 2023-10-18 22:50:52 +02:00
c7acc03c8f
[inspect] Added get_enabled_plugins and get_enabled_backends actions. 2023-10-18 22:10:32 +02:00
c05d887551
[application] Added application.install action.
It can be used to programmatically install extensions.
2023-10-18 19:33:00 +02:00
81e99a0e22
[shell] Better buffering for the output sent to websockets. 2023-10-18 03:00:52 +02:00
66cba233e5
[config] Added config.get_config_file action. 2023-10-18 03:00:51 +02:00
20a2203e7e
[Shell plugin] Added support for async output over websockets. 2023-10-18 03:00:51 +02:00
891e05a219
[Execute UI] Added syntax highlight to JSON and shell snippets. 2023-10-13 23:12:04 +02:00
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
1b6e9b4df9
Fixed a broken docstring reference. 2023-10-10 22:18:36 +02:00
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
1e93af86f4
Fixed some broken docstring references. 2023-10-09 01:33:45 +02:00
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
4d52fd35b9
Skip None responses in the RSS plugin. 2023-10-04 22:08:11 +02:00
40d3ad1150
Removed <type> | None type hints.
They break on Python < 3.10.
2023-10-03 01:15:13 +02:00
3086dd86fc
LINT+Black+stability fixes for some plugins that hadn't been touched in a while.
- media.mplayer
- media.omxplayer
- media.vlc
- music.mpd
- music.snapcast
2023-10-01 22:55:06 +02:00
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
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
966a6ce29e
httplib2 should be an explicit dependency for Google integrations.
Plus, some misc LINT/Black chores.
2023-10-01 00:52:59 +02:00
532f5479b3
Added full YAML example for chat.irc configuration. 2023-09-30 14:34:54 +02:00
4f5ccda353
Better documentation for the calendar plugin. 2023-09-30 13:31:41 +02:00
15d06fa5c2
Improved docstring parser logic. 2023-09-30 12:35:31 +02:00
905d6632e0
Misc documentation improvements. 2023-09-29 18:09:15 +02:00
0a3ec4b9f1
Merge branch 'master' into 311/auto-generate-deps-docs 2023-09-28 01:25:29 +02:00
b76f141b61
Catch response write errors in the MQTT callback.
If the client that forwarded the request is no longer available (either
because an exception or a timeout was raised) then its I/O buffer and
event loop may be closed.

In this case, the response callback should handle and report the
exception, and still set the event, so that any other threads waiting
for the response can move on.
2023-09-27 11:23:55 +02:00
ca7f042ccc
We shouldn't call dateutil.parser if t has already been deserialized to a datetime. 2023-09-27 11:20:10 +02:00
c311987741
Removed typing.Final from some of the most commonly used modules.
`typing.Final` is not defined on Python < 3.8.
2023-09-26 23:50:10 +02:00
9298f52443
Moved BluetoothPlugin to __init__.py.
This is for consistency with other plugins, that all have their main
plugin class definition inside of `__init__.py`.
2023-09-24 19:21:53 +02:00