From 98e9abde18ce0ab2bb7ec05a73dc993de5e62f73 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Wed, 16 Aug 2023 22:43:51 +0200 Subject: [PATCH 1/7] Extended manifest files with Python system packages (if available). - If a Python optional dependency is available as a system package on the target system, try and install it that route rather than pip. It's usually faster and it decreases the risk of breaking system packages. - Added support for apk dependencies in manifest files. This brings the number of distros officially supported by all the extensions to four: - Alpine - Arch - Debian - Ubuntu --- .../backend/assistant/google/manifest.yaml | 15 +++++++++--- platypush/backend/camera/pi/manifest.yaml | 15 +++++++++--- platypush/backend/file/monitor/manifest.yaml | 8 ++++++- platypush/backend/gps/manifest.yaml | 8 ++++--- platypush/backend/http/manifest.yaml | 3 +-- platypush/backend/inotify/manifest.yaml | 6 ++++- .../backend/joystick/jstest/manifest.yaml | 4 +++- platypush/backend/kafka/manifest.yaml | 4 +++- platypush/backend/log/http/manifest.yaml | 8 ++++++- platypush/backend/midi/manifest.yaml | 7 +++++- platypush/backend/mqtt/manifest.yaml | 8 ++++++- platypush/backend/music/mpd/manifest.yaml | 6 ++++- platypush/backend/music/spotify/manifest.yaml | 3 +++ platypush/backend/scard/manifest.yaml | 8 ++++++- platypush/backend/zwave/mqtt/manifest.yaml | 8 ++++++- .../assistant/google/pushtotalk/manifest.yaml | 15 +++++++++--- platypush/plugins/bluetooth/manifest.yaml | 22 +++++++++++------- platypush/plugins/calendar/ical/manifest.yaml | 8 ++++++- platypush/plugins/camera/cv/manifest.yaml | 18 ++++++++++++--- platypush/plugins/camera/ffmpeg/manifest.yaml | 16 +++++++++---- .../plugins/camera/gstreamer/manifest.yaml | 21 ++++++++++++----- .../plugins/camera/ir/mlx90640/manifest.yaml | 16 +++++++++---- platypush/plugins/camera/pi/manifest.yaml | 15 +++++++++--- platypush/plugins/chat/irc/manifest.yaml | 4 ++++ platypush/plugins/clipboard/manifest.yaml | 4 +++- platypush/plugins/dbus/manifest.yaml | 13 +++++++++-- platypush/plugins/dropbox/manifest.yaml | 6 ++++- platypush/plugins/ffmpeg/manifest.yaml | 7 ++++-- .../plugins/google/calendar/manifest.yaml | 17 +++++++++++--- platypush/plugins/google/drive/manifest.yaml | 17 +++++++++++--- platypush/plugins/google/fit/manifest.yaml | 17 +++++++++++--- platypush/plugins/google/mail/manifest.yaml | 17 +++++++++++--- platypush/plugins/google/maps/manifest.yaml | 17 +++++++++++--- platypush/plugins/google/pubsub/manifest.yaml | 19 +++++++++++---- .../plugins/google/translate/manifest.yaml | 19 +++++++++++---- .../plugins/google/youtube/manifest.yaml | 17 +++++++++++--- platypush/plugins/hid/manifest.yaml | 4 ++++ platypush/plugins/http/webpage/manifest.yaml | 9 ++++++-- platypush/plugins/inspect/manifest.yaml | 3 +-- platypush/plugins/lastfm/manifest.yaml | 8 ++++++- platypush/plugins/matrix/manifest.yaml | 3 +++ .../plugins/media/chromecast/manifest.yaml | 6 ++++- .../plugins/media/gstreamer/manifest.yaml | 7 ++++-- platypush/plugins/media/kodi/manifest.yaml | 6 ++++- platypush/plugins/media/mplayer/manifest.yaml | 2 ++ platypush/plugins/media/mpv/manifest.yaml | 9 ++++++-- .../plugins/media/subtitles/manifest.yaml | 6 +++-- platypush/plugins/media/vlc/manifest.yaml | 8 +++++-- platypush/plugins/midi/manifest.yaml | 6 ++++- platypush/plugins/ml/cv/manifest.yaml | 13 +++++++++-- platypush/plugins/mqtt/manifest.yaml | 8 ++++++- platypush/plugins/music/mpd/manifest.yaml | 6 ++++- platypush/plugins/otp/manifest.yaml | 8 ++++++- platypush/plugins/printer/cups/manifest.yaml | 11 ++++++--- platypush/plugins/qrcode/manifest.yaml | 23 +++++++++++++++---- platypush/plugins/rss/manifest.yaml | 9 ++++++++ platypush/plugins/rtorrent/manifest.yaml | 2 ++ platypush/plugins/serial/manifest.yaml | 6 +++++ platypush/plugins/sound/manifest.yaml | 21 +++++++++++------ platypush/plugins/ssh/manifest.yaml | 8 ++++++- .../plugins/stt/deepspeech/manifest.yaml | 13 ++++++++--- platypush/plugins/system/manifest.yaml | 8 ++++++- platypush/plugins/tensorflow/manifest.yaml | 19 +++++++++++---- platypush/plugins/torrent/manifest.yaml | 8 ++++++- platypush/plugins/twilio/manifest.yaml | 4 +++- platypush/plugins/xmpp/manifest.yaml | 7 ++++++ platypush/plugins/zeroconf/manifest.yaml | 3 +-- platypush/plugins/zigbee/mqtt/manifest.yaml | 8 ++++++- platypush/plugins/zwave/mqtt/manifest.yaml | 8 ++++++- 69 files changed, 551 insertions(+), 135 deletions(-) diff --git a/platypush/backend/assistant/google/manifest.yaml b/platypush/backend/assistant/google/manifest.yaml index 410f231c..c97ca42e 100644 --- a/platypush/backend/assistant/google/manifest.yaml +++ b/platypush/backend/assistant/google/manifest.yaml @@ -19,9 +19,18 @@ manifest: platypush.message.event.assistant.TimerEndEvent: when a timer ends platypush.message.event.assistant.TimerStartedEvent: when a timer starts install: + apk: + - py3-grpcio + - py3-google-auth + apt: + - python3-grpcio + - python3-google-auth + pacman: + - python-grpcio + - python-google-auth pip: - - google-assistant-library - - google-assistant-sdk[samples] - - google-auth + - google-assistant-library + - google-assistant-sdk[samples] + - google-auth package: platypush.backend.assistant.google type: backend diff --git a/platypush/backend/camera/pi/manifest.yaml b/platypush/backend/camera/pi/manifest.yaml index 793fcadd..e2c3b2c6 100644 --- a/platypush/backend/camera/pi/manifest.yaml +++ b/platypush/backend/camera/pi/manifest.yaml @@ -1,9 +1,18 @@ manifest: events: {} install: + apk: + - py3-numpy + - py3-pillow + pacman: + - python-numpy + - python-pillow + apt: + - python3-numpy + - python3-pillow pip: - - picamera - - numpy - - Pillow + - picamera + - numpy + - Pillow package: platypush.backend.camera.pi type: backend diff --git a/platypush/backend/file/monitor/manifest.yaml b/platypush/backend/file/monitor/manifest.yaml index 92b066d1..2007e988 100644 --- a/platypush/backend/file/monitor/manifest.yaml +++ b/platypush/backend/file/monitor/manifest.yaml @@ -4,7 +4,13 @@ manifest: platypush.message.event.file.FileSystemDeleteEvent: if a resource is removed. platypush.message.event.file.FileSystemModifyEvent: if a resource is modified. install: + apk: + - py3-watchdog + apt: + - python3-watchdog + pacman: + - python-watchdog pip: - - watchdog + - watchdog package: platypush.backend.file.monitor type: backend diff --git a/platypush/backend/gps/manifest.yaml b/platypush/backend/gps/manifest.yaml index f4d1dedf..818299f3 100644 --- a/platypush/backend/gps/manifest.yaml +++ b/platypush/backend/gps/manifest.yaml @@ -6,11 +6,13 @@ manifest: platypush.message.event.gps.GPSVersionEvent: when a GPS device advertises its version data install: - pip: - - gps - pacman: + apk: - gpsd apt: - gpsd + pacman: + - gpsd + pip: + - gps package: platypush.backend.gps type: backend diff --git a/platypush/backend/http/manifest.yaml b/platypush/backend/http/manifest.yaml index 3ad89d81..4631e63b 100644 --- a/platypush/backend/http/manifest.yaml +++ b/platypush/backend/http/manifest.yaml @@ -1,7 +1,6 @@ manifest: events: {} install: - pip: - - gunicorn + pip: [] package: platypush.backend.http type: backend diff --git a/platypush/backend/inotify/manifest.yaml b/platypush/backend/inotify/manifest.yaml index d25b4247..c42ae80f 100644 --- a/platypush/backend/inotify/manifest.yaml +++ b/platypush/backend/inotify/manifest.yaml @@ -9,7 +9,11 @@ manifest: platypush.message.event.inotify.InotifyPermissionsChangeEvent: if the permissions of a resource are changed install: + apk: + - py3-inotify + apt: + - python3-inotify pip: - - inotify + - inotify package: platypush.backend.inotify type: backend diff --git a/platypush/backend/joystick/jstest/manifest.yaml b/platypush/backend/joystick/jstest/manifest.yaml index 8e97424b..a3c00db9 100644 --- a/platypush/backend/joystick/jstest/manifest.yaml +++ b/platypush/backend/joystick/jstest/manifest.yaml @@ -13,9 +13,11 @@ manifest: platypush.message.event.joystick.JoystickStateEvent: when the state of the joystick (i.e. some of itsaxes or buttons values) changes. install: + apk: + - linuxconsoletools apt: - joystick pacman: - - jsutils + - joyutils package: platypush.backend.joystick.jstest type: backend diff --git a/platypush/backend/kafka/manifest.yaml b/platypush/backend/kafka/manifest.yaml index e836bf91..0f95774f 100644 --- a/platypush/backend/kafka/manifest.yaml +++ b/platypush/backend/kafka/manifest.yaml @@ -1,7 +1,9 @@ manifest: events: {} install: + apt: + - python3-kafka pip: - - kafka + - kafka package: platypush.backend.kafka type: backend diff --git a/platypush/backend/log/http/manifest.yaml b/platypush/backend/log/http/manifest.yaml index ddf01ec1..b9990a56 100644 --- a/platypush/backend/log/http/manifest.yaml +++ b/platypush/backend/log/http/manifest.yaml @@ -2,7 +2,13 @@ manifest: events: platypush.message.event.log.http.HttpLogEvent: when a new log line is created. install: + apk: + - py3-watchdog + apt: + - python3-watchdog + pacman: + - python-watchdog pip: - - watchdog + - watchdog package: platypush.backend.log.http type: backend diff --git a/platypush/backend/midi/manifest.yaml b/platypush/backend/midi/manifest.yaml index 246262ab..f86af540 100644 --- a/platypush/backend/midi/manifest.yaml +++ b/platypush/backend/midi/manifest.yaml @@ -2,7 +2,12 @@ manifest: events: platypush.message.event.midi.MidiMessageEvent: when a new MIDI event is received install: + apt: + - python3-rtmidi + pacman: + - rtmidi + - python-rtmidi pip: - - rtmidi + - rtmidi package: platypush.backend.midi type: backend diff --git a/platypush/backend/mqtt/manifest.yaml b/platypush/backend/mqtt/manifest.yaml index d2bc08f4..db91a6ad 100644 --- a/platypush/backend/mqtt/manifest.yaml +++ b/platypush/backend/mqtt/manifest.yaml @@ -3,7 +3,13 @@ manifest: platypush.message.event.mqtt.MQTTMessageEvent: when a newmessage is received on one of the custom listeners install: + apk: + - py3-paho-mqtt + pacman: + - python-paho-mqtt + apt: + - python3-paho-mqtt pip: - - paho-mqtt + - paho-mqtt package: platypush.backend.mqtt type: backend diff --git a/platypush/backend/music/mpd/manifest.yaml b/platypush/backend/music/mpd/manifest.yaml index 4120bc3a..5fe8ed38 100644 --- a/platypush/backend/music/mpd/manifest.yaml +++ b/platypush/backend/music/mpd/manifest.yaml @@ -10,7 +10,11 @@ manifest: platypush.message.event.music.PlaylistChangeEvent: if the main playlist has changed platypush.message.event.music.VolumeChangeEvent: if the main volume has changed install: + apt: + - python3-mpd2 + pacman: + - python-mpd2 pip: - - python-mpd2 + - python-mpd2 package: platypush.backend.music.mpd type: backend diff --git a/platypush/backend/music/spotify/manifest.yaml b/platypush/backend/music/spotify/manifest.yaml index 8fd3f394..8c165cec 100644 --- a/platypush/backend/music/spotify/manifest.yaml +++ b/platypush/backend/music/spotify/manifest.yaml @@ -9,6 +9,9 @@ manifest: platypush.message.event.music.NewPlayingTrackEvent: if a new track is being played platypush.message.event.music.VolumeChangeEvent: if the volume changes install: + apk: + - sudo + - cargo apt: - sudo - cargo diff --git a/platypush/backend/scard/manifest.yaml b/platypush/backend/scard/manifest.yaml index 3181627f..41979eba 100644 --- a/platypush/backend/scard/manifest.yaml +++ b/platypush/backend/scard/manifest.yaml @@ -3,7 +3,13 @@ manifest: platypush.message.event.scard.SmartCardDetectedEvent: when a smart card is detected platypush.message.event.scard.SmartCardRemovedEvent: when a smart card is removed install: + apk: + - py3-pyscard + pacman: + - python-pyscard + apt: + - python3-pyscard pip: - - pyscard + - pyscard package: platypush.backend.scard type: backend diff --git a/platypush/backend/zwave/mqtt/manifest.yaml b/platypush/backend/zwave/mqtt/manifest.yaml index 37c82ecf..dcf51ad4 100644 --- a/platypush/backend/zwave/mqtt/manifest.yaml +++ b/platypush/backend/zwave/mqtt/manifest.yaml @@ -14,7 +14,13 @@ manifest: platypush.message.event.zwave.ZwaveValueChangedEvent: when the value of a node on the networkchanges. install: + apk: + - py3-paho-mqtt + pacman: + - python-paho-mqtt + apt: + - python3-paho-mqtt pip: - - paho-mqtt + - paho-mqtt package: platypush.backend.zwave.mqtt type: backend diff --git a/platypush/plugins/assistant/google/pushtotalk/manifest.yaml b/platypush/plugins/assistant/google/pushtotalk/manifest.yaml index efcd1a89..a56335c2 100644 --- a/platypush/plugins/assistant/google/pushtotalk/manifest.yaml +++ b/platypush/plugins/assistant/google/pushtotalk/manifest.yaml @@ -7,9 +7,18 @@ manifest: platypush.message.event.assistant.SpeechRecognizedEvent: when a new voice command is recognized install: + apk: + - py3-tenacity + - py3-google-auth + apt: + - python3-tenacity + - python3-google-auth + pacman: + - python-tenacity + - python-google-auth pip: - - tenacity - - google-assistant-sdk - - google-auth + - tenacity + - google-assistant-sdk + - google-auth package: platypush.plugins.assistant.google.pushtotalk type: plugin diff --git a/platypush/plugins/bluetooth/manifest.yaml b/platypush/plugins/bluetooth/manifest.yaml index c91cf473..c2e98a34 100644 --- a/platypush/plugins/bluetooth/manifest.yaml +++ b/platypush/plugins/bluetooth/manifest.yaml @@ -13,14 +13,20 @@ manifest: platypush.message.event.bluetooth.BluetoothScanResumedEvent: platypush.message.event.entities.EntityUpdateEvent: install: - pip: - - bleak - - bluetooth-numbers - - TheengsDecoder - - pydbus - - git+https://github.com/pybluez/pybluez - - git+https://github.com/BlackLight/PyOBEX + apk: + - py3-pydbus apt: - - libbluetooth-dev + - libbluetooth-dev + - python3-pydbus + pacman: + - python-pydbus + - python-bleak + pip: + - bleak + - bluetooth-numbers + - TheengsDecoder + - pydbus + - git+https://github.com/pybluez/pybluez + - git+https://github.com/BlackLight/PyOBEX package: platypush.plugins.bluetooth type: plugin diff --git a/platypush/plugins/calendar/ical/manifest.yaml b/platypush/plugins/calendar/ical/manifest.yaml index e451d788..2d0db184 100644 --- a/platypush/plugins/calendar/ical/manifest.yaml +++ b/platypush/plugins/calendar/ical/manifest.yaml @@ -1,7 +1,13 @@ manifest: events: {} install: + apk: + - py3-icalendar + apt: + - python3-icalendar + pacman: + - python-icalendar pip: - - icalendar + - icalendar package: platypush.plugins.calendar.ical type: plugin diff --git a/platypush/plugins/camera/cv/manifest.yaml b/platypush/plugins/camera/cv/manifest.yaml index 95a41ab1..79d042c6 100644 --- a/platypush/plugins/camera/cv/manifest.yaml +++ b/platypush/plugins/camera/cv/manifest.yaml @@ -1,9 +1,21 @@ manifest: events: {} install: + apk: + - py3-numpy + - py3-pillow + - py3-opencv + pacman: + - python-numpy + - python-pillow + - python-opencv + apt: + - python3-numpy + - python3-pillow + - python3-opencv pip: - - numpy - - opencv-python - - Pillow + - numpy + - opencv-python + - Pillow package: platypush.plugins.camera.cv type: plugin diff --git a/platypush/plugins/camera/ffmpeg/manifest.yaml b/platypush/plugins/camera/ffmpeg/manifest.yaml index ddf42506..822ca154 100644 --- a/platypush/plugins/camera/ffmpeg/manifest.yaml +++ b/platypush/plugins/camera/ffmpeg/manifest.yaml @@ -1,12 +1,20 @@ manifest: events: {} install: + apk: + - py3-numpy + - py3-pillow + - ffmpeg + pacman: + - python-numpy + - python-pillow + - ffmpeg + apt: + - python3-numpy + - python3-pillow + - ffmpeg pip: - numpy - Pillow - apt: - - ffmpeg - pacman: - - ffmpeg package: platypush.plugins.camera.ffmpeg type: plugin diff --git a/platypush/plugins/camera/gstreamer/manifest.yaml b/platypush/plugins/camera/gstreamer/manifest.yaml index 43e2cae4..7cb373f8 100644 --- a/platypush/plugins/camera/gstreamer/manifest.yaml +++ b/platypush/plugins/camera/gstreamer/manifest.yaml @@ -1,16 +1,25 @@ manifest: events: {} install: + apk: + - py3-numpy + - py3-pillow + - py3-gobject3 + - py3-gst + pacman: + - python-numpy + - python-pillow + - gst-python + - python-gobject + apt: + - python3-numpy + - python3-pillow + - python3-gi + - python3-gst-1.0 pip: - numpy - Pillow - pygobject - apt: - - python3-gi - - python3-gst-1.0 - pacman: - - gst-python - - python-gobject package: platypush.plugins.camera.gstreamer type: plugin diff --git a/platypush/plugins/camera/ir/mlx90640/manifest.yaml b/platypush/plugins/camera/ir/mlx90640/manifest.yaml index 8b9d230d..5dbd0b96 100644 --- a/platypush/plugins/camera/ir/mlx90640/manifest.yaml +++ b/platypush/plugins/camera/ir/mlx90640/manifest.yaml @@ -1,12 +1,20 @@ manifest: events: {} install: + apk: + - i2c-tools-dev + - py3-numpy + - py3-pillow + pacman: + - i2c-tools + - python-numpy + - python-pillow + apt: + - libi2c-dev + - python3-numpy + - python3-pillow pip: - numpy - Pillow - apt: - - libi2c-dev - pacman: - - i2c-tools package: platypush.plugins.camera.ir.mlx90640 type: plugin diff --git a/platypush/plugins/camera/pi/manifest.yaml b/platypush/plugins/camera/pi/manifest.yaml index d8e06a82..fecf8951 100644 --- a/platypush/plugins/camera/pi/manifest.yaml +++ b/platypush/plugins/camera/pi/manifest.yaml @@ -1,9 +1,18 @@ manifest: events: {} install: + apk: + - py3-numpy + - py3-pillow + pacman: + - python-numpy + - python-pillow + apt: + - python3-numpy + - python3-pillow pip: - - picamera - - numpy - - Pillow + - picamera + - numpy + - Pillow package: platypush.plugins.camera.pi type: plugin diff --git a/platypush/plugins/chat/irc/manifest.yaml b/platypush/plugins/chat/irc/manifest.yaml index 7bd2c814..a4d57492 100644 --- a/platypush/plugins/chat/irc/manifest.yaml +++ b/platypush/plugins/chat/irc/manifest.yaml @@ -21,5 +21,9 @@ manifest: package: platypush.plugins.chat.irc type: plugin install: + apt: + - python3-irc + pacman: + - python-irc pip: - irc diff --git a/platypush/plugins/clipboard/manifest.yaml b/platypush/plugins/clipboard/manifest.yaml index c63da55b..912eeb66 100644 --- a/platypush/plugins/clipboard/manifest.yaml +++ b/platypush/plugins/clipboard/manifest.yaml @@ -2,7 +2,9 @@ manifest: events: platypush.message.event.clipboard.ClipboardEvent: on clipboard update. install: + apk: + - py3-pyclip pip: - - pyclip + - pyclip package: platypush.plugins.clipboard type: plugin diff --git a/platypush/plugins/dbus/manifest.yaml b/platypush/plugins/dbus/manifest.yaml index da9988ed..2b1f3cdf 100644 --- a/platypush/plugins/dbus/manifest.yaml +++ b/platypush/plugins/dbus/manifest.yaml @@ -2,8 +2,17 @@ manifest: events: platypush.message.event.dbus.DbusSignalEvent: When a signal is received install: + apk: + - py3-pydbus + - py3-defusedxml + apt: + - python3-pydbus + - python3-defusedxml + pacman: + - python-pydbus + - python-defusedxml pip: - - pydbus - - defusedxml + - pydbus + - defusedxml package: platypush.plugins.dbus type: plugin diff --git a/platypush/plugins/dropbox/manifest.yaml b/platypush/plugins/dropbox/manifest.yaml index 2e6d807e..b91bab70 100644 --- a/platypush/plugins/dropbox/manifest.yaml +++ b/platypush/plugins/dropbox/manifest.yaml @@ -1,7 +1,11 @@ manifest: events: {} install: + apt: + - python3-dropbox + pacman: + - python-dropbox pip: - - dropbox + - dropbox package: platypush.plugins.dropbox type: plugin diff --git a/platypush/plugins/ffmpeg/manifest.yaml b/platypush/plugins/ffmpeg/manifest.yaml index 5f2454fd..ea08af1c 100644 --- a/platypush/plugins/ffmpeg/manifest.yaml +++ b/platypush/plugins/ffmpeg/manifest.yaml @@ -1,11 +1,14 @@ manifest: events: {} install: - pip: - - ffmpeg-python + apk: + - ffmpeg apt: - ffmpeg pacman: - ffmpeg + - python-ffmpeg + pip: + - ffmpeg-python package: platypush.plugins.ffmpeg type: plugin diff --git a/platypush/plugins/google/calendar/manifest.yaml b/platypush/plugins/google/calendar/manifest.yaml index c1b373d4..0811ce41 100644 --- a/platypush/plugins/google/calendar/manifest.yaml +++ b/platypush/plugins/google/calendar/manifest.yaml @@ -1,9 +1,20 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client + - google-api-python-client + - google-auth + - oauth2client package: platypush.plugins.google.calendar type: plugin diff --git a/platypush/plugins/google/drive/manifest.yaml b/platypush/plugins/google/drive/manifest.yaml index 6114d3a2..6aeba8e7 100644 --- a/platypush/plugins/google/drive/manifest.yaml +++ b/platypush/plugins/google/drive/manifest.yaml @@ -1,9 +1,20 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client + - google-api-python-client + - google-auth + - oauth2client package: platypush.plugins.google.drive type: plugin diff --git a/platypush/plugins/google/fit/manifest.yaml b/platypush/plugins/google/fit/manifest.yaml index 390b8172..1458f3c3 100644 --- a/platypush/plugins/google/fit/manifest.yaml +++ b/platypush/plugins/google/fit/manifest.yaml @@ -1,9 +1,20 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client + - google-api-python-client + - google-auth + - oauth2client package: platypush.plugins.google.fit type: plugin diff --git a/platypush/plugins/google/mail/manifest.yaml b/platypush/plugins/google/mail/manifest.yaml index 1a7df968..a67529b8 100644 --- a/platypush/plugins/google/mail/manifest.yaml +++ b/platypush/plugins/google/mail/manifest.yaml @@ -1,9 +1,20 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client + - google-api-python-client + - google-auth + - oauth2client package: platypush.plugins.google.mail type: plugin diff --git a/platypush/plugins/google/maps/manifest.yaml b/platypush/plugins/google/maps/manifest.yaml index 2af250c2..188c5a98 100644 --- a/platypush/plugins/google/maps/manifest.yaml +++ b/platypush/plugins/google/maps/manifest.yaml @@ -1,9 +1,20 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client + - google-api-python-client + - google-auth + - oauth2client package: platypush.plugins.google.maps type: plugin diff --git a/platypush/plugins/google/pubsub/manifest.yaml b/platypush/plugins/google/pubsub/manifest.yaml index f546ba3c..ddf2469c 100644 --- a/platypush/plugins/google/pubsub/manifest.yaml +++ b/platypush/plugins/google/pubsub/manifest.yaml @@ -1,10 +1,21 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client - - google-cloud-pubsub + - google-api-python-client + - google-auth + - oauth2client + - google-cloud-pubsub package: platypush.plugins.google.pubsub type: plugin diff --git a/platypush/plugins/google/translate/manifest.yaml b/platypush/plugins/google/translate/manifest.yaml index bee4f43d..1e2e45b0 100644 --- a/platypush/plugins/google/translate/manifest.yaml +++ b/platypush/plugins/google/translate/manifest.yaml @@ -1,10 +1,21 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client - - google-cloud-translate + - google-api-python-client + - google-auth + - oauth2client + - google-cloud-translate package: platypush.plugins.google.translate type: plugin diff --git a/platypush/plugins/google/youtube/manifest.yaml b/platypush/plugins/google/youtube/manifest.yaml index 94ee6d67..464b8499 100644 --- a/platypush/plugins/google/youtube/manifest.yaml +++ b/platypush/plugins/google/youtube/manifest.yaml @@ -1,9 +1,20 @@ manifest: events: {} install: + apk: + - py3-google-api-python-client + - py3-google-auth + - py3-oauth2client + apt: + - python3-google-auth + - python3-oauth2client + pacman: + - python-google-api-python-client + - python-google-auth + - python-oauth2client pip: - - google-api-python-client - - google-auth - - oauth2client + - google-api-python-client + - google-auth + - oauth2client package: platypush.plugins.google.youtube type: plugin diff --git a/platypush/plugins/hid/manifest.yaml b/platypush/plugins/hid/manifest.yaml index 04607710..f8ddbb95 100644 --- a/platypush/plugins/hid/manifest.yaml +++ b/platypush/plugins/hid/manifest.yaml @@ -4,6 +4,10 @@ manifest: platypush.message.event.hid.HidDeviceDisconnectedEvent: when a previously available device is disconnected platypush.message.event.hid.HidDeviceDataEvent: when a monitored device sends some data install: + apt: + - python3-hid + pacman: + - python-hid pip: - hid package: platypush.plugins.hid diff --git a/platypush/plugins/http/webpage/manifest.yaml b/platypush/plugins/http/webpage/manifest.yaml index 317fb5bf..04560d80 100644 --- a/platypush/plugins/http/webpage/manifest.yaml +++ b/platypush/plugins/http/webpage/manifest.yaml @@ -1,15 +1,20 @@ manifest: events: {} install: - pip: - - weasyprint + apk: + - sudo + - nodejs + - npm apt: - sudo - nodejs - npm pacman: - sudo + - nodejs - npm + pip: + - weasyprint exec: - sudo npm install -g @postlight/mercury-parser package: platypush.plugins.http.webpage diff --git a/platypush/plugins/inspect/manifest.yaml b/platypush/plugins/inspect/manifest.yaml index 42352b97..611e4c9a 100644 --- a/platypush/plugins/inspect/manifest.yaml +++ b/platypush/plugins/inspect/manifest.yaml @@ -1,7 +1,6 @@ manifest: events: {} install: - pip: - - docutils + pip: [] package: platypush.plugins.inspect type: plugin diff --git a/platypush/plugins/lastfm/manifest.yaml b/platypush/plugins/lastfm/manifest.yaml index ef01bc83..bde5a3b9 100644 --- a/platypush/plugins/lastfm/manifest.yaml +++ b/platypush/plugins/lastfm/manifest.yaml @@ -1,7 +1,13 @@ manifest: events: {} install: + apk: + - py3-pylast + apt: + - python3-pylast + pacman: + - python-pylast pip: - - pylast + - pylast package: platypush.plugins.lastfm type: plugin diff --git a/platypush/plugins/matrix/manifest.yaml b/platypush/plugins/matrix/manifest.yaml index b3482052..47b0dcb7 100644 --- a/platypush/plugins/matrix/manifest.yaml +++ b/platypush/plugins/matrix/manifest.yaml @@ -39,10 +39,13 @@ manifest: message seen by a user in a room is updated. platypush.message.event.matrix.MatrixUserPresenceEvent: when a user comes online or goes offline. + apk: + - olm-dev apt: - libolm-devel pacman: - libolm + - python-async-lru pip: - matrix-nio[e2e] - async_lru diff --git a/platypush/plugins/media/chromecast/manifest.yaml b/platypush/plugins/media/chromecast/manifest.yaml index 5e02465f..b976390a 100644 --- a/platypush/plugins/media/chromecast/manifest.yaml +++ b/platypush/plugins/media/chromecast/manifest.yaml @@ -1,7 +1,11 @@ manifest: events: {} install: + apk: + - py3-pychromecast + apt: + - python3-pychromecast pip: - - pychromecast + - pychromecast package: platypush.plugins.media.chromecast type: plugin diff --git a/platypush/plugins/media/gstreamer/manifest.yaml b/platypush/plugins/media/gstreamer/manifest.yaml index 8e50d745..7e8f620d 100644 --- a/platypush/plugins/media/gstreamer/manifest.yaml +++ b/platypush/plugins/media/gstreamer/manifest.yaml @@ -1,14 +1,17 @@ manifest: events: {} install: + apk: + - py3-gobject3 + - py3-gst apt: - python3-gi - python3-gst-1.0 - pip: - - pygobject pacman: - gst-python - python-gobject + pip: + - pygobject package: platypush.plugins.media.gstreamer type: plugin diff --git a/platypush/plugins/media/kodi/manifest.yaml b/platypush/plugins/media/kodi/manifest.yaml index 123e964f..7d323cfb 100644 --- a/platypush/plugins/media/kodi/manifest.yaml +++ b/platypush/plugins/media/kodi/manifest.yaml @@ -1,7 +1,11 @@ manifest: events: {} install: + apk: + - py3-kodi + pacman: + - python-kodi-json pip: - - kodi-json + - kodi-json package: platypush.plugins.media.kodi type: plugin diff --git a/platypush/plugins/media/mplayer/manifest.yaml b/platypush/plugins/media/mplayer/manifest.yaml index 41af7f62..298cfaba 100644 --- a/platypush/plugins/media/mplayer/manifest.yaml +++ b/platypush/plugins/media/mplayer/manifest.yaml @@ -1,6 +1,8 @@ manifest: events: {} install: + apk: + - mplayer apt: - mplayer pacman: diff --git a/platypush/plugins/media/mpv/manifest.yaml b/platypush/plugins/media/mpv/manifest.yaml index ce2ca462..5f9ef72c 100644 --- a/platypush/plugins/media/mpv/manifest.yaml +++ b/platypush/plugins/media/mpv/manifest.yaml @@ -1,11 +1,16 @@ manifest: events: {} install: - pip: - - python-mpv + apk: + - mpv + - py3-mpv apt: - mpv + - python3-mpv pacman: - mpv + - python-mpv + pip: + - python-mpv package: platypush.plugins.media.mpv type: plugin diff --git a/platypush/plugins/media/subtitles/manifest.yaml b/platypush/plugins/media/subtitles/manifest.yaml index 81bda093..24ca52cd 100644 --- a/platypush/plugins/media/subtitles/manifest.yaml +++ b/platypush/plugins/media/subtitles/manifest.yaml @@ -1,8 +1,10 @@ manifest: events: {} install: + apt: + - python3-webvtt pip: - - python-opensubtitles - - webvtt-py + - python-opensubtitles + - webvtt-py package: platypush.plugins.media.subtitles type: plugin diff --git a/platypush/plugins/media/vlc/manifest.yaml b/platypush/plugins/media/vlc/manifest.yaml index 13af0338..68ba56ce 100644 --- a/platypush/plugins/media/vlc/manifest.yaml +++ b/platypush/plugins/media/vlc/manifest.yaml @@ -1,11 +1,15 @@ manifest: events: {} install: - pip: - - python-vlc + apk: + - vlc + - py3-vlc apt: - vlc + - python3-vlc pacman: - vlc + pip: + - python-vlc package: platypush.plugins.media.vlc type: plugin diff --git a/platypush/plugins/midi/manifest.yaml b/platypush/plugins/midi/manifest.yaml index 3a91aba9..87ff4a13 100644 --- a/platypush/plugins/midi/manifest.yaml +++ b/platypush/plugins/midi/manifest.yaml @@ -1,7 +1,11 @@ manifest: events: {} install: + apt: + - python3-rtmidi + pacman: + - python-rtmidi pip: - - python-rtmidi + - python-rtmidi package: platypush.plugins.midi type: plugin diff --git a/platypush/plugins/ml/cv/manifest.yaml b/platypush/plugins/ml/cv/manifest.yaml index 47414168..a838054c 100644 --- a/platypush/plugins/ml/cv/manifest.yaml +++ b/platypush/plugins/ml/cv/manifest.yaml @@ -1,8 +1,17 @@ manifest: events: {} install: + apk: + - py3-numpy + - py3-opencv + pacman: + - python-numpy + - python-opencv + apt: + - python3-numpy + - python3-opencv pip: - - numpy - - opencv-python + - numpy + - opencv-python package: platypush.plugins.ml.cv type: plugin diff --git a/platypush/plugins/mqtt/manifest.yaml b/platypush/plugins/mqtt/manifest.yaml index 267ac1d4..6a49eca3 100644 --- a/platypush/plugins/mqtt/manifest.yaml +++ b/platypush/plugins/mqtt/manifest.yaml @@ -1,7 +1,13 @@ manifest: events: {} install: + apk: + - py3-paho-mqtt + pacman: + - python-paho-mqtt + apt: + - python3-paho-mqtt pip: - - paho-mqtt + - paho-mqtt package: platypush.plugins.mqtt type: plugin diff --git a/platypush/plugins/music/mpd/manifest.yaml b/platypush/plugins/music/mpd/manifest.yaml index 42824c0e..f96099e6 100644 --- a/platypush/plugins/music/mpd/manifest.yaml +++ b/platypush/plugins/music/mpd/manifest.yaml @@ -1,7 +1,11 @@ manifest: events: {} install: + apt: + - python-mpd + pacman: + - python-mpd2 pip: - - python-mpd2 + - python-mpd2 package: platypush.plugins.music.mpd type: plugin diff --git a/platypush/plugins/otp/manifest.yaml b/platypush/plugins/otp/manifest.yaml index a4e2b512..e256237c 100644 --- a/platypush/plugins/otp/manifest.yaml +++ b/platypush/plugins/otp/manifest.yaml @@ -1,7 +1,13 @@ manifest: events: {} install: + apk: + - py3-otp + apt: + - python3-pyotp + pacman: + - python-pyotp pip: - - pyotp + - pyotp package: platypush.plugins.otp type: plugin diff --git a/platypush/plugins/printer/cups/manifest.yaml b/platypush/plugins/printer/cups/manifest.yaml index fa8e2c61..9f7e4326 100644 --- a/platypush/plugins/printer/cups/manifest.yaml +++ b/platypush/plugins/printer/cups/manifest.yaml @@ -1,9 +1,14 @@ manifest: events: {} install: - pip: - - pycups + apk: + - py3-pycups apt: - - libcups2-dev + - libcups2-dev + - python3-cups + pacman: + - python-pycups + pip: + - pycups package: platypush.plugins.printer.cups type: plugin diff --git a/platypush/plugins/qrcode/manifest.yaml b/platypush/plugins/qrcode/manifest.yaml index b64b1b80..2cbea67e 100644 --- a/platypush/plugins/qrcode/manifest.yaml +++ b/platypush/plugins/qrcode/manifest.yaml @@ -1,10 +1,25 @@ manifest: events: {} install: + apk: + - py3-numpy + - py3-pillow + - py3-qrcode + - py3-pyzbar + pacman: + - python-numpy + - python-pillow + - python-qrcode + - pyzbar + apt: + - python3-numpy + - python3-pillow + - python3-pyzbar + - python3-qrcode pip: - - numpy - - qrcode - - pyzbar - - Pillow + - numpy + - qrcode + - pyzbar + - Pillow package: platypush.plugins.qrcode type: plugin diff --git a/platypush/plugins/rss/manifest.yaml b/platypush/plugins/rss/manifest.yaml index d596d3a2..d025ff16 100644 --- a/platypush/plugins/rss/manifest.yaml +++ b/platypush/plugins/rss/manifest.yaml @@ -2,6 +2,15 @@ manifest: events: platypush.message.event.rss.NewFeedEntryEvent: when a new entry is received on a subscribed feed. install: + apk: + - py3-feedparser + - py3-defusedxml + apt: + - python3-feedparser + - python3-defusedxml + pacman: + - python-feedparser + - python-defusedxml pip: - feedparser - defusedxml diff --git a/platypush/plugins/rtorrent/manifest.yaml b/platypush/plugins/rtorrent/manifest.yaml index 8c6da50c..88f7bd6b 100644 --- a/platypush/plugins/rtorrent/manifest.yaml +++ b/platypush/plugins/rtorrent/manifest.yaml @@ -15,6 +15,8 @@ manifest: removed. platypush.message.event.torrent.TorrentResumedEvent: when a transfer is resumed. install: + apk: + - rtorrent apt: - rtorrent pacman: diff --git a/platypush/plugins/serial/manifest.yaml b/platypush/plugins/serial/manifest.yaml index 6298d06b..1af0e50f 100644 --- a/platypush/plugins/serial/manifest.yaml +++ b/platypush/plugins/serial/manifest.yaml @@ -2,6 +2,12 @@ manifest: events: - platypush.message.event.sensor.SensorDataChangeEvent: install: + apk: + - py3-pyserial + apt: + - python3-serial + pacman: + - python-pyserial pip: - pyserial package: platypush.plugins.serial diff --git a/platypush/plugins/sound/manifest.yaml b/platypush/plugins/sound/manifest.yaml index d8166fe0..6facfed2 100644 --- a/platypush/plugins/sound/manifest.yaml +++ b/platypush/plugins/sound/manifest.yaml @@ -9,14 +9,21 @@ manifest: platypush.message.event.sound.SoundRecordingStartedEvent: on recording start platypush.message.event.sound.SoundRecordingStoppedEvent: on recording stop install: - pip: - - sounddevice - - numpy + apk: + - ffmpeg + - portaudio-dev + - py3-numpy apt: - - ffmpeg - - portaudio19-dev + - ffmpeg + - portaudio19-dev + - python3-numpy pacman: - - ffmpeg - - portaudio + - ffmpeg + - portaudio + - python-numpy + - python-sounddevice + pip: + - sounddevice + - numpy package: platypush.plugins.sound type: plugin diff --git a/platypush/plugins/ssh/manifest.yaml b/platypush/plugins/ssh/manifest.yaml index 62b91a40..f50e395f 100644 --- a/platypush/plugins/ssh/manifest.yaml +++ b/platypush/plugins/ssh/manifest.yaml @@ -1,7 +1,13 @@ manifest: events: {} install: + apk: + - py3-paramiko + apt: + - python3-paramiko + pacman: + - python-paramiko pip: - - paramiko + - paramiko package: platypush.plugins.ssh type: plugin diff --git a/platypush/plugins/stt/deepspeech/manifest.yaml b/platypush/plugins/stt/deepspeech/manifest.yaml index 8a07f779..e5d0a2b2 100644 --- a/platypush/plugins/stt/deepspeech/manifest.yaml +++ b/platypush/plugins/stt/deepspeech/manifest.yaml @@ -1,9 +1,16 @@ manifest: events: {} install: + apk: + - py3-numpy + pacman: + - python-numpy + - python-sounddevice + apt: + - python3-numpy pip: - - deepspeech - - numpy - - sounddevice + - deepspeech + - numpy + - sounddevice package: platypush.plugins.stt.deepspeech type: plugin diff --git a/platypush/plugins/system/manifest.yaml b/platypush/plugins/system/manifest.yaml index 67137e13..c0620487 100644 --- a/platypush/plugins/system/manifest.yaml +++ b/platypush/plugins/system/manifest.yaml @@ -1,7 +1,13 @@ manifest: events: {} install: + apk: + - py3-py-cpuinfo + apt: + - python3-cpuinfo + pacman: + - python-py-cpuinfo pip: - - py-cpuinfo + - py-cpuinfo package: platypush.plugins.system type: plugin diff --git a/platypush/plugins/tensorflow/manifest.yaml b/platypush/plugins/tensorflow/manifest.yaml index f42dbc48..18994901 100644 --- a/platypush/plugins/tensorflow/manifest.yaml +++ b/platypush/plugins/tensorflow/manifest.yaml @@ -13,10 +13,21 @@ manifest: platypush.message.event.tensorflow.TensorflowTrainStartedEvent: when a Tensorflow model starts being trained. install: + apk: + - py3-numpy + - py3-pandas + pacman: + - python-numpy + - python-pandas + - python-tensorflow + - python-keras + apt: + - python3-numpy + - python3-pandas pip: - - numpy - - pandas - - tensorflow - - keras + - numpy + - pandas + - tensorflow + - keras package: platypush.plugins.tensorflow type: plugin diff --git a/platypush/plugins/torrent/manifest.yaml b/platypush/plugins/torrent/manifest.yaml index bbddb7f2..5e3eda86 100644 --- a/platypush/plugins/torrent/manifest.yaml +++ b/platypush/plugins/torrent/manifest.yaml @@ -1,7 +1,13 @@ manifest: events: {} install: + apk: + - py3-libtorrent-rasterbar + apt: + - python3-libtorrent + pacman: + - libtorrent-rasterbar pip: - - python-libtorrent + - libtorrent package: platypush.plugins.torrent type: plugin diff --git a/platypush/plugins/twilio/manifest.yaml b/platypush/plugins/twilio/manifest.yaml index fa160f53..0ad570b9 100644 --- a/platypush/plugins/twilio/manifest.yaml +++ b/platypush/plugins/twilio/manifest.yaml @@ -1,7 +1,9 @@ manifest: events: {} install: + apt: + - python3-twilio pip: - - twilio + - twilio package: platypush.plugins.twilio type: plugin diff --git a/platypush/plugins/xmpp/manifest.yaml b/platypush/plugins/xmpp/manifest.yaml index fd4a67f6..009fce8b 100644 --- a/platypush/plugins/xmpp/manifest.yaml +++ b/platypush/plugins/xmpp/manifest.yaml @@ -29,6 +29,13 @@ manifest: platypush.message.event.xmpp.XmppRoomUserUnavailableEvent: platypush.message.event.xmpp.XmppUserAvailableEvent: platypush.message.event.xmpp.XmppUserUnavailableEvent: + apk: + - py3-tz + apt: + - python3-aioxmpp + - python3-tz + pacman: + - python-pytz pip: - aioxmpp - pytz diff --git a/platypush/plugins/zeroconf/manifest.yaml b/platypush/plugins/zeroconf/manifest.yaml index 695516fc..b8eefdf6 100644 --- a/platypush/plugins/zeroconf/manifest.yaml +++ b/platypush/plugins/zeroconf/manifest.yaml @@ -7,7 +7,6 @@ manifest: platypush.message.event.zeroconf.ZeroconfServiceUpdatedEvent: when a service is updated. install: - pip: - - zeroconf + pip: [] package: platypush.plugins.zeroconf type: plugin diff --git a/platypush/plugins/zigbee/mqtt/manifest.yaml b/platypush/plugins/zigbee/mqtt/manifest.yaml index d8ee99a7..6a47dd35 100644 --- a/platypush/plugins/zigbee/mqtt/manifest.yaml +++ b/platypush/plugins/zigbee/mqtt/manifest.yaml @@ -39,7 +39,13 @@ manifest: platypush.message.event.zigbee.mqtt.ZigbeeMqttOnlineEvent: > when the service comes online. install: + apk: + - py3-paho-mqtt + pacman: + - python-paho-mqtt + apt: + - python3-paho-mqtt pip: - - paho-mqtt + - paho-mqtt package: platypush.plugins.zigbee.mqtt type: plugin diff --git a/platypush/plugins/zwave/mqtt/manifest.yaml b/platypush/plugins/zwave/mqtt/manifest.yaml index 96cccdaa..c92540d9 100644 --- a/platypush/plugins/zwave/mqtt/manifest.yaml +++ b/platypush/plugins/zwave/mqtt/manifest.yaml @@ -17,7 +17,13 @@ manifest: platypush.message.event.zwave.ZwaveValueChangedEvent: > when the value of a node on the network changes. install: + apk: + - py3-paho-mqtt + pacman: + - python-paho-mqtt + apt: + - python3-paho-mqtt pip: - - paho-mqtt + - paho-mqtt package: platypush.plugins.zwave.mqtt type: plugin -- 2.45.1 From e9dbcff1a848548909c18f2e834c8a234dbab2ee Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Wed, 16 Aug 2023 23:52:54 +0200 Subject: [PATCH 2/7] Removed old `bin/platypush` script. It's already been replaced by the setup.py entry point. --- bin/platypush | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100755 bin/platypush diff --git a/bin/platypush b/bin/platypush deleted file mode 100755 index 2661c30c..00000000 --- a/bin/platypush +++ /dev/null @@ -1,13 +0,0 @@ -#!python3 - -import sys - -from platypush.app import Application - - -if __name__ == '__main__': - app = Application.build(*sys.argv[1:]) - app.run() - - -# vim:sw=4:ts=4:et: -- 2.45.1 From a52de0e0863159d692cbec41268d1253b9422390 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Thu, 17 Aug 2023 00:35:39 +0200 Subject: [PATCH 3/7] Removed tz dependency. --- requirements.txt | 1 - setup.py | 1 - 2 files changed, 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 22900c92..0268448d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,6 @@ requests rsa sqlalchemy tornado -tz websocket-client websockets zeroconf>=0.27.0 diff --git a/setup.py b/setup.py index e67b5713..1f2bf8d9 100755 --- a/setup.py +++ b/setup.py @@ -77,7 +77,6 @@ setup( 'rsa', 'sqlalchemy', 'tornado', - 'tz', 'websocket-client', 'websockets', 'wheel', -- 2.45.1 From 3bf068e0b2b2b54a71af73c147ab75eea1d876f3 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Thu, 17 Aug 2023 01:35:39 +0200 Subject: [PATCH 4/7] The __main__ function should take no arguments. setup.py won't pass any arguments to `main()`, so the default entry point should get them itself from `sys.argv`. --- platypush/__main__.py | 4 +--- platypush/runner/__init__.py | 6 ++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platypush/__main__.py b/platypush/__main__.py index 737e265b..fdd647fe 100644 --- a/platypush/__main__.py +++ b/platypush/__main__.py @@ -1,5 +1,3 @@ -import sys - from platypush.runner import main -main(*sys.argv[1:]) +main() diff --git a/platypush/runner/__init__.py b/platypush/runner/__init__.py index e0c8269f..1ea84469 100644 --- a/platypush/runner/__init__.py +++ b/platypush/runner/__init__.py @@ -1,7 +1,9 @@ +import sys + from ._runner import ApplicationRunner -def main(*args: str): +def main(): """ Main application entry point. @@ -11,7 +13,7 @@ def main(*args: str): """ app_runner = ApplicationRunner() - app_runner.run(*args) + app_runner.run(*sys.argv[1:]) __all__ = ["ApplicationRunner", "main"] -- 2.45.1 From ec2b8da9839bd5e63299595642d0b4c6b982e119 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Thu, 17 Aug 2023 01:49:41 +0200 Subject: [PATCH 5/7] Ignore Redis errors when a backend sends an unregister notify event. When that happens, it's most likely that the application is already stopping and the Redis service has already been terminated. --- platypush/backend/__init__.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/platypush/backend/__init__.py b/platypush/backend/__init__.py index c8b0ea65..4835e154 100644 --- a/platypush/backend/__init__.py +++ b/platypush/backend/__init__.py @@ -441,6 +441,8 @@ class Backend(Thread, EventGenerator, ExtensionWithManifest): """ Unregister the Zeroconf service configuration if available. """ + from redis import exceptions + if self.zeroconf and self.zeroconf_info: try: self.zeroconf.unregister_service(self.zeroconf_info) @@ -458,17 +460,22 @@ class Backend(Thread, EventGenerator, ExtensionWithManifest): except TimeoutError: pass - if self.zeroconf_info: - self.bus.post( - ZeroconfServiceRemovedEvent( - service_type=self.zeroconf_info.type, - service_name=self.zeroconf_info.name, + try: + if self.zeroconf_info: + self.bus.post( + ZeroconfServiceRemovedEvent( + service_type=self.zeroconf_info.type, + service_name=self.zeroconf_info.name, + ) ) - ) - else: - self.bus.post( - ZeroconfServiceRemovedEvent(service_type=None, service_name=None) - ) + else: + self.bus.post( + ZeroconfServiceRemovedEvent( + service_type=None, service_name=None + ) + ) + except exceptions.ConnectionError: + pass self.zeroconf_info = None self.zeroconf = None -- 2.45.1 From adfedfa2ddb67fea68cbcfd4c5c15fd8f83ce557 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Thu, 17 Aug 2023 02:36:40 +0200 Subject: [PATCH 6/7] s/TimeoutError/AssertionError/ if get_entities_engine times out. --- platypush/entities/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platypush/entities/__init__.py b/platypush/entities/__init__.py index 4f5d46f7..55489874 100644 --- a/platypush/entities/__init__.py +++ b/platypush/entities/__init__.py @@ -52,7 +52,8 @@ def get_entities_engine(timeout: Optional[float] = None) -> EntitiesEngine: Event().wait(1) - assert _engine, 'The entities engine has not been initialized' + if not _engine: + raise TimeoutError('The entities engine has not been initialized') return _engine -- 2.45.1 From bf7d060b81741204d19f5abb033fd18afc28906e Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Thu, 17 Aug 2023 02:47:30 +0200 Subject: [PATCH 7/7] Added `@ensure_initialized` decorator to actions in `variable`. The `variable` plugin may break in the constructor the first time the application is started. That's because it tries to initialize the cache of stored variables, but the local database hasn't yet been initialized. That's because plugins are registered _before_ the entities engine is initialized, as the entities engine assumes that it already has plugins to scan for entities. Therefore, the initialization of the `variable` plugin's cache should be lazy (only done upon the first call to `get`/`set` etc.), in order to prevent deadlock situations where the plugin waits for the engine to start, but the engine will be initialized only after the plugin is ready. And the lazy initialization logic should also ensure that the entities engine has been properly started (and emit a `TimeoutError` if that's not the case), in order to prevent race conditions. --- platypush/plugins/variable/__init__.py | 59 +++++++++++++++++++++----- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/platypush/plugins/variable/__init__.py b/platypush/plugins/variable/__init__.py index 85520f70..5c4f2659 100644 --- a/platypush/plugins/variable/__init__.py +++ b/platypush/plugins/variable/__init__.py @@ -1,11 +1,45 @@ -from typing import Collection, Dict, Iterable, Optional, Union +from functools import wraps +from threading import Event, RLock +from typing import Any, Callable, Collection, Dict, Iterable, Optional, Union from typing_extensions import override -from platypush.entities import EntityManager +from platypush.entities import EntityManager, get_entities_engine from platypush.entities.variables import Variable from platypush.plugins import Plugin, action +# pylint: disable=protected-access +def ensure_initialized(f: Callable[..., Any]): + """ + Ensures that the entities engine has been initialized before + reading/writing the db. + + It also performs lazy initialization of the variables in the local cache. + """ + + @wraps(f) + def wrapper(*args, **kwargs): + self: VariablePlugin = args[0] + + if not self._initialized.is_set(): + with self._init_lock: + get_entities_engine(timeout=20) + + if not self._initialized.is_set(): + self._initialized.set() + with self._db.get_session() as session: + self._db_vars.update( + { # type: ignore + str(var.name): var.value + for var in session.query(Variable).all() + } + ) + + return f(*args, **kwargs) + + return wrapper + + class VariablePlugin(Plugin, EntityManager): """ This plugin allows you to manipulate context variables that can be @@ -17,18 +51,15 @@ class VariablePlugin(Plugin, EntityManager): def __init__(self, **kwargs): super().__init__(**kwargs) - db = self._db self._db_vars: Dict[str, Optional[str]] = {} """ Local cache for db variables. """ - - with db.get_session() as session: - self._db_vars.update( - { # type: ignore - str(var.name): var.value for var in session.query(Variable).all() - } - ) + self._initialized = Event() + """ Lazy initialization event for the _db_vars map. """ + self._init_lock = RLock() + """ Lock for the _db_vars map initialization. """ @action + @ensure_initialized def get(self, name: Optional[str] = None, default_value=None): """ Get the value of a variable by name from the local db. @@ -45,6 +76,7 @@ class VariablePlugin(Plugin, EntityManager): ) @action + @ensure_initialized def set(self, **kwargs): """ Set a variable or a set of variables on the local db. @@ -57,6 +89,7 @@ class VariablePlugin(Plugin, EntityManager): return kwargs @action + @ensure_initialized def delete(self, name: str): """ Delete a variable from the database. @@ -76,6 +109,7 @@ class VariablePlugin(Plugin, EntityManager): return True @action + @ensure_initialized def unset(self, name: str): """ Unset a variable by name if it's set on the local db. @@ -89,6 +123,7 @@ class VariablePlugin(Plugin, EntityManager): return self.set(**{name: None}) @action + @ensure_initialized def mget(self, name: str): """ Get the value of a variable by name from Redis. @@ -100,6 +135,7 @@ class VariablePlugin(Plugin, EntityManager): return self._redis.mget([name]) @action + @ensure_initialized def mset(self, **kwargs): """ Set a variable or a set of variables on Redis. @@ -112,6 +148,7 @@ class VariablePlugin(Plugin, EntityManager): return kwargs @action + @ensure_initialized def munset(self, name: str): """ Unset a Redis variable by name if it's set @@ -122,6 +159,7 @@ class VariablePlugin(Plugin, EntityManager): return self._redis.delete(name) @action + @ensure_initialized def expire(self, name: str, expire: int): """ Set a variable expiration on Redis @@ -157,6 +195,7 @@ class VariablePlugin(Plugin, EntityManager): @override @action + @ensure_initialized def status(self, *_, **__): variables = { name: value for name, value in self._db_vars.items() if value is not None -- 2.45.1