Compare commits
135 Commits
master
...
sleek-0.9-
Author | SHA1 | Date | |
---|---|---|---|
![]() |
494e3ef449 | ||
![]() |
be5688007b | ||
![]() |
ad7c1b06f4 | ||
![]() |
083ac3faaf | ||
![]() |
a909731b03 | ||
![]() |
4864197d46 | ||
![]() |
92a5ac2ba9 | ||
![]() |
02ca5f0e42 | ||
![]() |
1e009513ee | ||
![]() |
55f83e8ab0 | ||
![]() |
d43fba3c8f | ||
![]() |
9c5285987d | ||
![]() |
d09cbef9a7 | ||
![]() |
9c850f080d | ||
![]() |
879dd11daa | ||
![]() |
969c4652a4 | ||
![]() |
9506970042 | ||
![]() |
3c6b07353d | ||
![]() |
66c6c21ad8 | ||
![]() |
c5b5cc4af1 | ||
![]() |
e835843aab | ||
![]() |
d6681f16d2 | ||
![]() |
fc952efae9 | ||
![]() |
f7273affc5 | ||
![]() |
34eb88f199 | ||
![]() |
f3cf5f6080 | ||
![]() |
85d8b9270f | ||
![]() |
259dffeb6e | ||
![]() |
0a30e6c017 | ||
![]() |
d381ab320a | ||
![]() |
6e93982fdf | ||
![]() |
33602f232c | ||
![]() |
7968ca2892 | ||
![]() |
661cdd2018 | ||
![]() |
4b00baab1e | ||
![]() |
fe1d3004cc | ||
![]() |
62da57a6c2 | ||
![]() |
ba9633f8f7 | ||
![]() |
065a164223 | ||
![]() |
cd2017b8b0 | ||
![]() |
dd9f33b7d9 | ||
![]() |
0a23f84ec3 | ||
![]() |
f477ccf533 | ||
![]() |
d62a30b0f8 | ||
![]() |
d763795b2c | ||
![]() |
fff54eaf2f | ||
![]() |
488d5b29d4 | ||
![]() |
9bdb297fe2 | ||
![]() |
fa7f72d0af | ||
![]() |
c538ffae79 | ||
![]() |
5d87a54913 | ||
![]() |
8bdfa77024 | ||
![]() |
15ac3e9fba | ||
![]() |
e8d37b409c | ||
![]() |
898f96f265 | ||
![]() |
bbf1cb8ba2 | ||
![]() |
d22f6a2aa5 | ||
![]() |
c0a6291fea | ||
![]() |
f5d0466462 | ||
![]() |
f659e3081e | ||
![]() |
4fccd77685 | ||
![]() |
bf2bf29fc6 | ||
![]() |
34dc236126 | ||
![]() |
9464736551 | ||
![]() |
47f1fb1690 | ||
![]() |
66cf0c2021 | ||
![]() |
e7c37c4ec5 | ||
![]() |
1aa34cb0fc | ||
![]() |
919c8c5633 | ||
![]() |
f54501a346 | ||
![]() |
d20cd6b3e6 | ||
![]() |
3f96226e29 | ||
![]() |
71d72f431f | ||
![]() |
da6e1e47dc | ||
![]() |
2f0f18a8c6 | ||
![]() |
1c32668e18 | ||
![]() |
77bff9cce7 | ||
![]() |
1f3cfb98f1 | ||
![]() |
4295a66c70 | ||
![]() |
8227affd7f | ||
![]() |
3a2f989c5e | ||
![]() |
85a2715c7d | ||
![]() |
b03e6168a8 | ||
![]() |
2a43f59a58 | ||
![]() |
184f7cb8a4 | ||
![]() |
e1aa4d0b93 | ||
![]() |
db4989c66d | ||
![]() |
7930ed22f2 | ||
![]() |
b0066f3ef4 | ||
![]() |
c0457cf5d0 | ||
![]() |
59b8406573 | ||
![]() |
686943a2ec | ||
![]() |
060b4c3938 | ||
![]() |
49f5767aea | ||
![]() |
4eb210bff5 | ||
![]() |
1780ca900a | ||
![]() |
e6c2fde283 | ||
![]() |
ecf902bf16 | ||
![]() |
d76c0931ef | ||
![]() |
e18793152f | ||
![]() |
e388680269 | ||
![]() |
bee42e4a2f | ||
![]() |
8e3227ae5e | ||
![]() |
257bcadd96 | ||
![]() |
3e5cdc8664 | ||
![]() |
194e6bcb51 | ||
![]() |
2e7024419a | ||
![]() |
5235313aab | ||
![]() |
a2719b0bb0 | ||
![]() |
71ad715caa | ||
![]() |
d452085049 | ||
![]() |
8b3b8aca9e | ||
![]() |
e00dea7c0c | ||
![]() |
520bf72e11 | ||
![]() |
040f426f1a | ||
![]() |
226b0e4297 | ||
![]() |
0b2cd176b1 | ||
![]() |
56b5cbe5b1 | ||
![]() |
3e83b16a58 | ||
![]() |
de4d611d30 | ||
![]() |
e8d0fc37dc | ||
![]() |
dda3e733b5 | ||
![]() |
4b322720b3 | ||
![]() |
3f41fdd231 | ||
![]() |
8e95ae2948 | ||
![]() |
341c110b6a | ||
![]() |
7522839141 | ||
![]() |
4c410dd48a | ||
![]() |
2d89954412 | ||
![]() |
a92075a659 | ||
![]() |
7552efee5c | ||
![]() |
6bc6ebb95d | ||
![]() |
e0c32b6d9b | ||
![]() |
1521a8b5c9 | ||
![]() |
70f69c180c |
19
.gitignore
vendored
19
.gitignore
vendored
@ -1,17 +1,6 @@
|
||||
*.py[co]
|
||||
*.pyc
|
||||
.project
|
||||
build/
|
||||
dist/
|
||||
MANIFEST
|
||||
docs/_build/
|
||||
*.swp
|
||||
.tox/
|
||||
.coverage
|
||||
slixmpp.egg-info/
|
||||
.ropeproject/
|
||||
4913
|
||||
*~
|
||||
.baboon/
|
||||
.DS_STORE
|
||||
.idea/
|
||||
.vscode/
|
||||
venv/
|
||||
.pydevproject
|
||||
.settings
|
||||
|
69
.pylintrc
Normal file
69
.pylintrc
Normal file
@ -0,0 +1,69 @@
|
||||
# Pylint configuration file.
|
||||
# run `pylint --generate-rcfile` to see the default configuration
|
||||
# run `pylint --rcfile=.pylintrc smallfoot` to perform analysis
|
||||
|
||||
# Brain-dead errors regarding standard language features
|
||||
# W0142 = *args and **kwargs support
|
||||
# W0403 = Relative imports
|
||||
|
||||
# Pointless whining
|
||||
# R0201 = Method could be a function
|
||||
# W0212 = Accessing protected attribute of client class
|
||||
# W0613 = Unused argument
|
||||
# W0232 = Class has no __init__ method
|
||||
# R0903 = Too few public methods
|
||||
# C0301 = Line too long
|
||||
# R0913 = Too many arguments
|
||||
# C0103 = Invalid name
|
||||
# R0914 = Too many local variables
|
||||
|
||||
# PyLint's module importation is unreliable
|
||||
# F0401 = Unable to import module
|
||||
# W0402 = Uses of a deprecated module
|
||||
|
||||
# Already an error when wildcard imports are used
|
||||
# W0614 = Unused import from wildcard
|
||||
|
||||
# Sometimes disabled depending on how bad a module is
|
||||
# C0111 = Missing docstring
|
||||
|
||||
# Convention Errors related to whitespace:
|
||||
# C0321,C0322,C0323,C0324
|
||||
|
||||
# Comments that we've put in the code:
|
||||
# W0511
|
||||
|
||||
[MESSAGES CONTROL]
|
||||
|
||||
# Disable the message(s) with the given id(s).
|
||||
disable=W0142,W0403,R0201,W0212,W0613,W0232,R0903,W0614,C0103,C0111,C0301,C0321,C0322,C0323,C0324,R0913,F0401,W0402,R0914,W0511,W0312
|
||||
|
||||
[REPORTS]
|
||||
|
||||
include-ids=y
|
||||
reports=y
|
||||
# Set the output format. Available formats are text, parseable, colorized, msvs
|
||||
# (visual studio) and html
|
||||
output-format=text
|
||||
# Put messages in a separate file for each module / package specified on the
|
||||
# command line instead of printing them on stdout. Reports (if any) will be
|
||||
# written in a file name "pylint_global.[txt|html]".
|
||||
files-output=no
|
||||
|
||||
[VARIABLES]
|
||||
|
||||
# Tells whether we should check for unused import in __init__ files.
|
||||
init-import=yes
|
||||
|
||||
[TYPECHECK]
|
||||
|
||||
# List of classes names for which member attributes should not be checked
|
||||
# (useful for classes with attributes dynamically set).
|
||||
#ignored-classes=Message
|
||||
|
||||
|
||||
[MISCELLANEOUS]
|
||||
|
||||
# List of note tags to take in consideration, separated by a comma.
|
||||
notes=FIXME,XXX,TODO
|
||||
|
@ -1,22 +0,0 @@
|
||||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Set the version of Python and other tools you might need
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.11"
|
||||
|
||||
# Build documentation in the docs/ directory with Sphinx
|
||||
sphinx:
|
||||
configuration: docs/conf.py
|
||||
|
||||
# We recommend specifying your dependencies to enable reproducible builds:
|
||||
# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
|
||||
python:
|
||||
install:
|
||||
- requirements: docs/requirements.txt
|
@ -1,9 +0,0 @@
|
||||
when:
|
||||
event: [ push, pull_request ]
|
||||
|
||||
steps:
|
||||
mypy:
|
||||
image: python:3
|
||||
commands:
|
||||
- pip3 install mypy types-setuptools
|
||||
- mypy slixmpp
|
@ -1,23 +0,0 @@
|
||||
when:
|
||||
event: [ push, pull_request ]
|
||||
|
||||
steps:
|
||||
test_integration:
|
||||
image: "python:3.11"
|
||||
environment:
|
||||
CI_ACCOUNT1:
|
||||
from_secret: ci_account1
|
||||
CI_ACCOUNT1_PASSWORD:
|
||||
from_secret: ci_account1_password
|
||||
CI_ACCOUNT2:
|
||||
from_secret: ci_account2
|
||||
CI_ACCOUNT2_PASSWORD:
|
||||
from_secret: ci_account2_password
|
||||
CI_MUC_SERVER:
|
||||
from_secret: ci_muc_server
|
||||
commands:
|
||||
- apt-get update
|
||||
- apt-get install -y python3-pip cython3 gpg idn libidn-dev
|
||||
- pip3 install emoji aiohttp aiodns
|
||||
- python3 setup.py build_ext --inplace
|
||||
- ./run_integration_tests.py
|
@ -1,19 +0,0 @@
|
||||
when:
|
||||
event: [ push, pull_request ]
|
||||
|
||||
steps:
|
||||
unit_tests:
|
||||
image: "python:${TAG}"
|
||||
commands:
|
||||
- apt-get update
|
||||
- apt-get install -y python3 python3-pip cython3 gpg
|
||||
- pip3 install emoji aiohttp cryptography setuptools
|
||||
- ./run_tests.py
|
||||
|
||||
matrix:
|
||||
TAG:
|
||||
- "3.9"
|
||||
- "3.10"
|
||||
- "3.11"
|
||||
- "3.12"
|
||||
- "3.13"
|
@ -1,14 +0,0 @@
|
||||
Contributing to the Slixmpp project
|
||||
===================================
|
||||
|
||||
To contribute, the preferred way is to commit your changes on some
|
||||
publicly-available git repository (on a fork `on github
|
||||
<https://github.com/poezio/slixmpp>`_ or on your own repository) and to
|
||||
notify the developers with either:
|
||||
- a ticket `on the bug tracker <https://codeberg.org/poezio/slixmpp/issues/new>`_
|
||||
- a pull request on github
|
||||
- a simple message on `the XMPP MUC <xmpp:slixmpp@muc.poez.io>`_
|
||||
|
||||
Even though Slixmpp’s github repository is just a read-only mirror, we can
|
||||
still be notified of the pull requests and fetch your mirror manually to
|
||||
integrate your changes.
|
12
INSTALL
12
INSTALL
@ -1,14 +1,8 @@
|
||||
Pre-requisites:
|
||||
- Python 3.7+
|
||||
- Cython 0.22 and libidn, optionally (making JID faster by compiling the stringprep module)
|
||||
- GnuPG, for testing
|
||||
Python 3.1 or 2.6
|
||||
|
||||
Install:
|
||||
> python3 setup.py install
|
||||
python3 setup.py install
|
||||
|
||||
Root install:
|
||||
> sudo python3 setup.py install
|
||||
|
||||
To test:
|
||||
> cd examples
|
||||
> python3 echo_client.py -d -j [USER@example.com] -p [PASSWORD]
|
||||
sudo python3 setup.py install
|
||||
|
124
LICENSE
124
LICENSE
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2010 Nathanael C. Fritz
|
||||
Copyright (c) 2010 ICRL
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@ -17,125 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
|
||||
|
||||
Licenses of Bundled Third Party Code
|
||||
------------------------------------
|
||||
|
||||
dateutil - Extensions to the standard python 2.3+ datetime module.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Copyright (c) 2003-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
fixed_datetime
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
Copyright (c) 2008, Red Innovation Ltd., Finland
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of Red Innovation nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY RED INNOVATION ``AS IS'' AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL RED INNOVATION BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
|
||||
SUELTA – A PURE-PYTHON SASL CLIENT LIBRARY
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This software is subject to "The MIT License"
|
||||
|
||||
Copyright 2004-2013 David Alan Cridland
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
python-gnupg: A Python wrapper for the GNU Privacy Guard
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Copyright (c) 2008-2012 by Vinay Sajip.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* The name(s) of the copyright holder(s) may not be used to endorse or
|
||||
promote products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) "AS IS" AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
39
MANIFEST
Normal file
39
MANIFEST
Normal file
@ -0,0 +1,39 @@
|
||||
setup.py
|
||||
sleekxmpp/__init__.py
|
||||
sleekxmpp/basexmpp.py
|
||||
sleekxmpp/clientxmpp.py
|
||||
sleekxmpp/example.py
|
||||
sleekxmpp/plugins/__init__.py
|
||||
sleekxmpp/plugins/base.py
|
||||
sleekxmpp/plugins/gmail_notify.py
|
||||
sleekxmpp/plugins/xep_0004.py
|
||||
sleekxmpp/plugins/xep_0009.py
|
||||
sleekxmpp/plugins/xep_0030.py
|
||||
sleekxmpp/plugins/xep_0045.py
|
||||
sleekxmpp/plugins/xep_0050.py
|
||||
sleekxmpp/plugins/xep_0060.py
|
||||
sleekxmpp/plugins/xep_0078.py
|
||||
sleekxmpp/plugins/xep_0086.py
|
||||
sleekxmpp/plugins/xep_0092.py
|
||||
sleekxmpp/plugins/xep_0199.py
|
||||
sleekxmpp/stanza/__init__.py
|
||||
sleekxmpp/stanza/iq.py
|
||||
sleekxmpp/stanza/message.py
|
||||
sleekxmpp/stanza/presence.py
|
||||
sleekxmpp/xmlstream/__init__.py
|
||||
sleekxmpp/xmlstream/stanzabase.py
|
||||
sleekxmpp/xmlstream/statemachine.py
|
||||
sleekxmpp/xmlstream/test.py
|
||||
sleekxmpp/xmlstream/testclient.py
|
||||
sleekxmpp/xmlstream/xmlstream.py
|
||||
sleekxmpp/xmlstream/handler/__init__.py
|
||||
sleekxmpp/xmlstream/handler/base.py
|
||||
sleekxmpp/xmlstream/handler/callback.py
|
||||
sleekxmpp/xmlstream/handler/waiter.py
|
||||
sleekxmpp/xmlstream/handler/xmlcallback.py
|
||||
sleekxmpp/xmlstream/handler/xmlwaiter.py
|
||||
sleekxmpp/xmlstream/matcher/__init__.py
|
||||
sleekxmpp/xmlstream/matcher/base.py
|
||||
sleekxmpp/xmlstream/matcher/many.py
|
||||
sleekxmpp/xmlstream/matcher/xmlmask.py
|
||||
sleekxmpp/xmlstream/matcher/xpath.py
|
@ -1,7 +0,0 @@
|
||||
include README.rst
|
||||
include LICENSE
|
||||
include run_tests.py
|
||||
include slixmpp/stringprep.pyx
|
||||
recursive-include docs Makefile *.bat *.py *.rst *.css *.ttf *.png
|
||||
recursive-include examples *.py
|
||||
recursive-include tests *.py
|
42
README
Normal file
42
README
Normal file
@ -0,0 +1,42 @@
|
||||
SleekXMPP is an XMPP library written for Python 3.1+ (with 2.6 compatibility).
|
||||
Hosted at http://wiki.github.com/fritzy/SleekXMPP/
|
||||
|
||||
Featured in examples in XMPP: The Definitive Guide by Kevin Smith, Remko Tronçon, and Peter Saint-Andre
|
||||
If you're coming here from The Definitive Guide, please read http://wiki.github.com/fritzy/SleekXMPP/xmpp-the-definitive-guide
|
||||
|
||||
SleekXMPP has several design goals/philosophies:
|
||||
- Low number of dependencies.
|
||||
- Every XEP as a plugin.
|
||||
- Rewarding to work with.
|
||||
|
||||
The goals for 1.0 include (and we're getting close):
|
||||
- Nearly Full test coverage of stanzas.
|
||||
- Wide range of functional tests.
|
||||
- Stanza objects for all interaction with the stream
|
||||
- Documentation on using and extending SleekXMPP.
|
||||
- Complete documentation on all implemented stanza objects
|
||||
- Documentation on all examples used in XMPP: The Definitive Guide
|
||||
|
||||
1.1 will include:
|
||||
- More functional and unit tests
|
||||
- PEP-8 compliance
|
||||
- XEP-225 support
|
||||
|
||||
Since 0.2, here's the Changelog:
|
||||
- MANY bugfixes
|
||||
- Re-implementation of handlers/threading to greatly simplify and remove bugs (no more spawning threads in handlers)
|
||||
- Stanza objects for jabber:client and all implemented XEPs
|
||||
- Raising XMPPError for jabber:client and extended errors in handlers
|
||||
- Robust error handling and better insurance of iq responses
|
||||
- Stanza objects have made life a lot easier!
|
||||
- Massive audit/cleanup.
|
||||
|
||||
Credits
|
||||
----------------
|
||||
Main Author: Nathan Fritz fritz@netflint.net
|
||||
Contributors: Kevin Smith & Lance Stout
|
||||
Patches: Remko Tronçon
|
||||
|
||||
Feel free to add fritzy@netflint.net to your roster for direct support and comments.
|
||||
Join sleekxmpp-discussion@googlegroups.com / http://groups.google.com/group/sleekxmpp-discussion for email discussion.
|
||||
Join sleek@conference.jabber.org for groupchat discussion.
|
155
README.rst
155
README.rst
@ -1,155 +0,0 @@
|
||||
Slixmpp
|
||||
#########
|
||||
|
||||
Slixmpp is an MIT licensed XMPP library for Python 3.7+. It is a fork of
|
||||
SleekXMPP.
|
||||
|
||||
Slixmpp's goals is to only rewrite the core of the library (the low level
|
||||
socket handling, the timers, the events dispatching) in order to remove all
|
||||
threads.
|
||||
|
||||
Building
|
||||
--------
|
||||
|
||||
Slixmpp can make use of cython to improve performance on critical modules.
|
||||
To do that, **cython3** is necessary along with **libidn** headers.
|
||||
Otherwise, no compilation is needed. Building is done by running setup.py::
|
||||
|
||||
python3 setup.py build_ext --inplace
|
||||
|
||||
Documentation and Testing
|
||||
-------------------------
|
||||
Documentation can be found both inline in the code, and as a Sphinx project in ``/docs``.
|
||||
To generate the Sphinx documentation, follow the commands below. The HTML output will
|
||||
be in ``docs/_build/html``::
|
||||
|
||||
cd docs
|
||||
make html
|
||||
open _build/html/index.html
|
||||
|
||||
To run the test suite for Slixmpp::
|
||||
|
||||
python run_tests.py
|
||||
|
||||
Integration tests require the following environment variables to be set:::
|
||||
|
||||
$CI_ACCOUNT1
|
||||
$CI_ACCOUNT1_PASSWORD
|
||||
$CI_ACCOUNT2
|
||||
$CI_ACCOUNT2_PASSWORD
|
||||
$CI_MUC_SERVER
|
||||
|
||||
where the account variables are JIDs of valid, existing accounts, and
|
||||
the passwords are the account passwords. The MUC server must allow room
|
||||
creation from those JIDs.
|
||||
|
||||
To run the integration test suite for Slixmpp::
|
||||
|
||||
python run_integration_tests.py
|
||||
|
||||
The Slixmpp Boilerplate
|
||||
-------------------------
|
||||
Projects using Slixmpp tend to follow a basic pattern for setting up client/component
|
||||
connections and configuration. Here is the gist of the boilerplate needed for a Slixmpp
|
||||
based project. See the documentation or examples directory for more detailed archetypes for
|
||||
Slixmpp projects::
|
||||
|
||||
import logging
|
||||
|
||||
from slixmpp import ClientXMPP
|
||||
from slixmpp.exceptions import IqError, IqTimeout
|
||||
|
||||
|
||||
class EchoBot(ClientXMPP):
|
||||
|
||||
def __init__(self, jid, password):
|
||||
ClientXMPP.__init__(self, jid, password)
|
||||
|
||||
self.add_event_handler("session_start", self.session_start)
|
||||
self.add_event_handler("message", self.message)
|
||||
|
||||
# If you wanted more functionality, here's how to register plugins:
|
||||
# self.register_plugin('xep_0030') # Service Discovery
|
||||
# self.register_plugin('xep_0199') # XMPP Ping
|
||||
|
||||
# Here's how to access plugins once you've registered them:
|
||||
# self['xep_0030'].add_feature('echo_demo')
|
||||
|
||||
# If you are working with an OpenFire server, you will
|
||||
# need to use a different SSL version:
|
||||
# import ssl
|
||||
# self.ssl_version = ssl.PROTOCOL_SSLv3
|
||||
|
||||
def session_start(self, event):
|
||||
self.send_presence()
|
||||
self.get_roster()
|
||||
|
||||
# Most get_*/set_* methods from plugins use Iq stanzas, which
|
||||
# can generate IqError and IqTimeout exceptions
|
||||
#
|
||||
# try:
|
||||
# self.get_roster()
|
||||
# except IqError as err:
|
||||
# logging.error('There was an error getting the roster')
|
||||
# logging.error(err.iq['error']['condition'])
|
||||
# self.disconnect()
|
||||
# except IqTimeout:
|
||||
# logging.error('Server is taking too long to respond')
|
||||
# self.disconnect()
|
||||
|
||||
def message(self, msg):
|
||||
if msg['type'] in ('chat', 'normal'):
|
||||
msg.reply("Thanks for sending\n%(body)s" % msg).send()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Ideally use optparse or argparse to get JID,
|
||||
# password, and log level.
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG,
|
||||
format='%(levelname)-8s %(message)s')
|
||||
|
||||
xmpp = EchoBot('somejid@example.com', 'use_getpass')
|
||||
xmpp.connect()
|
||||
xmpp.process(forever=True)
|
||||
|
||||
|
||||
Slixmpp Credits
|
||||
---------------
|
||||
|
||||
**Maintainers:**
|
||||
- Florent Le Coz (`louiz@louiz.org <xmpp:louiz@louiz.org?message>`_),
|
||||
- Mathieu Pasquet (`mathieui@mathieui.net <xmpp:mathieui@mathieui.net?message>`_),
|
||||
|
||||
**Contributors:**
|
||||
- Emmanuel Gil Peyrot (`Link mauve <xmpp:linkmauve@linkmauve.fr?message>`_)
|
||||
- Sam Whited (`Sam Whited <mailto:sam@samwhited.com>`_)
|
||||
- Dan Sully (`Dan Sully <mailto:daniel@electricalrain.com>`_)
|
||||
- Gasper Zejn (`Gasper Zejn <mailto:zejn@kiberpipa.org>`_)
|
||||
- Krzysztof Kotlenga (`Krzysztof Kotlenga <mailto:pocek@users.sf.net>`_)
|
||||
- Tsukasa Hiiragi (`Tsukasa Hiiragi <mailto:bakalolka@gmail.com>`_)
|
||||
- Maxime Buquet (`pep <xmpp:pep@bouah.net?message>`_)
|
||||
|
||||
Credits (SleekXMPP)
|
||||
-------------------
|
||||
|
||||
**Main Author:** Nathan Fritz
|
||||
`fritzy@netflint.net <xmpp:fritzy@netflint.net?message>`_,
|
||||
`@fritzy <http://twitter.com/fritzy>`_
|
||||
|
||||
Nathan is also the author of XMPPHP and `Seesmic-AS3-XMPP
|
||||
<http://code.google.com/p/seesmic-as3-xmpp/>`_, and a former member of
|
||||
the XMPP Council.
|
||||
|
||||
**Co-Author:** Lance Stout
|
||||
`lancestout@gmail.com <xmpp:lancestout@gmail.com?message>`_,
|
||||
`@lancestout <http://twitter.com/lancestout>`_
|
||||
|
||||
**Contributors:**
|
||||
- Brian Beggs (`macdiesel <http://github.com/macdiesel>`_)
|
||||
- Dann Martens (`dannmartens <http://github.com/dannmartens>`_)
|
||||
- Florent Le Coz (`louiz <http://github.com/louiz>`_)
|
||||
- Kevin Smith (`Kev <http://github.com/Kev>`_, http://kismith.co.uk)
|
||||
- Remko Tronçon (`remko <http://github.com/remko>`_, http://el-tramo.be)
|
||||
- Te-jé Rogers (`te-je <http://github.com/te-je>`_)
|
||||
- Thom Nichols (`tomstrummer <http://github.com/tomstrummer>`_)
|
171
conn_tests/test_pubsubjobs.py
Normal file
171
conn_tests/test_pubsubjobs.py
Normal file
@ -0,0 +1,171 @@
|
||||
import logging
|
||||
import sleekxmpp
|
||||
from optparse import OptionParser
|
||||
from xml.etree import cElementTree as ET
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import unittest
|
||||
import sleekxmpp.plugins.xep_0004
|
||||
from sleekxmpp.xmlstream.matcher.stanzapath import StanzaPath
|
||||
from sleekxmpp.xmlstream.handler.waiter import Waiter
|
||||
try:
|
||||
import configparser
|
||||
except ImportError:
|
||||
import ConfigParser as configparser
|
||||
try:
|
||||
import queue
|
||||
except ImportError:
|
||||
import Queue as queue
|
||||
|
||||
class TestClient(sleekxmpp.ClientXMPP):
|
||||
def __init__(self, jid, password):
|
||||
sleekxmpp.ClientXMPP.__init__(self, jid, password)
|
||||
self.add_event_handler("session_start", self.start)
|
||||
#self.add_event_handler("message", self.message)
|
||||
self.waitforstart = queue.Queue()
|
||||
|
||||
def start(self, event):
|
||||
self.getRoster()
|
||||
self.sendPresence()
|
||||
self.waitforstart.put(True)
|
||||
|
||||
|
||||
class TestPubsubServer(unittest.TestCase):
|
||||
statev = {}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
unittest.TestCase.__init__(self, *args, **kwargs)
|
||||
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def test001getdefaultconfig(self):
|
||||
"""Get the default node config"""
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2')
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3')
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4')
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode5')
|
||||
result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
||||
self.statev['defaultconfig'] = result
|
||||
self.failUnless(isinstance(result, sleekxmpp.plugins.xep_0004.Form))
|
||||
|
||||
def test002createdefaultnode(self):
|
||||
"""Create a node without config"""
|
||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode1'))
|
||||
|
||||
def test003deletenode(self):
|
||||
"""Delete recently created node"""
|
||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode1'))
|
||||
|
||||
def test004createnode(self):
|
||||
"""Create a node with a config"""
|
||||
self.statev['defaultconfig'].field['pubsub#access_model'].setValue('open')
|
||||
self.statev['defaultconfig'].field['pubsub#notify_retract'].setValue(True)
|
||||
self.statev['defaultconfig'].field['pubsub#persist_items'].setValue(True)
|
||||
self.statev['defaultconfig'].field['pubsub#presence_based_delivery'].setValue(True)
|
||||
p = self.xmpp2.Presence()
|
||||
p['to'] = self.pshost
|
||||
p.send()
|
||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode2', self.statev['defaultconfig'], ntype='job'))
|
||||
|
||||
def test005reconfigure(self):
|
||||
"""Retrieving node config and reconfiguring"""
|
||||
nconfig = self.xmpp1['xep_0060'].getNodeConfig(self.pshost, 'testnode2')
|
||||
self.failUnless(nconfig, "No configuration returned")
|
||||
#print("\n%s ==\n %s" % (nconfig.getValues(), self.statev['defaultconfig'].getValues()))
|
||||
self.failUnless(nconfig.getValues() == self.statev['defaultconfig'].getValues(), "Configuration does not match")
|
||||
self.failUnless(self.xmpp1['xep_0060'].setNodeConfig(self.pshost, 'testnode2', nconfig))
|
||||
|
||||
def test006subscribetonode(self):
|
||||
"""Subscribe to node from account 2"""
|
||||
self.failUnless(self.xmpp2['xep_0060'].subscribe(self.pshost, "testnode2"))
|
||||
|
||||
def test007publishitem(self):
|
||||
"""Publishing item"""
|
||||
item = ET.Element('{http://netflint.net/protocol/test}test')
|
||||
w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
|
||||
self.xmpp2.registerHandler(w)
|
||||
#result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
|
||||
result = self.xmpp1['jobs'].createJob(self.pshost, "testnode2", 'test1', item)
|
||||
msg = w.wait(5) # got to get a result in 5 seconds
|
||||
self.failUnless(msg != False, "Account #2 did not get message event")
|
||||
#result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test2', item),))
|
||||
result = self.xmpp1['jobs'].createJob(self.pshost, "testnode2", 'test2', item)
|
||||
w = Waiter('wait publish2', StanzaPath('message/pubsub_event/items'))
|
||||
self.xmpp2.registerHandler(w)
|
||||
self.xmpp2['jobs'].claimJob(self.pshost, 'testnode2', 'test1')
|
||||
msg = w.wait(5) # got to get a result in 5 seconds
|
||||
self.xmpp2['jobs'].claimJob(self.pshost, 'testnode2', 'test2')
|
||||
self.xmpp2['jobs'].finishJob(self.pshost, 'testnode2', 'test1')
|
||||
self.xmpp2['jobs'].finishJob(self.pshost, 'testnode2', 'test2')
|
||||
print result
|
||||
#need to add check for update
|
||||
|
||||
def test900cleanup(self):
|
||||
"Cleaning up"
|
||||
#self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2'), "Could not delete test node.")
|
||||
time.sleep(10)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
#parse command line arguements
|
||||
optp = OptionParser()
|
||||
optp.add_option('-q','--quiet', help='set logging to ERROR', action='store_const', dest='loglevel', const=logging.ERROR, default=logging.INFO)
|
||||
optp.add_option('-d','--debug', help='set logging to DEBUG', action='store_const', dest='loglevel', const=logging.DEBUG, default=logging.INFO)
|
||||
optp.add_option('-v','--verbose', help='set logging to COMM', action='store_const', dest='loglevel', const=5, default=logging.INFO)
|
||||
optp.add_option("-c","--config", dest="configfile", default="config.xml", help="set config file to use")
|
||||
optp.add_option("-n","--nodenum", dest="nodenum", default="1", help="set node number to use")
|
||||
optp.add_option("-p","--pubsub", dest="pubsub", default="1", help="set pubsub host to use")
|
||||
opts,args = optp.parse_args()
|
||||
|
||||
logging.basicConfig(level=opts.loglevel, format='%(levelname)-8s %(message)s')
|
||||
|
||||
#load xml config
|
||||
logging.info("Loading config file: %s" % opts.configfile)
|
||||
config = configparser.RawConfigParser()
|
||||
config.read(opts.configfile)
|
||||
|
||||
#init
|
||||
logging.info("Account 1 is %s" % config.get('account1', 'jid'))
|
||||
xmpp1 = TestClient(config.get('account1','jid'), config.get('account1','pass'))
|
||||
logging.info("Account 2 is %s" % config.get('account2', 'jid'))
|
||||
xmpp2 = TestClient(config.get('account2','jid'), config.get('account2','pass'))
|
||||
|
||||
xmpp1.registerPlugin('xep_0004')
|
||||
xmpp1.registerPlugin('xep_0030')
|
||||
xmpp1.registerPlugin('xep_0060')
|
||||
xmpp1.registerPlugin('xep_0199')
|
||||
xmpp1.registerPlugin('jobs')
|
||||
xmpp2.registerPlugin('xep_0004')
|
||||
xmpp2.registerPlugin('xep_0030')
|
||||
xmpp2.registerPlugin('xep_0060')
|
||||
xmpp2.registerPlugin('xep_0199')
|
||||
xmpp2.registerPlugin('jobs')
|
||||
|
||||
if not config.get('account1', 'server'):
|
||||
# we don't know the server, but the lib can probably figure it out
|
||||
xmpp1.connect()
|
||||
else:
|
||||
xmpp1.connect((config.get('account1', 'server'), 5222))
|
||||
xmpp1.process(threaded=True)
|
||||
|
||||
#init
|
||||
if not config.get('account2', 'server'):
|
||||
# we don't know the server, but the lib can probably figure it out
|
||||
xmpp2.connect()
|
||||
else:
|
||||
xmpp2.connect((config.get('account2', 'server'), 5222))
|
||||
xmpp2.process(threaded=True)
|
||||
|
||||
TestPubsubServer.xmpp1 = xmpp1
|
||||
TestPubsubServer.xmpp2 = xmpp2
|
||||
TestPubsubServer.pshost = config.get('settings', 'pubsub')
|
||||
xmpp1.waitforstart.get(True)
|
||||
xmpp2.waitforstart.get(True)
|
||||
testsuite = unittest.TestLoader().loadTestsFromTestCase(TestPubsubServer)
|
||||
|
||||
alltests_suite = unittest.TestSuite([testsuite])
|
||||
result = unittest.TextTestRunner(verbosity=2).run(alltests_suite)
|
||||
xmpp1.disconnect()
|
||||
xmpp2.disconnect()
|
233
conn_tests/test_pubsubserver.py
Normal file
233
conn_tests/test_pubsubserver.py
Normal file
@ -0,0 +1,233 @@
|
||||
import logging
|
||||
import sleekxmpp
|
||||
from optparse import OptionParser
|
||||
from xml.etree import cElementTree as ET
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import unittest
|
||||
import sleekxmpp.plugins.xep_0004
|
||||
from sleekxmpp.xmlstream.matcher.stanzapath import StanzaPath
|
||||
from sleekxmpp.xmlstream.handler.waiter import Waiter
|
||||
try:
|
||||
import configparser
|
||||
except ImportError:
|
||||
import ConfigParser as configparser
|
||||
try:
|
||||
import queue
|
||||
except ImportError:
|
||||
import Queue as queue
|
||||
|
||||
class TestClient(sleekxmpp.ClientXMPP):
|
||||
def __init__(self, jid, password):
|
||||
sleekxmpp.ClientXMPP.__init__(self, jid, password)
|
||||
self.add_event_handler("session_start", self.start)
|
||||
#self.add_event_handler("message", self.message)
|
||||
self.waitforstart = queue.Queue()
|
||||
|
||||
def start(self, event):
|
||||
self.getRoster()
|
||||
self.sendPresence()
|
||||
self.waitforstart.put(True)
|
||||
|
||||
|
||||
class TestPubsubServer(unittest.TestCase):
|
||||
statev = {}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
unittest.TestCase.__init__(self, *args, **kwargs)
|
||||
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def test001getdefaultconfig(self):
|
||||
"""Get the default node config"""
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2')
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3')
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4')
|
||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode5')
|
||||
result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
||||
self.statev['defaultconfig'] = result
|
||||
self.failUnless(isinstance(result, sleekxmpp.plugins.xep_0004.Form))
|
||||
|
||||
def test002createdefaultnode(self):
|
||||
"""Create a node without config"""
|
||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode1'))
|
||||
|
||||
def test003deletenode(self):
|
||||
"""Delete recently created node"""
|
||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode1'))
|
||||
|
||||
def test004createnode(self):
|
||||
"""Create a node with a config"""
|
||||
self.statev['defaultconfig'].field['pubsub#access_model'].setValue('open')
|
||||
self.statev['defaultconfig'].field['pubsub#notify_retract'].setValue(True)
|
||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode2', self.statev['defaultconfig']))
|
||||
|
||||
def test005reconfigure(self):
|
||||
"""Retrieving node config and reconfiguring"""
|
||||
nconfig = self.xmpp1['xep_0060'].getNodeConfig(self.pshost, 'testnode2')
|
||||
self.failUnless(nconfig, "No configuration returned")
|
||||
#print("\n%s ==\n %s" % (nconfig.getValues(), self.statev['defaultconfig'].getValues()))
|
||||
self.failUnless(nconfig.getValues() == self.statev['defaultconfig'].getValues(), "Configuration does not match")
|
||||
self.failUnless(self.xmpp1['xep_0060'].setNodeConfig(self.pshost, 'testnode2', nconfig))
|
||||
|
||||
def test006subscribetonode(self):
|
||||
"""Subscribe to node from account 2"""
|
||||
self.failUnless(self.xmpp2['xep_0060'].subscribe(self.pshost, "testnode2"))
|
||||
|
||||
def test007publishitem(self):
|
||||
"""Publishing item"""
|
||||
item = ET.Element('{http://netflint.net/protocol/test}test')
|
||||
w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
|
||||
self.xmpp2.registerHandler(w)
|
||||
result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
|
||||
msg = w.wait(5) # got to get a result in 5 seconds
|
||||
self.failUnless(msg != False, "Account #2 did not get message event")
|
||||
self.failUnless(result)
|
||||
#need to add check for update
|
||||
|
||||
def test008updateitem(self):
|
||||
"""Updating item"""
|
||||
item = ET.Element('{http://netflint.net/protocol/test}test', {'someattr': 'hi there'})
|
||||
w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
|
||||
self.xmpp2.registerHandler(w)
|
||||
result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
|
||||
msg = w.wait(5) # got to get a result in 5 seconds
|
||||
self.failUnless(msg != False, "Account #2 did not get message event")
|
||||
self.failUnless(result)
|
||||
#need to add check for update
|
||||
|
||||
def test009deleteitem(self):
|
||||
"""Deleting item"""
|
||||
w = Waiter('wait retract', StanzaPath('message/pubsub_event/items@node=testnode2'))
|
||||
self.xmpp2.registerHandler(w)
|
||||
result = self.xmpp1['xep_0060'].deleteItem(self.pshost, "testnode2", "test1")
|
||||
self.failUnless(result, "Got error when deleting item.")
|
||||
msg = w.wait(1)
|
||||
self.failUnless(msg != False, "Did not get retract notice.")
|
||||
|
||||
def test010unsubscribenode(self):
|
||||
"Unsubscribing Account #2"
|
||||
self.failUnless(self.xmpp2['xep_0060'].unsubscribe(self.pshost, "testnode2"), "Got error response when unsubscribing.")
|
||||
|
||||
def test011createcollectionnode(self):
|
||||
"Create a collection node w/ Account #2"
|
||||
self.failUnless(self.xmpp2['xep_0060'].create_node(self.pshost, "testnode3", self.statev['defaultconfig'], True), "Could not create collection node")
|
||||
|
||||
def test012subscribecollection(self):
|
||||
"Subscribe Account #1 to collection"
|
||||
self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode3"))
|
||||
|
||||
def test013assignnodetocollection(self):
|
||||
"Assign node to collection"
|
||||
self.failUnless(self.xmpp2['xep_0060'].addNodeToCollection(self.pshost, 'testnode2', 'testnode3'))
|
||||
|
||||
def test014publishcollection(self):
|
||||
"""Publishing item to collection child"""
|
||||
item = ET.Element('{http://netflint.net/protocol/test}test')
|
||||
w = Waiter('wait publish2', StanzaPath('message/pubsub_event/items@node=testnode2'))
|
||||
self.xmpp1.registerHandler(w)
|
||||
result = self.xmpp2['xep_0060'].setItem(self.pshost, "testnode2", (('test2', item),))
|
||||
msg = w.wait(5) # got to get a result in 5 seconds
|
||||
self.failUnless(msg != False, "Account #1 did not get message event: perhaps node was advertised incorrectly?")
|
||||
self.failUnless(result)
|
||||
|
||||
# def test016speedtest(self):
|
||||
# "Uncached speed test"
|
||||
# import time
|
||||
# start = time.time()
|
||||
# for y in range(0, 50000, 1000):
|
||||
# start2 = time.time()
|
||||
# for x in range(y, y+1000):
|
||||
# self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode4", subscribee="testuser%s@whatever" % x))
|
||||
# print time.time() - start2
|
||||
# seconds = time.time() - start
|
||||
# print "--", seconds
|
||||
# print "---------"
|
||||
# time.sleep(15)
|
||||
# self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4'), "Could not delete non-cached test node")
|
||||
|
||||
# def test015speedtest(self):
|
||||
# "cached speed test"
|
||||
# result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
||||
# self.statev['defaultconfig'] = result
|
||||
# self.statev['defaultconfig'].field['pubsub#node_type'].setValue("leaf")
|
||||
# self.statev['defaultconfig'].field['sleek#saveonchange'].setValue(True)
|
||||
# self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode4', self.statev['defaultconfig']))
|
||||
# self.statev['defaultconfig'].field['sleek#saveonchange'].setValue(False)
|
||||
# self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode5', self.statev['defaultconfig']))
|
||||
# start = time.time()
|
||||
# for y in range(0, 50000, 1000):
|
||||
# start2 = time.time()
|
||||
# for x in range(y, y+1000):
|
||||
# self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode5", subscribee="testuser%s@whatever" % x))
|
||||
# print time.time() - start2
|
||||
# seconds = time.time() - start
|
||||
# print "--", seconds
|
||||
|
||||
def test900cleanup(self):
|
||||
"Cleaning up"
|
||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2'), "Could not delete test node.")
|
||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3'), "Could not delete collection node")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
#parse command line arguements
|
||||
optp = OptionParser()
|
||||
optp.add_option('-q','--quiet', help='set logging to ERROR', action='store_const', dest='loglevel', const=logging.ERROR, default=logging.INFO)
|
||||
optp.add_option('-d','--debug', help='set logging to DEBUG', action='store_const', dest='loglevel', const=logging.DEBUG, default=logging.INFO)
|
||||
optp.add_option('-v','--verbose', help='set logging to COMM', action='store_const', dest='loglevel', const=5, default=logging.INFO)
|
||||
optp.add_option("-c","--config", dest="configfile", default="config.xml", help="set config file to use")
|
||||
optp.add_option("-n","--nodenum", dest="nodenum", default="1", help="set node number to use")
|
||||
optp.add_option("-p","--pubsub", dest="pubsub", default="1", help="set pubsub host to use")
|
||||
opts,args = optp.parse_args()
|
||||
|
||||
logging.basicConfig(level=opts.loglevel, format='%(levelname)-8s %(message)s')
|
||||
|
||||
#load xml config
|
||||
logging.info("Loading config file: %s" % opts.configfile)
|
||||
config = configparser.RawConfigParser()
|
||||
config.read(opts.configfile)
|
||||
|
||||
#init
|
||||
logging.info("Account 1 is %s" % config.get('account1', 'jid'))
|
||||
xmpp1 = TestClient(config.get('account1','jid'), config.get('account1','pass'))
|
||||
logging.info("Account 2 is %s" % config.get('account2', 'jid'))
|
||||
xmpp2 = TestClient(config.get('account2','jid'), config.get('account2','pass'))
|
||||
|
||||
xmpp1.registerPlugin('xep_0004')
|
||||
xmpp1.registerPlugin('xep_0030')
|
||||
xmpp1.registerPlugin('xep_0060')
|
||||
xmpp1.registerPlugin('xep_0199')
|
||||
xmpp2.registerPlugin('xep_0004')
|
||||
xmpp2.registerPlugin('xep_0030')
|
||||
xmpp2.registerPlugin('xep_0060')
|
||||
xmpp2.registerPlugin('xep_0199')
|
||||
|
||||
if not config.get('account1', 'server'):
|
||||
# we don't know the server, but the lib can probably figure it out
|
||||
xmpp1.connect()
|
||||
else:
|
||||
xmpp1.connect((config.get('account1', 'server'), 5222))
|
||||
xmpp1.process(threaded=True)
|
||||
|
||||
#init
|
||||
if not config.get('account2', 'server'):
|
||||
# we don't know the server, but the lib can probably figure it out
|
||||
xmpp2.connect()
|
||||
else:
|
||||
xmpp2.connect((config.get('account2', 'server'), 5222))
|
||||
xmpp2.process(threaded=True)
|
||||
|
||||
TestPubsubServer.xmpp1 = xmpp1
|
||||
TestPubsubServer.xmpp2 = xmpp2
|
||||
TestPubsubServer.pshost = config.get('settings', 'pubsub')
|
||||
xmpp1.waitforstart.get(True)
|
||||
xmpp2.waitforstart.get(True)
|
||||
testsuite = unittest.TestLoader().loadTestsFromTestCase(TestPubsubServer)
|
||||
|
||||
alltests_suite = unittest.TestSuite([testsuite])
|
||||
result = unittest.TextTestRunner(verbosity=2).run(alltests_suite)
|
||||
xmpp1.disconnect()
|
||||
xmpp2.disconnect()
|
13
conn_tests/testconfig.ini
Normal file
13
conn_tests/testconfig.ini
Normal file
@ -0,0 +1,13 @@
|
||||
[settings]
|
||||
enabled=true
|
||||
pubsub=pubsub.recon
|
||||
|
||||
[account1]
|
||||
jid=fritzy@recon
|
||||
pass=testing123
|
||||
server=
|
||||
|
||||
[account2]
|
||||
jid=fritzy2@recon
|
||||
pass=testing123
|
||||
server=
|
1
docs/.gitignore
vendored
1
docs/.gitignore
vendored
@ -1 +0,0 @@
|
||||
_build/*
|
130
docs/Makefile
130
docs/Makefile
@ -1,130 +0,0 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
-rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Slixmpp.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Slixmpp.qhc"
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/Slixmpp"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Slixmpp"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
make -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
BIN
docs/_static/images/arch_layers.png
vendored
BIN
docs/_static/images/arch_layers.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 27 KiB |
BIN
docs/_static/images/from_&yet.png
vendored
BIN
docs/_static/images/from_&yet.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB |
@ -1,88 +0,0 @@
|
||||
.. _internal-api:
|
||||
|
||||
Internal "API"
|
||||
==============
|
||||
|
||||
Slixmpp has a generic API registry that can be used by its plugins to allow
|
||||
access control, redefinition of behaviour, without having to inherit from the
|
||||
plugin or do more dark magic.
|
||||
|
||||
The idea is that each api call can be replaced, most of them use a form
|
||||
of in-memory storage that can be, for example, replaced with database
|
||||
or file-based storaged.
|
||||
|
||||
|
||||
Each plugin is assigned an API proxy bound to itself, but only a few make use
|
||||
of it.
|
||||
|
||||
See also :ref:`api-simple-tuto`.
|
||||
|
||||
Description of a generic API call
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def get_toto(jid, node, ifrom, args):
|
||||
return 'toto'
|
||||
|
||||
self.xmpp.plugin['xep_XXXX'].api.register(handler, 'get_toto')
|
||||
|
||||
Each API call will receive 4 parameters (which can be ``None`` if data
|
||||
is not relevant to the operation), which are ``jid`` (``Optional[JID]``),
|
||||
``node`` (``Optional[str]``), ``ifrom`` (``Optional[JID]``), and ``args``
|
||||
(``Any``).
|
||||
|
||||
- ``jid``, if relevant, represents the JID targeted by that operation
|
||||
- ``node``, if relevant is an arbitrary string, but was thought for, e.g.,
|
||||
a pubsub or disco node.
|
||||
- ``ifrom``, if relevant, is the JID the event is coming from.
|
||||
- ``args`` is the event-specific data passed on by the plugin, often a dict
|
||||
of arguments (can be None as well).
|
||||
|
||||
.. note::
|
||||
Since 1.8.0, API calls can be coroutines.
|
||||
|
||||
|
||||
Handler hierarchy
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
The ``self.api.register()`` signature is as follows:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def register(handler, op, jid=None, node=None, default=False):
|
||||
pass
|
||||
|
||||
As you can see, :meth:`~.APIRegistry.register` takes an additional ctype
|
||||
parameter, but the :class:`~.APIWrapper` takes care of that for us (in most
|
||||
cases, it is the name of the XEP plugin, such as ``'xep_0XXX'``).
|
||||
|
||||
When you register a handler, you register it for an ``op``, for **operation**.
|
||||
For example, ``get_vcard``.
|
||||
|
||||
``handler`` and ``op`` are the only two required parameters (and in many cases,
|
||||
all you will ever need). You can, however, go further and register handlers
|
||||
for specific values of the ``jid`` and ``node`` parameters of the calls.
|
||||
|
||||
The priority of the execution of handlers is as follows:
|
||||
|
||||
- Check if a handler for both values of ``node`` and ``jid`` has been defined
|
||||
- If not found, check if a handler for this value of ``jid`` has been defined
|
||||
- If not found, check if a handler for this value of ``node`` has been defined
|
||||
- If still not found, get the global handler (no parameter registered)
|
||||
|
||||
|
||||
Raw documentation
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
This documentation is provided for reference, but :meth:`~.APIRegistry.register`
|
||||
should be all you need.
|
||||
|
||||
|
||||
.. module:: slixmpp.api
|
||||
|
||||
.. autoclass:: APIRegistry
|
||||
:members:
|
||||
|
||||
.. autoclass:: APIWrapper
|
||||
|
@ -1,8 +0,0 @@
|
||||
========
|
||||
BaseXMPP
|
||||
========
|
||||
|
||||
.. module:: slixmpp.basexmpp
|
||||
|
||||
.. autoclass:: BaseXMPP
|
||||
:members:
|
@ -1,8 +0,0 @@
|
||||
==========
|
||||
ClientXMPP
|
||||
==========
|
||||
|
||||
.. module:: slixmpp.clientxmpp
|
||||
|
||||
.. autoclass:: ClientXMPP
|
||||
:members:
|
@ -1,8 +0,0 @@
|
||||
=============
|
||||
ComponentXMPP
|
||||
=============
|
||||
|
||||
.. module:: slixmpp.componentxmpp
|
||||
|
||||
.. autoclass:: ComponentXMPP
|
||||
:members:
|
@ -1,14 +0,0 @@
|
||||
Exceptions
|
||||
==========
|
||||
|
||||
.. module:: slixmpp.exceptions
|
||||
|
||||
|
||||
.. autoexception:: XMPPError
|
||||
:members:
|
||||
|
||||
.. autoexception:: IqError
|
||||
:members:
|
||||
|
||||
.. autoexception:: IqTimeout
|
||||
:members:
|
@ -1,17 +0,0 @@
|
||||
API Reference
|
||||
-------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
|
||||
clientxmpp
|
||||
componentxmpp
|
||||
basexmpp
|
||||
exceptions
|
||||
xmlstream/jid
|
||||
xmlstream/stanzabase
|
||||
xmlstream/handler
|
||||
xmlstream/matcher
|
||||
xmlstream/xmlstream
|
||||
xmlstream/tostring
|
||||
api
|
@ -1,111 +0,0 @@
|
||||
Plugin index
|
||||
============
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
xep_0004
|
||||
xep_0009
|
||||
xep_0012
|
||||
xep_0013
|
||||
xep_0020
|
||||
xep_0027
|
||||
xep_0030
|
||||
xep_0033
|
||||
xep_0045
|
||||
xep_0047
|
||||
xep_0049
|
||||
xep_0050
|
||||
xep_0054
|
||||
xep_0055
|
||||
xep_0059
|
||||
xep_0060
|
||||
xep_0065
|
||||
xep_0066
|
||||
xep_0070
|
||||
xep_0071
|
||||
xep_0077
|
||||
xep_0079
|
||||
xep_0080
|
||||
xep_0082
|
||||
xep_0084
|
||||
xep_0085
|
||||
xep_0086
|
||||
xep_0092
|
||||
xep_0100
|
||||
xep_0106
|
||||
xep_0107
|
||||
xep_0108
|
||||
xep_0115
|
||||
xep_0118
|
||||
xep_0122
|
||||
xep_0128
|
||||
xep_0131
|
||||
xep_0133
|
||||
xep_0152
|
||||
xep_0153
|
||||
xep_0163
|
||||
xep_0172
|
||||
xep_0184
|
||||
xep_0186
|
||||
xep_0191
|
||||
xep_0196
|
||||
xep_0198
|
||||
xep_0199
|
||||
xep_0202
|
||||
xep_0203
|
||||
xep_0221
|
||||
xep_0222
|
||||
xep_0223
|
||||
xep_0224
|
||||
xep_0231
|
||||
xep_0235
|
||||
xep_0249
|
||||
xep_0256
|
||||
xep_0257
|
||||
xep_0258
|
||||
xep_0264
|
||||
xep_0279
|
||||
xep_0280
|
||||
xep_0292
|
||||
xep_0297
|
||||
xep_0300
|
||||
xep_0308
|
||||
xep_0313
|
||||
xep_0317
|
||||
xep_0319
|
||||
xep_0332
|
||||
xep_0333
|
||||
xep_0334
|
||||
xep_0335
|
||||
xep_0352
|
||||
xep_0353
|
||||
xep_0356
|
||||
xep_0359
|
||||
xep_0363
|
||||
xep_0369
|
||||
xep_0372
|
||||
xep_0377
|
||||
xep_0380
|
||||
xep_0382
|
||||
xep_0385
|
||||
xep_0394
|
||||
xep_0402
|
||||
xep_0403
|
||||
xep_0404
|
||||
xep_0405
|
||||
xep_0421
|
||||
xep_0422
|
||||
xep_0424
|
||||
xep_0425
|
||||
xep_0428
|
||||
xep_0437
|
||||
xep_0439
|
||||
xep_0441
|
||||
xep_0444
|
||||
xep_0446
|
||||
xep_0447
|
||||
xep_0461
|
||||
xep_0469
|
||||
xep_0490
|
||||
xep_0492
|
@ -1,21 +0,0 @@
|
||||
|
||||
XEP-0004: Data Forms
|
||||
====================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0004
|
||||
|
||||
.. autoclass:: XEP_0004
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0004.stanza.field
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0004.stanza.form
|
||||
:members:
|
||||
:undoc-members:
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0009: Jabber-RPC
|
||||
====================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0009
|
||||
|
||||
.. autoclass:: XEP_0009
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0009.stanza.RPC
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,56 +0,0 @@
|
||||
|
||||
XEP-0012: Last Activity
|
||||
=======================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0012
|
||||
|
||||
.. autoclass:: XEP_0012
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
.. _api-0012:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
This plugin uses an in-memory storage by default to keep track of the
|
||||
received and sent last activities.
|
||||
|
||||
.. glossary::
|
||||
|
||||
get_last_activity
|
||||
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||
- **node**: unused
|
||||
- **ifrom**: who the request is from (None = local)
|
||||
- **args**: ``None`` or an :class:`~.Iq` that is requesting the
|
||||
- **returns**
|
||||
information.
|
||||
|
||||
Get the last activity of a JID from the storage.
|
||||
|
||||
set_last_activity
|
||||
- **jid**: :class:`~.JID` of whom to set the last activity
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: A dict containing ``'seconds'`` and ``'status'``
|
||||
``{'seconds': Optional[int], 'status': Optional[str]}``
|
||||
|
||||
Set the last activity of a JID in the storage.
|
||||
|
||||
del_last_activity
|
||||
- **jid**: :class:`~.JID` to delete from the storage
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
|
||||
Remove the last activity of a JID from the storage.
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0012.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0013: Flexible Offline Message Retrieval
|
||||
============================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0013
|
||||
|
||||
.. autoclass:: XEP_0013
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0013.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0020: Feature Negotiation
|
||||
=============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0020
|
||||
|
||||
.. autoclass:: XEP_0020
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0020.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,62 +0,0 @@
|
||||
|
||||
XEP-0027: Current Jabber OpenPGP Usage
|
||||
======================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0027
|
||||
|
||||
.. autoclass:: XEP_0027
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
.. _api-0027:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
The default API here is managing a JID→Keyid dict in-memory.
|
||||
|
||||
.. glossary::
|
||||
|
||||
get_keyid
|
||||
- **jid**: :class:`~.JID` to get.
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
- **returns**: ``Optional[str]``, the keyid or None
|
||||
|
||||
Get the KeyiD for a JID, None if it is not found.
|
||||
|
||||
set_keyid
|
||||
- **jid**: :class:`~.JID` to set the id for.
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: ``str``, keyid to set
|
||||
|
||||
Set the KeyiD for a JID.
|
||||
|
||||
del_keyid
|
||||
- **jid**: :class:`~.JID` to delete from the mapping.
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
|
||||
Delete the KeyiD for a JID.
|
||||
|
||||
get_keyids
|
||||
- **jid**: unused
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
- **returns**: ``Dict[JID, str]`` the full internal mapping
|
||||
|
||||
Get all currently stored KeyIDs.
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0027.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,39 +0,0 @@
|
||||
|
||||
XEP-0030: Service Discovery
|
||||
===========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0030
|
||||
|
||||
.. autoclass:: XEP_0030
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
.. _api-0030:
|
||||
|
||||
Internal API Methods
|
||||
--------------------
|
||||
|
||||
All ``api`` operations supported by the 0030 plugin are implemented as part of
|
||||
the :class:`~.StaticDisco` class which implement an in-memory cache for disco
|
||||
info and items.
|
||||
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0030.static
|
||||
:members:
|
||||
:member-order: bysource
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0030.stanza.info
|
||||
:members:
|
||||
:member-order: bysource
|
||||
:undoc-members:
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0030.stanza.items
|
||||
:members:
|
||||
:member-order: bysource
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0033: Extended Stanza Addressing
|
||||
====================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0033
|
||||
|
||||
.. autoclass:: XEP_0033
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0033.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,19 +0,0 @@
|
||||
|
||||
XEP-0045: Multi-User Chat
|
||||
=========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0045
|
||||
|
||||
.. autoclass:: XEP_0045
|
||||
:member-order: bysource
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0045.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,89 +0,0 @@
|
||||
|
||||
XEP-0047: In-band Bytestreams
|
||||
=============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0047
|
||||
|
||||
.. autoclass:: XEP_0047
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. autoclass:: IBBytestream
|
||||
:members:
|
||||
|
||||
.. _api-0047:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
The API here is used to manage streams and authorize. The default handlers
|
||||
work with the config parameters.
|
||||
|
||||
.. glossary::
|
||||
|
||||
authorized_sid (0047 version)
|
||||
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream is from.
|
||||
- **args**: :class:`~.Iq` of the stream request.
|
||||
- **returns**: ``True`` if the stream should be accepted,
|
||||
``False`` otherwise.
|
||||
|
||||
Check if the stream should be accepted. Uses
|
||||
the information setup by :term:`preauthorize_sid (0047 version)`
|
||||
by default.
|
||||
|
||||
authorized (0047 version)
|
||||
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream is from.
|
||||
- **args**: :class:`~.Iq` of the stream request.
|
||||
- **returns**: ``True`` if the stream should be accepted,
|
||||
``False`` otherwise.
|
||||
|
||||
A fallback handler (run after :term:`authorized_sid (0047 version)`)
|
||||
to check if a stream should be accepted. Uses the ``auto_accept``
|
||||
parameter by default.
|
||||
|
||||
preauthorize_sid (0047 version)
|
||||
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream will be from.
|
||||
- **args**: Unused.
|
||||
|
||||
Register a stream id to be accepted automatically (called from
|
||||
other plugins such as XEP-0095).
|
||||
|
||||
get_stream
|
||||
- **jid**: :class:`~.JID` of local receiver.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream is from.
|
||||
- **args**: unused
|
||||
- **returns**: :class:`~.IBBytestream`
|
||||
|
||||
Return a currently opened stream between two JIDs.
|
||||
|
||||
set_stream
|
||||
- **jid**: :class:`~.JID` of local receiver.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream is from.
|
||||
- **args**: unused
|
||||
|
||||
Register an opened stream between two JIDs.
|
||||
|
||||
del_stream
|
||||
- **jid**: :class:`~.JID` of local receiver.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream is from.
|
||||
- **args**: unused
|
||||
|
||||
Delete a stream between two JIDs.
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0047.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0049: Private XML Storage
|
||||
=============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0049
|
||||
|
||||
.. autoclass:: XEP_0049
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0049.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0050: Ad-Hoc Commands
|
||||
=========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0050
|
||||
|
||||
.. autoclass:: XEP_0050
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0050.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,52 +0,0 @@
|
||||
|
||||
XEP-0054: vcard-temp
|
||||
====================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0054
|
||||
|
||||
.. autoclass:: XEP_0054
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. _api-0054:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
This plugin maintains by default an in-memory cache of the received
|
||||
VCards.
|
||||
|
||||
.. glossary::
|
||||
|
||||
set_vcard
|
||||
- **jid**: :class:`~.JID` of whom to set the vcard
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: :class:`~.VCardTemp` object to store for this JID.
|
||||
|
||||
Set a VCard for a JID.
|
||||
|
||||
get_vcard
|
||||
- **jid**: :class:`~.JID` of whom to set the vcard
|
||||
- **node**: unused
|
||||
- **ifrom**: :class:`~.JID` the request is coming from
|
||||
- **args**: unused
|
||||
- **returns**: :class:`~.VCardTemp` object for this JID or None.
|
||||
|
||||
Get a stored VCard for a JID.
|
||||
|
||||
del_vcard
|
||||
- **jid**: :class:`~.JID` of whom to set the vcard
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
|
||||
Delete a stored VCard for a JID.
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0054.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0055: Jabber search
|
||||
=======================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0055
|
||||
|
||||
.. autoclass:: XEP_0055
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0055.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,21 +0,0 @@
|
||||
|
||||
XEP-0059: Result Set Management
|
||||
===============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0059
|
||||
|
||||
.. autoclass:: XEP_0059
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. autoclass:: ResultIterator
|
||||
:members:
|
||||
:member-order: bysource
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0059.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,37 +0,0 @@
|
||||
|
||||
XEP-0060: Publish-Subscribe
|
||||
===========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0060
|
||||
|
||||
.. autoclass:: XEP_0060
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0060.stanza.base
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub_errors
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub_owner
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub_event
|
||||
:members:
|
||||
:undoc-members:
|
@ -1,60 +0,0 @@
|
||||
|
||||
XEP-0065: SOCKS5 Bytestreams
|
||||
============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0065
|
||||
|
||||
.. autoclass:: XEP_0065
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. _api-0065:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
The internal API is used here to authorize or pre-authorize streams.
|
||||
|
||||
.. glossary::
|
||||
|
||||
authorized_sid (0065 version)
|
||||
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream is from.
|
||||
- **args**: :class:`~.Iq` of the stream request.
|
||||
- **returns**: ``True`` if the stream should be accepted,
|
||||
``False`` otherwise.
|
||||
|
||||
Check if the stream should be accepted. Uses
|
||||
the information setup by :term:`preauthorize_sid (0065 version)`
|
||||
by default.
|
||||
|
||||
authorized (0065 version)
|
||||
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream is from.
|
||||
- **args**: :class:`~.Iq` of the stream request.
|
||||
- **returns**: ``True`` if the stream should be accepted,
|
||||
``False`` otherwise.
|
||||
|
||||
A fallback handler (run after :term:`authorized_sid (0065 version)`)
|
||||
to check if a stream should be accepted. Uses the ``auto_accept``
|
||||
parameter by default.
|
||||
|
||||
preauthorize_sid (0065 version)
|
||||
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||
- **node**: stream id
|
||||
- **ifrom**: who the stream will be from.
|
||||
- **args**: Unused.
|
||||
|
||||
Register a stream id to be accepted automatically (called from
|
||||
other plugins such as XEP-0095).
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0065.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0066: Out of Band Data
|
||||
==========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0066
|
||||
|
||||
.. autoclass:: XEP_0066
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0066.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0070: Verifying HTTP Requests via XMPP
|
||||
==========================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0070
|
||||
|
||||
.. autoclass:: XEP_0070
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0070.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0071: XHTML-IM
|
||||
==================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0071
|
||||
|
||||
.. autoclass:: XEP_0071
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0071.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,65 +0,0 @@
|
||||
|
||||
XEP-0077: In-Band Registration
|
||||
==============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0077
|
||||
|
||||
.. autoclass:: XEP_0077
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
Internal APi methods
|
||||
--------------------
|
||||
|
||||
The API here is made to allow components to manage registered users.
|
||||
The default handlers make use of the plugin options and store users
|
||||
in memory.
|
||||
|
||||
.. glossary::
|
||||
|
||||
user_get
|
||||
- **jid**: unused
|
||||
- **node**: unused
|
||||
- **ifrom**: who the request is coming from
|
||||
- **args**: :class:`~.Iq` registration request.
|
||||
- **returns**: ``dict`` containing user data or None.
|
||||
|
||||
Get user data for a user.
|
||||
|
||||
user_validate
|
||||
- **jid**: unused
|
||||
- **node**: unused
|
||||
- **ifrom**: who the request is coming from
|
||||
- **args**: :class:`~.Iq` registration request, 'register' payload.
|
||||
- **raises**: ValueError if some fields are invalid
|
||||
|
||||
Validate form fields and save user data.
|
||||
|
||||
user_remove
|
||||
- **jid**: unused
|
||||
- **node**: unused
|
||||
- **ifrom**: who the request is coming from
|
||||
- **args**: :class:`~.Iq` registration removal request.
|
||||
- **raises**: KeyError if the user is not found.
|
||||
|
||||
Remove a user from the store.
|
||||
|
||||
make_registration_form
|
||||
- **jid**: unused
|
||||
- **node**: unused
|
||||
- **ifrom**: who the request is coming from
|
||||
- **args**: :class:`~.Iq` registration request.
|
||||
- **raises**: KeyError if the user is not found.
|
||||
|
||||
Return an :class:`~.Iq` reply for the request, with a form and
|
||||
options set. By default, use ``form_fields`` and ``form_instructions``
|
||||
plugin config options.
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0077.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0079: Advanced Message Processing
|
||||
=====================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0079
|
||||
|
||||
.. autoclass:: XEP_0079
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0079.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0080: User Location
|
||||
=======================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0080
|
||||
|
||||
.. autoclass:: XEP_0080
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0080.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0082: XMPP Date and Time Profiles
|
||||
=====================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0082
|
||||
|
||||
.. autoclass:: XEP_0082
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0084: User Avatar
|
||||
=====================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0084
|
||||
|
||||
.. autoclass:: XEP_0084
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0084.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0085: Chat State Notifications
|
||||
==================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0085
|
||||
|
||||
.. autoclass:: XEP_0085
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0085.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0086: Error Condition Mappings
|
||||
==================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0086
|
||||
|
||||
.. autoclass:: XEP_0086
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0086.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0092: Software Version
|
||||
==========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0092
|
||||
|
||||
.. autoclass:: XEP_0092
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0092.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0100: Gateway interaction
|
||||
=============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0100
|
||||
|
||||
.. autoclass:: XEP_0100
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0106: JID Escaping
|
||||
======================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0106
|
||||
|
||||
.. autoclass:: XEP_0106
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0107: User Mood
|
||||
===================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0107
|
||||
|
||||
.. autoclass:: XEP_0107
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0107.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0108: User Activity
|
||||
=======================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0108
|
||||
|
||||
.. autoclass:: XEP_0108
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0108.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,66 +0,0 @@
|
||||
|
||||
XEP-0115: Entity Capabilities
|
||||
=============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0115
|
||||
|
||||
.. autoclass:: XEP_0115
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. _api-0115:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
This internal API extends the Disco internal API, and also manages an
|
||||
in-memory cache of verstring→disco info, and fulljid→verstring.
|
||||
|
||||
.. glossary::
|
||||
|
||||
cache_caps
|
||||
- **jid**: unused
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: a ``dict`` containing the verstring and
|
||||
:class:`~.DiscoInfo` payload (
|
||||
``{'verstring': Optional[str], 'info': Optional[DiscoInfo]}``)
|
||||
|
||||
Cache a verification string with its payload.
|
||||
|
||||
get_caps
|
||||
- **jid**: JID to retrieve the verstring for (unused with the default
|
||||
handler)
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: a ``dict`` containing the verstring
|
||||
``{'verstring': str}``
|
||||
- **returns**: The :class:`~.DiscoInfo` payload for that verstring.
|
||||
|
||||
Get a disco payload from a verstring.
|
||||
|
||||
assign_verstring
|
||||
- **jid**: :class:`~.JID` (full) to assign the verstring to
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: a ``dict`` containing the verstring
|
||||
``{'verstring': str}``
|
||||
|
||||
Cache JID→verstring information.
|
||||
|
||||
get_verstring
|
||||
- **jid**: :class:`~.JID` to use for fetching the verstring
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
- **returns**: ``str``, the verstring
|
||||
|
||||
Retrieve a verstring for a JID.
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0115.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0118: User Tune
|
||||
===================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0118
|
||||
|
||||
.. autoclass:: XEP_0118
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0118.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0122: Data Forms Validation
|
||||
===============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0122
|
||||
|
||||
.. autoclass:: XEP_0122
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0122.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,44 +0,0 @@
|
||||
|
||||
XEP-0128: Service Discovery Extensions
|
||||
======================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0128
|
||||
|
||||
.. autoclass:: XEP_0128
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. _api-0128:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
|
||||
|
||||
.. glossary::
|
||||
|
||||
add_extended_info
|
||||
- **jid**: JID to set the extended info for
|
||||
- **node**: note to set the info at
|
||||
- **ifrom**: unused
|
||||
- **args**: A :class:`~.Form` or list of forms to add to the disco
|
||||
extended info for this JID/node.
|
||||
|
||||
Add extended info for a JID/node.
|
||||
|
||||
set_extended_info
|
||||
- **jid**: JID to set the extended info for
|
||||
- **node**: note to set the info at
|
||||
- **ifrom**: unused
|
||||
- **args**: A :class:`~.Form` or list of forms to set as the disco
|
||||
extended info for this JID/node.
|
||||
|
||||
Set extended info for a JID/node.
|
||||
|
||||
del_extended_info
|
||||
- **jid**: JID to delete the extended info from
|
||||
- **node**: note to delete the info from
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
|
||||
Delete extended info for a JID/node.
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0131: Stanza Headers and Internet Metadata
|
||||
==============================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0131
|
||||
|
||||
.. autoclass:: XEP_0131
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0131.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0133: Service Administration
|
||||
================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0133
|
||||
|
||||
.. autoclass:: XEP_0133
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0152: Reachability Addresses
|
||||
================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0152
|
||||
|
||||
.. autoclass:: XEP_0152
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0152.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,55 +0,0 @@
|
||||
|
||||
XEP-0153: vCard-Based Avatars
|
||||
=============================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0153
|
||||
|
||||
.. autoclass:: XEP_0153
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. _api-0153:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
The internal API is used here to maintain an in-memory JID→avatar hash
|
||||
cache.
|
||||
|
||||
.. glossary::
|
||||
|
||||
set_hash
|
||||
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: ``str``, avatar hash
|
||||
|
||||
Set the avatar hash for a JID.
|
||||
|
||||
reset_hash
|
||||
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||
- **node**: unused
|
||||
- **ifrom**: :class:`~.JID` of the entity requesting the reset.
|
||||
- **args**: unused
|
||||
- **returns**
|
||||
information.
|
||||
|
||||
Reset the avatar hash for a JID. This downloads the vcard and computes
|
||||
the hash.
|
||||
|
||||
get_hash
|
||||
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: unused
|
||||
- **returns**: ``Optional[str]``, the avatar hash
|
||||
|
||||
Get the avatar hash for a JID.
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0153.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0163: Personal Eventing Protocol (PEP)
|
||||
==========================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0163
|
||||
|
||||
.. autoclass:: XEP_0163
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0172: User Nickname
|
||||
=======================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0172
|
||||
|
||||
.. autoclass:: XEP_0172
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0172.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0184: Message Delivery Receipts
|
||||
===================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0184
|
||||
|
||||
.. autoclass:: XEP_0184
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0184.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0186: Invisible Command
|
||||
===========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0186
|
||||
|
||||
.. autoclass:: XEP_0186
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0186.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0191: Blocking Command
|
||||
==========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0191
|
||||
|
||||
.. autoclass:: XEP_0191
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0191.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0196: User Gaming
|
||||
=====================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0196
|
||||
|
||||
.. autoclass:: XEP_0196
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0196.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0198: Stream Management
|
||||
===========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0198
|
||||
|
||||
.. autoclass:: XEP_0198
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0198.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0199: XMPP Ping
|
||||
===================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0199
|
||||
|
||||
.. autoclass:: XEP_0199
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0199.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0202: Entity Time
|
||||
=====================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0202
|
||||
|
||||
.. autoclass:: XEP_0202
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0202.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0203: Delayed Delivery
|
||||
==========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0203
|
||||
|
||||
.. autoclass:: XEP_0203
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0203.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0221: Data Forms Media Element
|
||||
==================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0221
|
||||
|
||||
.. autoclass:: XEP_0221
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0221.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0222: Persistent Storage of Public Data via PubSub
|
||||
======================================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0222
|
||||
|
||||
.. autoclass:: XEP_0222
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0223: Persistent Storage of Private Data via PubSub
|
||||
=======================================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0223
|
||||
|
||||
.. autoclass:: XEP_0223
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0224: Attention
|
||||
===================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0224
|
||||
|
||||
.. autoclass:: XEP_0224
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0224.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,53 +0,0 @@
|
||||
|
||||
XEP-0231: Bits of Binary
|
||||
========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0231
|
||||
|
||||
.. autoclass:: XEP_0231
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
.. _api-0231:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
The default API handlers for this plugin manage an in-memory cache of
|
||||
bits of binary by content-id.
|
||||
|
||||
.. glossary::
|
||||
|
||||
set_bob
|
||||
- **jid**: :class:`~.JID` sending the bob
|
||||
- **node**: unused
|
||||
- **ifrom**: :class:`~JID` receiving the bob
|
||||
- **args**: :class:`~.BitsOfBinary` element.
|
||||
|
||||
Set a BoB in the cache.
|
||||
|
||||
get_bob
|
||||
- **jid**: :class:`~.JID` receiving the bob
|
||||
- **node**: unused
|
||||
- **ifrom**: :class:`~JID` sending the bob
|
||||
- **args**: ``str`` content-id of the bob
|
||||
- **returns**: :class:`~.BitsOfBinary` element.
|
||||
|
||||
Get a BoB from the cache.
|
||||
|
||||
del_bob
|
||||
- **jid**: unused
|
||||
- **node**: unused
|
||||
- **ifrom**: :class:`~JID` sending the bob
|
||||
- **args**: ``str`` content-id of the bob
|
||||
|
||||
Delete a BoB from the cache.
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0231.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0235: OAuth Over XMPP
|
||||
=========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0235
|
||||
|
||||
.. autoclass:: XEP_0235
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0235.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0249: Direct MUC Invitations
|
||||
================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0249
|
||||
|
||||
.. autoclass:: XEP_0249
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0249.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,9 +0,0 @@
|
||||
|
||||
XEP-0256: Last Activity in Presence
|
||||
===================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0256
|
||||
|
||||
.. autoclass:: XEP_0256
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0257: Client Certificate Management for SASL EXTERNAL
|
||||
=========================================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0257
|
||||
|
||||
.. autoclass:: XEP_0257
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0257.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0258: Security Labels in XMPP
|
||||
=================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0258
|
||||
|
||||
.. autoclass:: XEP_0258
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0258.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0264: Jingle Content Thumbnails
|
||||
===================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0264
|
||||
|
||||
.. autoclass:: XEP_0264
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0264.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0279: Server IP Check
|
||||
=========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0279
|
||||
|
||||
.. autoclass:: XEP_0279
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0279.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0280: Message Carbons
|
||||
=========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0280
|
||||
|
||||
.. autoclass:: XEP_0280
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0280.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,17 +0,0 @@
|
||||
|
||||
XEP-0292: vCard4 Over XMPP
|
||||
==========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0292
|
||||
|
||||
.. autoclass:: XEP_0292
|
||||
:members:
|
||||
:exclude-members: plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0292.stanza
|
||||
:members:
|
||||
:undoc-members:
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0297: Stanza Forwarding
|
||||
===========================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0297
|
||||
|
||||
.. autoclass:: XEP_0297
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0297.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0300: Use of Cryptographic Hash Functions in XMPP
|
||||
=====================================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0300
|
||||
|
||||
.. autoclass:: XEP_0300
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0300.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0308: Last Message Correction
|
||||
=================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0308
|
||||
|
||||
.. autoclass:: XEP_0308
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0308.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,19 +0,0 @@
|
||||
|
||||
XEP-0313: Message Archive Management
|
||||
====================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0313
|
||||
|
||||
.. autoclass:: XEP_0313
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0313.stanza
|
||||
:members:
|
||||
:member-order: bysource
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0317: Hats
|
||||
==============
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0317
|
||||
|
||||
.. autoclass:: XEP_0317
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0317.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,45 +0,0 @@
|
||||
|
||||
XEP-0319: Last User Interaction in Presence
|
||||
===========================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0319
|
||||
|
||||
.. autoclass:: XEP_0319
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
.. _api-0319:
|
||||
|
||||
Internal API methods
|
||||
--------------------
|
||||
|
||||
The default API manages an in-memory cache of idle periods.
|
||||
|
||||
.. glossary::
|
||||
|
||||
set_idle
|
||||
- **jid**: :class:`~.JID` who has been idling
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: :class:`datetime`, timestamp of the idle start
|
||||
|
||||
Set the idle start for a JID.
|
||||
|
||||
get_idle
|
||||
- **jid**: :class:`~.JID` to get the idle time of
|
||||
- **node**: unused
|
||||
- **ifrom**: unused
|
||||
- **args**: : unused
|
||||
- **returns**: :class:`datetime`
|
||||
|
||||
Get the idle start timestamp for a JID.
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0319.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,26 +0,0 @@
|
||||
|
||||
XEP-0332: HTTP over XMPP transport
|
||||
==================================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0332
|
||||
|
||||
.. autoclass:: XEP_0332
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0332.stanza.data
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0332.stanza.request
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0332.stanza.response
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
XEP-0333: Chat Markers
|
||||
======================
|
||||
|
||||
.. module:: slixmpp.plugins.xep_0333
|
||||
|
||||
.. autoclass:: XEP_0333
|
||||
:members:
|
||||
:exclude-members: session_bind, plugin_init, plugin_end
|
||||
|
||||
|
||||
Stanza elements
|
||||
---------------
|
||||
|
||||
.. automodule:: slixmpp.plugins.xep_0333.stanza
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user