Extended manifest files with Python system packages (if available) #275

Merged
blacklight merged 7 commits from 274/refactor-integrations-manifests into master 2023-08-17 02:56:15 +02:00
77 changed files with 624 additions and 176 deletions

View File

@ -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:

View File

@ -1,5 +1,3 @@
import sys
from platypush.runner import main
main(*sys.argv[1:])
main()

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,6 @@
manifest:
events: {}
install:
pip:
- gunicorn
pip: []
package: platypush.backend.http
type: backend

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,9 @@
manifest:
events: {}
install:
apt:
- python3-kafka
pip:
- kafka
- kafka
package: platypush.backend.kafka
type: backend

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -21,5 +21,9 @@ manifest:
package: platypush.plugins.chat.irc
type: plugin
install:
apt:
- python3-irc
pacman:
- python-irc
pip:
- irc

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,11 @@
manifest:
events: {}
install:
apt:
- python3-dropbox
pacman:
- python-dropbox
pip:
- dropbox
- dropbox
package: platypush.plugins.dropbox
type: plugin

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,6 @@
manifest:
events: {}
install:
pip:
- docutils
pip: []
package: platypush.plugins.inspect
type: plugin

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,11 @@
manifest:
events: {}
install:
apk:
- py3-pychromecast
apt:
- python3-pychromecast
pip:
- pychromecast
- pychromecast
package: platypush.plugins.media.chromecast
type: plugin

View File

@ -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

View File

@ -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

View File

@ -1,6 +1,8 @@
manifest:
events: {}
install:
apk:
- mplayer
apt:
- mplayer
pacman:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,11 @@
manifest:
events: {}
install:
apt:
- python3-rtmidi
pacman:
- python-rtmidi
pip:
- python-rtmidi
- python-rtmidi
package: platypush.plugins.midi
type: plugin

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -15,6 +15,8 @@ manifest:
removed.
platypush.message.event.torrent.TorrentResumedEvent: when a transfer is resumed.
install:
apk:
- rtorrent
apt:
- rtorrent
pacman:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,9 @@
manifest:
events: {}
install:
apt:
- python3-twilio
pip:
- twilio
- twilio
package: platypush.plugins.twilio
type: plugin

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"]

View File

@ -20,7 +20,6 @@ requests
rsa
sqlalchemy
tornado
tz
websocket-client
websockets
zeroconf>=0.27.0

View File

@ -77,7 +77,6 @@ setup(
'rsa',
'sqlalchemy',
'tornado',
'tz',
'websocket-client',
'websockets',
'wheel',