forked from platypush/platypush
[WIP]
This commit is contained in:
parent
c17d0080b5
commit
cbe2e7bbfe
6 changed files with 942 additions and 522 deletions
|
@ -138,15 +138,12 @@ latex_elements = {
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
#
|
#
|
||||||
# 'papersize': 'letterpaper',
|
# 'papersize': 'letterpaper',
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
#
|
#
|
||||||
# 'pointsize': '10pt',
|
# 'pointsize': '10pt',
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
#
|
#
|
||||||
# 'preamble': '',
|
# 'preamble': '',
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
# Latex figure (float) alignment
|
||||||
#
|
#
|
||||||
# 'figure_align': 'htbp',
|
# 'figure_align': 'htbp',
|
||||||
|
@ -156,8 +153,7 @@ latex_elements = {
|
||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'platypush.tex', 'platypush Documentation',
|
(master_doc, 'platypush.tex', 'platypush Documentation', 'BlackLight', 'manual'),
|
||||||
'BlackLight', 'manual'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -165,10 +161,7 @@ latex_documents = [
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [(master_doc, 'platypush', 'platypush Documentation', [author], 1)]
|
||||||
(master_doc, 'platypush', 'platypush Documentation',
|
|
||||||
[author], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output ----------------------------------------------
|
# -- Options for Texinfo output ----------------------------------------------
|
||||||
|
@ -177,9 +170,15 @@ man_pages = [
|
||||||
# (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 = [
|
||||||
(master_doc, 'platypush', 'platypush Documentation',
|
(
|
||||||
author, 'platypush', 'One line description of project.',
|
master_doc,
|
||||||
'Miscellaneous'),
|
'platypush',
|
||||||
|
'platypush Documentation',
|
||||||
|
author,
|
||||||
|
'platypush',
|
||||||
|
'One line description of project.',
|
||||||
|
'Miscellaneous',
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -199,99 +198,101 @@ autodoc_default_options = {
|
||||||
'inherited-members': True,
|
'inherited-members': True,
|
||||||
}
|
}
|
||||||
|
|
||||||
autodoc_mock_imports = ['googlesamples.assistant.grpc.audio_helpers',
|
autodoc_mock_imports = [
|
||||||
'google.assistant.embedded',
|
'googlesamples.assistant.grpc.audio_helpers',
|
||||||
'google.assistant.library',
|
'google.assistant.embedded',
|
||||||
'google.assistant.library.event',
|
'google.assistant.library',
|
||||||
'google.assistant.library.file_helpers',
|
'google.assistant.library.event',
|
||||||
'google.oauth2.credentials',
|
'google.assistant.library.file_helpers',
|
||||||
'oauth2client',
|
'google.oauth2.credentials',
|
||||||
'apiclient',
|
'oauth2client',
|
||||||
'tenacity',
|
'apiclient',
|
||||||
'smartcard',
|
'tenacity',
|
||||||
'Leap',
|
'smartcard',
|
||||||
'oauth2client',
|
'Leap',
|
||||||
'rtmidi',
|
'oauth2client',
|
||||||
'bluetooth',
|
'rtmidi',
|
||||||
'gevent.wsgi',
|
'bluetooth',
|
||||||
'Adafruit_IO',
|
'gevent.wsgi',
|
||||||
'pyperclip',
|
'Adafruit_IO',
|
||||||
'pydbus',
|
'pyperclip',
|
||||||
'inputs',
|
'pydbus',
|
||||||
'inotify',
|
'inputs',
|
||||||
'omxplayer',
|
'inotify',
|
||||||
'plexapi',
|
'omxplayer',
|
||||||
'cwiid',
|
'plexapi',
|
||||||
'sounddevice',
|
'cwiid',
|
||||||
'soundfile',
|
'sounddevice',
|
||||||
'numpy',
|
'soundfile',
|
||||||
'cv2',
|
'numpy',
|
||||||
'nfc',
|
'cv2',
|
||||||
'ndef',
|
'nfc',
|
||||||
'bcrypt',
|
'ndef',
|
||||||
'google',
|
'bcrypt',
|
||||||
'feedparser',
|
'google',
|
||||||
'kafka',
|
'feedparser',
|
||||||
'googlesamples',
|
'kafka',
|
||||||
'icalendar',
|
'googlesamples',
|
||||||
'httplib2',
|
'icalendar',
|
||||||
'mpd',
|
'httplib2',
|
||||||
'serial',
|
'mpd',
|
||||||
'pyHS100',
|
'serial',
|
||||||
'grpc',
|
'pyHS100',
|
||||||
'envirophat',
|
'grpc',
|
||||||
'gps',
|
'envirophat',
|
||||||
'picamera',
|
'gps',
|
||||||
'pmw3901',
|
'picamera',
|
||||||
'PIL',
|
'pmw3901',
|
||||||
'croniter',
|
'PIL',
|
||||||
'pyaudio',
|
'croniter',
|
||||||
'avs',
|
'pyaudio',
|
||||||
'PyOBEX',
|
'avs',
|
||||||
'todoist',
|
'PyOBEX',
|
||||||
'trello',
|
'todoist',
|
||||||
'telegram',
|
'trello',
|
||||||
'telegram.ext',
|
'telegram',
|
||||||
'pyfirmata2',
|
'telegram.ext',
|
||||||
'cups',
|
'pyfirmata2',
|
||||||
'graphyte',
|
'cups',
|
||||||
'cpuinfo',
|
'graphyte',
|
||||||
'psutil',
|
'cpuinfo',
|
||||||
'openzwave',
|
'psutil',
|
||||||
'deepspeech',
|
'openzwave',
|
||||||
'wave',
|
'deepspeech',
|
||||||
'pvporcupine ',
|
'wave',
|
||||||
'pvcheetah',
|
'pvporcupine ',
|
||||||
'pyotp',
|
'pvcheetah',
|
||||||
'linode_api4',
|
'pyotp',
|
||||||
'pyzbar',
|
'linode_api4',
|
||||||
'tensorflow',
|
'pyzbar',
|
||||||
'keras',
|
'tensorflow',
|
||||||
'pandas',
|
'keras',
|
||||||
'samsungtvws',
|
'pandas',
|
||||||
'paramiko',
|
'samsungtvws',
|
||||||
'luma',
|
'paramiko',
|
||||||
'zeroconf',
|
'luma',
|
||||||
'dbus',
|
'zeroconf',
|
||||||
'gi',
|
'dbus',
|
||||||
'gi.repository',
|
'gi',
|
||||||
'twilio',
|
'gi.repository',
|
||||||
'Adafruit_Python_DHT',
|
'twilio',
|
||||||
'RPi.GPIO',
|
'Adafruit_Python_DHT',
|
||||||
'RPLCD',
|
'RPi.GPIO',
|
||||||
'imapclient',
|
'RPLCD',
|
||||||
'pysmartthings',
|
'imapclient',
|
||||||
'aiohttp',
|
'pysmartthings',
|
||||||
'watchdog',
|
'aiohttp',
|
||||||
'pyngrok',
|
'watchdog',
|
||||||
'irc',
|
'pyngrok',
|
||||||
'irc.bot',
|
'irc',
|
||||||
'irc.strings',
|
'irc.bot',
|
||||||
'irc.client',
|
'irc.strings',
|
||||||
'irc.connection',
|
'irc.client',
|
||||||
'irc.events',
|
'irc.connection',
|
||||||
'defusedxml',
|
'irc.events',
|
||||||
]
|
'defusedxml',
|
||||||
|
'nio',
|
||||||
|
]
|
||||||
|
|
||||||
sys.path.insert(0, os.path.abspath('../..'))
|
sys.path.insert(0, os.path.abspath('../..'))
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,92 @@ class MatrixMessageEvent(MatrixEvent):
|
||||||
super().__init__(*args, body=body, **kwargs)
|
super().__init__(*args, body=body, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixMediaMessageEvent(MatrixMessageEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a media message is received on a subscribed room.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, url: str, **kwargs):
|
||||||
|
"""
|
||||||
|
:param url: The URL of the media file.
|
||||||
|
"""
|
||||||
|
super().__init__(*args, url=url, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixStickerEvent(MatrixMediaMessageEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a sticker is sent to a room.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixReactionEvent(MatrixEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a user submits a reaction to an event.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, in_response_to_event_id: str, **kwargs):
|
||||||
|
"""
|
||||||
|
:param in_response_to_event_id: The ID of the URL related to the reaction.
|
||||||
|
"""
|
||||||
|
super().__init__(
|
||||||
|
*args, in_response_to_event_id=in_response_to_event_id, **kwargs
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixEncryptedMessageEvent(MatrixMessageEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a message is received but the client doesn't
|
||||||
|
have the E2E keys to decrypt it, or encryption has not been enabled.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixCallEvent(MatrixEvent):
|
||||||
|
"""
|
||||||
|
Base class for Matrix call events.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, *args, call_id: str, version: int, sdp: str | None = None, **kwargs
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
:param call_id: The unique ID of the call.
|
||||||
|
:param version: An increasing integer representing the version of the call.
|
||||||
|
:param sdp: SDP text of the session description.
|
||||||
|
"""
|
||||||
|
super().__init__(*args, call_id=call_id, version=version, sdp=sdp, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixCallInviteEvent(MatrixCallEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when the user is invited to a call.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, invite_validity: float | None = None, **kwargs):
|
||||||
|
"""
|
||||||
|
:param invite_validity: For how long the invite will be valid, in seconds.
|
||||||
|
:param sdp: SDP text of the session description.
|
||||||
|
"""
|
||||||
|
super().__init__(*args, invite_validity=invite_validity, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixCallAnswerEvent(MatrixCallEvent):
|
||||||
|
"""
|
||||||
|
Event triggered by the callee when they wish to answer the call.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixCallHangupEvent(MatrixCallEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a participant in the call exists.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixRoomCreatedEvent(MatrixEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a room is created.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class MatrixRoomJoinEvent(MatrixEvent):
|
class MatrixRoomJoinEvent(MatrixEvent):
|
||||||
"""
|
"""
|
||||||
Event triggered when a user joins a room.
|
Event triggered when a user joins a room.
|
||||||
|
@ -81,17 +167,11 @@ class MatrixRoomLeaveEvent(MatrixEvent):
|
||||||
|
|
||||||
class MatrixRoomInviteEvent(MatrixEvent):
|
class MatrixRoomInviteEvent(MatrixEvent):
|
||||||
"""
|
"""
|
||||||
Event triggered when a user is invited to a room.
|
Event triggered when the user is invited to a room.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class MatrixRoomInviteMeEvent(MatrixEvent):
|
class MatrixRoomTopicChangedEvent(MatrixEvent):
|
||||||
"""
|
|
||||||
Event triggered when the currently logged in user is invited to a room.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class MatrixRoomTopicChangeEvent(MatrixEvent):
|
|
||||||
"""
|
"""
|
||||||
Event triggered when the topic/title of a room changes.
|
Event triggered when the topic/title of a room changes.
|
||||||
"""
|
"""
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,10 +1,25 @@
|
||||||
manifest:
|
manifest:
|
||||||
events:
|
events:
|
||||||
platypush.message.event.matrix.MatrixMessageEvent: when a message is received.
|
platypush.message.event.matrix.MatrixMessageEvent: when a message is received.
|
||||||
|
platypush.message.event.matrix.MatrixMediaMessageEvent: when a media message is received.
|
||||||
|
platypush.message.event.matrix.MatrixRoomCreatedEvent: when a room is created.
|
||||||
platypush.message.event.matrix.MatrixRoomJoinEvent: when a user joins a room.
|
platypush.message.event.matrix.MatrixRoomJoinEvent: when a user joins a room.
|
||||||
platypush.message.event.matrix.MatrixRoomLeaveEvent: when a user leaves a room.
|
platypush.message.event.matrix.MatrixRoomLeaveEvent: when a user leaves a room.
|
||||||
platypush.message.event.matrix.MatrixRoomInviteEvent: when a user (other than the currently logged one) is invited to a room.
|
platypush.message.event.matrix.MatrixRoomInviteEvent: when the user is invited to a room.
|
||||||
platypush.message.event.matrix.MatrixRoomMeInviteEvent: when the currently logged in user is invited to a room.
|
platypush.message.event.matrix.MatrixRoomTopicChangedEvent: when the topic/title of a room changes.
|
||||||
platypush.message.event.matrix.MatrixRoomTopicChangeEvent: when the topic/title of a room changes.
|
platypush.message.event.matrix.MatrixCallInviteEvent: when the user is invited to a call.
|
||||||
|
platypush.message.event.matrix.MatrixCallAnswerEvent: when a called user wishes to pick the call.
|
||||||
|
platypush.message.event.matrix.MatrixCallHangupEvent: when a called user exits the call.
|
||||||
|
platypush.message.event.matrix.MatrixStickerEvent: when a sticker is sent to a room.
|
||||||
|
platypush.message.event.matrix.MatrixEncryptedMessageEvent: |
|
||||||
|
when a message is received but the client doesn't
|
||||||
|
have the E2E keys to decrypt it, or encryption has not been enabled.
|
||||||
|
apt:
|
||||||
|
- libolm-devel
|
||||||
|
pacman:
|
||||||
|
- libolm
|
||||||
|
pip:
|
||||||
|
- matrix-nio[e2e]
|
||||||
|
- async_lru
|
||||||
package: platypush.plugins.matrix
|
package: platypush.plugins.matrix
|
||||||
type: plugin
|
type: plugin
|
||||||
|
|
109
platypush/schemas/matrix.py
Normal file
109
platypush/schemas/matrix.py
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
from marshmallow import fields
|
||||||
|
from marshmallow.schema import Schema
|
||||||
|
|
||||||
|
from platypush.schemas import DateTime
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixProfileSchema(Schema):
|
||||||
|
user_id = fields.String(
|
||||||
|
required=True,
|
||||||
|
metadata={
|
||||||
|
'description': 'User ID',
|
||||||
|
'example': '@myuser:matrix.example.org',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
display_name = fields.String(
|
||||||
|
attribute='displayname',
|
||||||
|
metadata={
|
||||||
|
'description': 'User display name',
|
||||||
|
'example': 'Foo Bar',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
avatar_url = fields.URL(
|
||||||
|
metadata={
|
||||||
|
'description': 'User avatar URL',
|
||||||
|
'example': 'mxc://matrix.platypush.tech/AbCdEfG0123456789',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixRoomSchema(Schema):
|
||||||
|
room_id = fields.String(
|
||||||
|
required=True,
|
||||||
|
metadata={
|
||||||
|
'description': 'Room ID',
|
||||||
|
'example': '!aBcDeFgHiJkMnO:matrix.example.org',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
name = fields.String(
|
||||||
|
metadata={
|
||||||
|
'description': 'Room name',
|
||||||
|
'example': 'My Room',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
display_name = fields.String(
|
||||||
|
metadata={
|
||||||
|
'description': 'Room display name',
|
||||||
|
'example': 'My Room',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
topic = fields.String(
|
||||||
|
metadata={
|
||||||
|
'description': 'Room topic',
|
||||||
|
'example': 'My Room Topic',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
avatar_url = fields.URL(
|
||||||
|
attribute='room_avatar_url',
|
||||||
|
metadata={
|
||||||
|
'description': 'Room avatar URL',
|
||||||
|
'example': 'mxc://matrix.platypush.tech/AbCdEfG0123456789',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
owner_id = fields.String(
|
||||||
|
attribute='own_user_id',
|
||||||
|
metadata={
|
||||||
|
'description': 'Owner user ID',
|
||||||
|
'example': '@myuser:matrix.example.org',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
encrypted = fields.Bool()
|
||||||
|
|
||||||
|
|
||||||
|
class MatrixDeviceSchema(Schema):
|
||||||
|
device_id = fields.String(
|
||||||
|
required=True,
|
||||||
|
attribute='id',
|
||||||
|
metadata={
|
||||||
|
'description': 'ABCDEFG',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
display_name = fields.String(
|
||||||
|
metadata={
|
||||||
|
'description': 'Device display name',
|
||||||
|
'example': 'My Device',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
last_seen_ip = fields.String(
|
||||||
|
metadata={
|
||||||
|
'description': 'Last IP associated to this device',
|
||||||
|
'example': '1.2.3.4',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
last_seen_date = DateTime(
|
||||||
|
metadata={
|
||||||
|
'description': 'The last time that the device was reported online',
|
||||||
|
'example': '2022-07-23T17:20:01.254223',
|
||||||
|
}
|
||||||
|
)
|
2
setup.py
2
setup.py
|
@ -268,5 +268,7 @@ setup(
|
||||||
'ngrok': ['pyngrok'],
|
'ngrok': ['pyngrok'],
|
||||||
# Support for IRC integration
|
# Support for IRC integration
|
||||||
'irc': ['irc'],
|
'irc': ['irc'],
|
||||||
|
# Support for the Matrix integration
|
||||||
|
'matrix': ['matrix-nio'],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue