Compare commits
	
		
			59 Commits
		
	
	
		
			test-ci
			...
			0.9-conn-f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | bf2bf29fc6 | ||
|   | 34dc236126 | ||
|   | 9464736551 | ||
|   | 47f1fb1690 | ||
|   | 66cf0c2021 | ||
|   | e7c37c4ec5 | ||
|   | 919c8c5633 | ||
|   | f54501a346 | ||
|   | d20cd6b3e6 | ||
|   | da6e1e47dc | ||
|   | 2f0f18a8c6 | ||
|   | 1c32668e18 | ||
|   | 1f3cfb98f1 | ||
|   | 4295a66c70 | ||
|   | 8227affd7f | ||
|   | 3a2f989c5e | ||
|   | 85a2715c7d | ||
|   | b03e6168a8 | ||
|   | 2a43f59a58 | ||
|   | 184f7cb8a4 | ||
|   | e1aa4d0b93 | ||
|   | 7930ed22f2 | ||
|   | 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 | ||
|   | 8e95ae2948 | ||
|   | 341c110b6a | ||
|   | 7522839141 | ||
|   | 4c410dd48a | ||
|   | a92075a659 | ||
|   | 7552efee5c | ||
|   | 6bc6ebb95d | ||
|   | e0c32b6d9b | 
							
								
								
									
										13
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| ################ Please use Gitlab instead of Github ################################### | ||||
|  | ||||
| Hello, thank you for contributing to slixmpp! | ||||
|  | ||||
| You’re about to open a pull request on github. However this github repository is not the official place for contributions on slixmpp. | ||||
|  | ||||
| Please open your merge request on https://lab.louiz.org/poezio/slixmpp/ | ||||
|  | ||||
| You should be able to log in there with your github credentials, clone the slixmpp repository in your namespace, push your existing pull request into a new branch, and then open a merge request with one click, within 3 minutes. | ||||
|  | ||||
| This will help us review your contribution, avoid spreading things everywhere and it will even run the tests automatically with your changes. | ||||
|  | ||||
| Thank you. | ||||
							
								
								
									
										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 | ||||
|   | ||||
| @@ -1,81 +0,0 @@ | ||||
| stages: | ||||
|   - lint | ||||
|   - test | ||||
|   - trigger | ||||
|  | ||||
| mypy: | ||||
|   stage: lint | ||||
|   tags: | ||||
|     - docker | ||||
|   image: python:3 | ||||
|   script: | ||||
|     - pip3 install mypy | ||||
|     - mypy slixmpp | ||||
|  | ||||
| test-3.7: | ||||
|   stage: test | ||||
|   tags: | ||||
|     - docker | ||||
|   image: python:3.7 | ||||
|   script: | ||||
|     - apt-get update | ||||
|     - apt-get install -y python3 python3-pip cython3 gpg | ||||
|     - pip3 install emoji aiohttp cryptography | ||||
|     - ./run_tests.py | ||||
|  | ||||
| test-3.10: | ||||
|   stage: test | ||||
|   tags: | ||||
|     - docker | ||||
|   image: python:3.10 | ||||
|   script: | ||||
|     - apt update | ||||
|     - apt-get install -y python3 python3-pip cython3 gpg | ||||
|     - pip3 install emoji aiohttp cryptography | ||||
|     - ./run_tests.py | ||||
|  | ||||
| test-3.11: | ||||
|   stage: test | ||||
|   tags: | ||||
|     - docker | ||||
|   image: python:3.11 | ||||
|   script: | ||||
|     - apt-get update | ||||
|     - apt-get install -y python3 python3-pip cython3 gpg | ||||
|     - pip3 install emoji aiohttp cryptography | ||||
|     - ./run_tests.py | ||||
|  | ||||
| test-3.12: | ||||
|   stage: test | ||||
|   tags: | ||||
|     - docker | ||||
|   image: python:3.12-rc | ||||
|   allow_failure: true | ||||
|   script: | ||||
|     - apt-get update | ||||
|     - apt-get install -y python3 python3-pip cython3 gpg | ||||
|     - pip3 install emoji aiohttp cryptography | ||||
|     - ./run_tests.py | ||||
|  | ||||
| test_integration: | ||||
|   stage: test | ||||
|   tags: | ||||
|     - docker | ||||
|   image: python:3 | ||||
|   only: | ||||
|     variables: | ||||
|         - $CI_ACCOUNT1 | ||||
|         - $CI_ACCOUNT2 | ||||
|   script: | ||||
|     - apt-get update | ||||
|     - apt-get install -y python3 python3-pip cython3 gpg | ||||
|     - pip3 install emoji aiohttp aiodns | ||||
|     - ./run_integration_tests.py | ||||
|  | ||||
| trigger_poezio: | ||||
|   stage: trigger | ||||
|   tags: | ||||
|     - docker | ||||
|   image: curlimages/curl:7.79.1 | ||||
|   script: | ||||
|     - curl --request POST -F token="$SLIXMPP_TRIGGER_TOKEN" -F ref=master https://lab.louiz.org/api/v4/projects/18/trigger/pipeline | ||||
| @@ -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,7 +0,0 @@ | ||||
| language: python | ||||
| python: | ||||
|   - "3.7" | ||||
|   - "3.8-dev" | ||||
| install: | ||||
|   - "pip install ." | ||||
| script: testall.py | ||||
| @@ -1,6 +0,0 @@ | ||||
| steps: | ||||
|   mypy: | ||||
|     image: python:3 | ||||
|     commands: | ||||
|       - pip3 install mypy types-setuptools | ||||
|       - mypy slixmpp | ||||
| @@ -1,10 +0,0 @@ | ||||
| steps: | ||||
|   test_integration: | ||||
|     image: "python:3.11" | ||||
|     secrets: [ci_account1, ci_account1_password, ci_account2, ci_account2_password, 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,17 +0,0 @@ | ||||
| steps: | ||||
|   unit_tests: | ||||
|     image: "python:${TAG}" | ||||
|     commands: | ||||
|     - apt-get update | ||||
|     - apt-get install -y python3 python3-pip cython3 gpg | ||||
|     - pip3 install emoji aiohttp cryptography | ||||
|     - ./run_tests.py | ||||
|  | ||||
| matrix: | ||||
|   TAG: | ||||
|     - "3.7" | ||||
|     - "3.9" | ||||
|     - "3.8" | ||||
|     - "3.10" | ||||
|     - "3.11" | ||||
|     - "3.12" | ||||
| @@ -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,96 +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_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_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_0279 | ||||
|     xep_0280 | ||||
|     xep_0297 | ||||
|     xep_0300 | ||||
|     xep_0308 | ||||
|     xep_0313 | ||||
|     xep_0319 | ||||
|     xep_0332 | ||||
|     xep_0333 | ||||
|     xep_0334 | ||||
|     xep_0335 | ||||
|     xep_0352 | ||||
|     xep_0353 | ||||
|     xep_0356 | ||||
|     xep_0359 | ||||
|     xep_0363 | ||||
|     xep_0369 | ||||
|     xep_0377 | ||||
|     xep_0380 | ||||
|     xep_0394 | ||||
|     xep_0403 | ||||
|     xep_0404 | ||||
|     xep_0405 | ||||
|     xep_0421 | ||||
|     xep_0422 | ||||
|     xep_0424 | ||||
|     xep_0425 | ||||
|     xep_0428 | ||||
|     xep_0437 | ||||
|     xep_0439 | ||||
|     xep_0441 | ||||
|     xep_0444 | ||||
| @@ -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-0106: 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-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,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
		Reference in New Issue
	
	Block a user