From 31f5e846711917519ee2eb84427378b6a97bf7f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Sun, 16 Sep 2018 22:13:41 +0100 Subject: [PATCH] Add xep_0335: JSON Containers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- slixmpp/plugins/xep_0335/__init__.py | 14 +++++++++++ slixmpp/plugins/xep_0335/json_containers.py | 22 ++++++++++++++++ slixmpp/plugins/xep_0335/stanza.py | 28 +++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 slixmpp/plugins/xep_0335/__init__.py create mode 100644 slixmpp/plugins/xep_0335/json_containers.py create mode 100644 slixmpp/plugins/xep_0335/stanza.py diff --git a/slixmpp/plugins/xep_0335/__init__.py b/slixmpp/plugins/xep_0335/__init__.py new file mode 100644 index 00000000..7bc3bddf --- /dev/null +++ b/slixmpp/plugins/xep_0335/__init__.py @@ -0,0 +1,14 @@ +""" + Slixmpp: The Slick XMPP Library + Copyright (C) 2018 Maxime “pep” Buquet + This file is part of Slixmpp. + + See the file LICENSE for copying permission. +""" + +from slixmpp.plugins.base import register_plugin + +from slixmpp.plugins.xep_0335.stanza import JSON_Container +from slixmpp.plugins.xep_0335.json_containers import XEP_0335 + +register_plugin(XEP_0335) diff --git a/slixmpp/plugins/xep_0335/json_containers.py b/slixmpp/plugins/xep_0335/json_containers.py new file mode 100644 index 00000000..baeb5889 --- /dev/null +++ b/slixmpp/plugins/xep_0335/json_containers.py @@ -0,0 +1,22 @@ +""" + Slixmpp: The Slick XMPP Library + Copyright (C) 2018 Maxime “pep” Buquet + This file is part of Slixmpp. + + See the file LICENSE for copying permission. +""" + +from slixmpp import Message +from slixmpp.plugins import BasePlugin +from slixmpp.xmlstream import register_stanza_plugin +from slixmpp.plugins.xep_0335 import JSON_Container + + +class XEP_0335(BasePlugin): + + name = 'xep_0335' + description = 'XEP-0335: JSON Containers' + stanza = stanza + + def plugin_init(self): + register_stanza_plugin(Message, JSON_Container) diff --git a/slixmpp/plugins/xep_0335/stanza.py b/slixmpp/plugins/xep_0335/stanza.py new file mode 100644 index 00000000..6d5ca5b5 --- /dev/null +++ b/slixmpp/plugins/xep_0335/stanza.py @@ -0,0 +1,28 @@ +""" + Slixmpp: The Slick XMPP Library + Copyright (C) 2018 Maxime “pep” Buquet + This file is part of Slixmpp. + + See the file LICENSE for copying permission. +""" + +import json +from slixmpp.xmlstream import ElementBase + + +class JSON_Container(ElementBase): + name = 'json' + plugin_attrib = 'json' + namespace = 'urn:xmpp:json:0' + interfaces = {'value'} + + def get_value(self): + return json.loads(self.xml.text) + + def set_value(self, value): + if not isinstance(value, str): + value = json.dumps(value) + self.xml.text = value + + def del_value(self): + self.xml.text = ''