v1.3.5
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
########################################################################
|
||||
# File name: __init__.py
|
||||
# This file is part of: aioxmpp
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
########################################################################
|
||||
"""
|
||||
:mod:`~aioxmpp.private_xml` – Private XML Storage support (:xep:`0049`)
|
||||
#######################################################################
|
||||
|
||||
This module provides support for storing and retrieving private XML data on
|
||||
the server as per :xep:`Private XML Storage <49>`.
|
||||
|
||||
.. autoclass:: PrivateXMLService
|
||||
|
||||
To register payload XSOs for private storage :class:`Query` is
|
||||
exposed:
|
||||
|
||||
.. autoclass:: Query
|
||||
|
||||
"""
|
||||
|
||||
from .xso import Query # NOQA: F401
|
||||
from .service import PrivateXMLService # NOQA: F401
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,72 @@
|
||||
########################################################################
|
||||
# File name: service.py
|
||||
# This file is part of: aioxmpp
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
########################################################################
|
||||
import asyncio
|
||||
|
||||
import aioxmpp
|
||||
import aioxmpp.service as service
|
||||
|
||||
from . import xso as private_xml_xso
|
||||
|
||||
|
||||
class PrivateXMLService(service.Service):
|
||||
"""
|
||||
Service for handling server side private XML storage.
|
||||
|
||||
.. automethod:: get_private_xml
|
||||
|
||||
.. automethod:: set_private_xml
|
||||
"""
|
||||
|
||||
def __init__(self, client, **kwargs):
|
||||
super().__init__(client, **kwargs)
|
||||
|
||||
async def get_private_xml(self, query_xso):
|
||||
"""
|
||||
Get the private XML data for the element `query_xso` from the
|
||||
server.
|
||||
|
||||
:param query_xso: the object to retrieve.
|
||||
:returns: the stored private XML data.
|
||||
|
||||
`query_xso` *must* serialize to an empty XML node of the
|
||||
wanted namespace and type and *must* be registered as private
|
||||
XML :class:`~private_xml_xso.Query` payload.
|
||||
|
||||
"""
|
||||
iq = aioxmpp.IQ(
|
||||
type_=aioxmpp.IQType.GET,
|
||||
payload=private_xml_xso.Query(query_xso)
|
||||
)
|
||||
return await self.client.send(iq)
|
||||
|
||||
async def set_private_xml(self, xso):
|
||||
"""
|
||||
Store the serialization of `xso` on the server as the private XML
|
||||
data for the namespace of `xso`.
|
||||
|
||||
:param xso: the XSO whose serialization is send as private XML data.
|
||||
"""
|
||||
iq = aioxmpp.IQ(
|
||||
type_=aioxmpp.IQType.SET,
|
||||
payload=private_xml_xso.Query(xso)
|
||||
)
|
||||
await self.client.send(iq)
|
||||
@@ -0,0 +1,59 @@
|
||||
########################################################################
|
||||
# File name: xso.py
|
||||
# This file is part of: aioxmpp
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
########################################################################
|
||||
import aioxmpp
|
||||
import aioxmpp.xso as xso
|
||||
|
||||
from aioxmpp.utils import namespaces
|
||||
|
||||
|
||||
namespaces.xep0049 = "jabber:iq:private"
|
||||
|
||||
|
||||
@aioxmpp.IQ.as_payload_class
|
||||
class Query(xso.XSO):
|
||||
"""
|
||||
The XSO for queries to private XML storage.
|
||||
|
||||
.. automethod:: as_payload_class
|
||||
"""
|
||||
TAG = (namespaces.xep0049, "query")
|
||||
|
||||
registered_payload = xso.Child([], strict=True)
|
||||
unregistered_payload = xso.Collector()
|
||||
|
||||
def __init__(self, payload):
|
||||
self.registered_payload = payload
|
||||
|
||||
@classmethod
|
||||
def as_payload_class(mycls, xso_class):
|
||||
"""
|
||||
Register the given class `xso_class` as possible payload
|
||||
for private XML storage.
|
||||
|
||||
Return `xso_class`, to allow this to be used as a decorator.
|
||||
"""
|
||||
mycls.register_child(
|
||||
Query.registered_payload,
|
||||
xso_class
|
||||
)
|
||||
|
||||
return xso_class
|
||||
Reference in New Issue
Block a user