Metadata-Version: 2.4
Name: pyiks
Version: 0.6.0
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: File Formats
Classifier: Topic :: Internet :: XMPP
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Text Processing :: Markup :: XML
License-File: COPYING
License-File: COPYING.LESSER
Summary: A Python binding for the iksemel XML/XMPP library.
License-Expression: LGPL-3.0-or-later
Requires-Python: >=3.12
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: homepage, https://github.com/meduketto/iksemel-python

# pyiks

Copyright (c) 2025-2026 Gurer Ozen <meduketto at gmail.com>

[pyiks][pyiks] is a Python binding for the [iksemel][iksemel]
which is an XML parser library for Jabber/XMPP and
general XML processing applications written in Rust.
Iksemel aims to be easy to use, fast, and usable in
resource-constrained environments.

[![PyPI Version](https://img.shields.io/pypi/v/pyiks)](https://pypi.org/search/?q=pyiks)
[![PyPI Downloads](https://img.shields.io/pepy/dt/pyiks)](https://pepy.tech/projects/pyiks)
![GitHub License](https://img.shields.io/github/license/meduketto/iksemel-python)

# Features

pyiks only provides the DOM and XMPP client interfaces of iksemel
at this time.

# Usage

Here is a simple example showing parsing and editing:

```python
xml_text = "<doc><a>123</a><b><a>456</a><a>789</a></b></doc>"

doc = pyiks.parse(xml_text)

doc.find_tag("b").first_tag().remove()
doc.find_tag("a").set_attribute("x", "1")

assert str(doc) == '<doc><a x="1">123</a><b><a>789</a></b></doc>'
```

A basic XMPP client example:
```python
client = pyiks.XmppClient(my_jid, my_password)

# Will complete the negotiation and login process.
# The channel bind response will be returned as the first stanza.
stanza = client.wait_for_stanza()

client.send_message(to_jid, "hello!")
```

# License

Iksemel is free software: you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.

Iksemel is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Iksemel. If not, see <https://www.gnu.org/licenses/>.


[iksemel]: https://github.com/meduketto/iksemel-rust
[pyiks]: https://github.com/meduketto/iksemel-python

