Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-nbxmpp for openSUSE:Factory 
checked in at 2026-04-21 12:44:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-nbxmpp (Old)
 and      /work/SRC/openSUSE:Factory/.python-nbxmpp.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-nbxmpp"

Tue Apr 21 12:44:04 2026 rev:58 rq:1348323 version:7.2.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-nbxmpp/python-nbxmpp.changes      
2026-02-27 17:13:42.213549191 +0100
+++ /work/SRC/openSUSE:Factory/.python-nbxmpp.new.11940/python-nbxmpp.changes   
2026-04-21 12:46:25.674424351 +0200
@@ -1,0 +2,10 @@
+Mon Apr 20 20:58:35 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 7.2.0:
+  * Implement XEP-445 Pre-Auth IBR
+  * OpenPGP: Make sure fingerprints are always upper case
+  * VCard4: Request access model before publishing
+  * Presence: Add preauth attribute
+  * Protocol: Add feature method for pre approval
+
+-------------------------------------------------------------------

Old:
----
  python-nbxmpp-7.1.0.tar.bz2

New:
----
  python-nbxmpp-7.2.0.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-nbxmpp.spec ++++++
--- /var/tmp/diff_new_pack.miAAKJ/_old  2026-04-21 12:46:26.282449573 +0200
+++ /var/tmp/diff_new_pack.miAAKJ/_new  2026-04-21 12:46:26.282449573 +0200
@@ -19,7 +19,7 @@
 %define _name   nbxmpp
 %{?sle15_python_module_pythons}
 Name:           python-nbxmpp
-Version:        7.1.0
+Version:        7.2.0
 Release:        0
 Summary:        XMPP library by Gajim team
 License:        GPL-3.0-or-later
@@ -32,7 +32,7 @@
 BuildRequires:  %{python_module idna}
 BuildRequires:  %{python_module packaging}
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module precis-i18n}
+BuildRequires:  %{python_module precis-i18n >= 1.0.0}
 BuildRequires:  %{python_module setuptools >= 65.0}
 BuildRequires:  %{python_module sqlite3}
 BuildRequires:  %{python_module wheel}

++++++ python-nbxmpp-7.1.0.tar.bz2 -> python-nbxmpp-7.2.0.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/ChangeLog 
new/python-nbxmpp-7.2.0/ChangeLog
--- old/python-nbxmpp-7.1.0/ChangeLog   2026-02-25 20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/ChangeLog   2026-04-19 19:12:23.000000000 +0200
@@ -1,3 +1,16 @@
+nbxmpp 7.2.0 (19 Apr 2026)
+
+  New
+
+  * Implement XEP-445 Pre-Auth IBR
+
+  Improvements
+
+  * OpenPGP: Make sure fingerprints are always upper case
+  * VCard4: Request access model before publishing
+  * Presence: Add preauth attribute
+  * Protocol: Add feature method for pre approval
+
 nbxmpp 7.1.0 (22 Feb 2026)
 
   Improvements
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/__init__.py 
new/python-nbxmpp-7.2.0/nbxmpp/__init__.py
--- old/python-nbxmpp-7.1.0/nbxmpp/__init__.py  2026-02-25 20:15:32.000000000 
+0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/__init__.py  2026-04-19 19:12:23.000000000 
+0200
@@ -4,4 +4,4 @@
 
 from .protocol import *  # noqa: F403, E402
 
-__version__: str = "7.1.0"
+__version__: str = "7.2.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/modules/date_and_time.py 
new/python-nbxmpp-7.2.0/nbxmpp/modules/date_and_time.py
--- old/python-nbxmpp-7.1.0/nbxmpp/modules/date_and_time.py     2026-02-25 
20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/modules/date_and_time.py     2026-04-19 
19:12:23.000000000 +0200
@@ -193,12 +193,3 @@
 
     # convert=None
     return date_time
-
-
-def get_local_time() -> tuple[str, str]:
-    formated_time = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
-    isdst = time.localtime().tm_isdst
-    zone = -(time.timezone, time.altzone)[isdst] / 60.0
-    zone = (zone / 60, abs(zone % 60))
-    tzo = "%+03d:%02d" % zone
-    return formated_time, tzo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/modules/entity_time.py 
new/python-nbxmpp-7.2.0/nbxmpp/modules/entity_time.py
--- old/python-nbxmpp-7.1.0/nbxmpp/modules/entity_time.py       2026-02-25 
20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/modules/entity_time.py       2026-04-19 
19:12:23.000000000 +0200
@@ -8,13 +8,13 @@
 
 from typing import TYPE_CHECKING
 
+import datetime as dt
 from collections.abc import Callable
 
 from nbxmpp.errors import MalformedStanzaError
 from nbxmpp.errors import StanzaError
 from nbxmpp.modules.base import BaseModule
 from nbxmpp.modules.date_and_time import create_tzinfo
-from nbxmpp.modules.date_and_time import get_local_time
 from nbxmpp.modules.date_and_time import parse_datetime
 from nbxmpp.namespaces import Namespace
 from nbxmpp.protocol import ERR_FORBIDDEN
@@ -91,6 +91,19 @@
         raise NodeProcessed
 
 
+def get_local_time() -> tuple[str, str]:
+    utc = dt.datetime.now(tz=dt.timezone.utc)
+    utc_formated = utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+    local = utc.astimezone()
+    if local.utcoffset() == utc.utcoffset():
+        offset = "Z"
+    else:
+        # %z has the format ±HHMM[SS[.ffffff]]
+        offset = local.strftime("%z")[:5]
+        offset = f"{offset[:-2]}:{offset[-2:]}"
+    return utc_formated, offset
+
+
 def _make_request(jid: JID) -> Iq:
     iq = Iq("get", to=jid)
     iq.addChild("time", namespace=Namespace.TIME)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/modules/openpgp.py 
new/python-nbxmpp-7.2.0/nbxmpp/modules/openpgp.py
--- old/python-nbxmpp-7.1.0/nbxmpp/modules/openpgp.py   2026-02-25 
20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/modules/openpgp.py   2026-04-19 
19:12:23.000000000 +0200
@@ -168,7 +168,7 @@
 
         date_str = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(date))
         result = yield self.publish(
-            f"{Namespace.OPENPGP_PK}:{fingerprint}",
+            f"{Namespace.OPENPGP_PK}:{fingerprint.upper()}",
             _make_public_key(key, date_str),
             id_=date_str,
             options=options,
@@ -182,7 +182,7 @@
         task = yield
 
         items = yield self.request_items(
-            f"{Namespace.OPENPGP_PK}:{fingerprint}", max_items=1, jid=jid
+            f"{Namespace.OPENPGP_PK}:{fingerprint.upper()}", max_items=1, 
jid=jid
         )
 
         raise_if_error(items)
@@ -371,7 +371,7 @@
     if keylist is not None:
         for key in keylist:
             date = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(key.date))
-            attrs = {"v4-fingerprint": key.fingerprint, "date": date}
+            attrs = {"v4-fingerprint": key.fingerprint.upper(), "date": date}
             item.addChild("pubkey-metadata", attrs=attrs)
     return item
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/modules/presence.py 
new/python-nbxmpp-7.2.0/nbxmpp/modules/presence.py
--- old/python-nbxmpp-7.1.0/nbxmpp/modules/presence.py  2026-02-25 
20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/modules/presence.py  2026-04-19 
19:12:23.000000000 +0200
@@ -109,9 +109,13 @@
 
     @log_calls
     def subscribe(
-        self, jid: JID, status: str | None = None, nick: str | None = None
+        self,
+        jid: JID,
+        status: str | None = None,
+        nick: str | None = None,
+        preauth: str | None = None,
     ) -> None:
-        self.send(jid=jid, typ="subscribe", status=status, nick=nick)
+        self.send(jid=jid, typ="subscribe", status=status, nick=nick, 
preauth=preauth)
 
     def send(
         self,
@@ -127,6 +131,7 @@
         muc: bool = False,
         muc_history=None,
         muc_password: str | None = None,
+        preauth: str | None = None,
         extend=None,
     ) -> None:
 
@@ -156,6 +161,9 @@
             if muc_password is not None:
                 muc_x.setTagData("password", muc_password)
 
+        if preauth is not None:
+            presence.setTag(Namespace.PARS + " preauth", attrs={"token": 
preauth})
+
         if extend is not None:
             for node in extend:
                 presence.addChild(node=node)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-nbxmpp-7.1.0/nbxmpp/modules/register/register.py 
new/python-nbxmpp-7.2.0/nbxmpp/modules/register/register.py
--- old/python-nbxmpp-7.1.0/nbxmpp/modules/register/register.py 2026-02-25 
20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/modules/register/register.py 2026-04-19 
19:12:23.000000000 +0200
@@ -43,6 +43,19 @@
         yield process_response(response)
 
     @iq_request_task
+    def send_preauth(self, token: str, jid: JID | None = None):
+        _task = yield
+
+        if jid is None:
+            jid = self._client.domain
+
+        iq = Iq("set", to=jid)
+        iq.addChild("preauth", namespace=Namespace.PARS, attrs={"token": 
token})
+
+        response = yield iq
+        yield process_response(response)
+
+    @iq_request_task
     def request_register_form(self, jid: JID | None = None):
         _task = yield
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/modules/vcard4.py 
new/python-nbxmpp-7.2.0/nbxmpp/modules/vcard4.py
--- old/python-nbxmpp-7.1.0/nbxmpp/modules/vcard4.py    2026-02-25 
20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/modules/vcard4.py    2026-04-19 
19:12:23.000000000 +0200
@@ -16,6 +16,7 @@
 from dataclasses import dataclass
 from dataclasses import field
 
+from nbxmpp.errors import is_error
 from nbxmpp.errors import MalformedStanzaError
 from nbxmpp.modules.base import BaseModule
 from nbxmpp.modules.util import finalize
@@ -1207,6 +1208,7 @@
 
     _depends = {
         "publish": "PubSub",
+        "get_access_model": "PubSub",
         "request_items": "PubSub",
     }
 
@@ -1264,10 +1266,14 @@
         yield _get_vcard(items[0])
 
     @iq_request_task
-    def set_vcard(self, vcard: VCard, public: bool = False):
+    def set_vcard(self, vcard: VCard, public: bool | None = None):
         task = yield
 
-        access_model = "open" if public else "presence"
+        if public is not None:
+            access_model = "open" if public else "presence"
+        else:
+            result = yield self.get_access_model(Namespace.VCARD4_PUBSUB)
+            access_model = "presence" if is_error(result) else result
 
         options = {
             "pubsub#persist_items": "true",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/namespaces.py 
new/python-nbxmpp-7.2.0/nbxmpp/namespaces.py
--- old/python-nbxmpp-7.1.0/nbxmpp/namespaces.py        2026-02-25 
20:15:32.000000000 +0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/namespaces.py        2026-04-19 
19:12:23.000000000 +0200
@@ -73,6 +73,7 @@
     HTTPUPLOAD_0: str = "urn:xmpp:http:upload:0"
     HTTP_AUTH: str = "http://jabber.org/protocol/http-auth";
     IBB: str = "http://jabber.org/protocol/ibb";
+    IBR_TOKEN = "urn:xmpp:ibr-token:0"  # noqa: S105
     IDLE: str = "urn:xmpp:idle:1"
     JINGLE: str = "urn:xmpp:jingle:1"
     JINGLE_BYTESTREAM: str = "urn:xmpp:jingle:transports:s5b:1"
@@ -119,7 +120,9 @@
     OPENPGP: str = "urn:xmpp:openpgp:0"
     OPENPGP_PK: str = "urn:xmpp:openpgp:0:public-keys"
     OPENPGP_SK: str = "urn:xmpp:openpgp:0:secret-key"
+    PARS: str = "urn:xmpp:pars:0"
     PING: str = "urn:xmpp:ping"
+    PRE_APPROVAL: str = "urn:xmpp:features:pre-approval"
     PRIVACY: str = "jabber:iq:privacy"
     PRIVATE: str = "jabber:iq:private"
     PUBKEY_ATTEST: str = "urn:xmpp:attest:2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/protocol.py 
new/python-nbxmpp-7.2.0/nbxmpp/protocol.py
--- old/python-nbxmpp-7.1.0/nbxmpp/protocol.py  2026-02-25 20:15:32.000000000 
+0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/protocol.py  2026-04-19 19:12:23.000000000 
+0200
@@ -2026,9 +2026,15 @@
     def has_roster_version(self) -> bool:
         return self.getTag("ver", namespace=Namespace.ROSTER_VER) is not None
 
+    def has_pre_approval(self) -> bool:
+        return self.getTag("sub", namespace=Namespace.PRE_APPROVAL) is not None
+
     def has_register(self) -> bool:
         return self.getTag("register", namespace=Namespace.REGISTER_FEATURE) 
is not None
 
+    def has_ibr_token(self) -> bool:
+        return self.getTag("register", namespace=Namespace.IBR_TOKEN) is not 
None
+
     def has_anonymous(self) -> bool:
         return "ANONYMOUS" in self.get_mechs()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/nbxmpp/structs.py 
new/python-nbxmpp-7.2.0/nbxmpp/structs.py
--- old/python-nbxmpp-7.1.0/nbxmpp/structs.py   2026-02-25 20:15:32.000000000 
+0100
+++ new/python-nbxmpp-7.2.0/nbxmpp/structs.py   2026-04-19 19:12:23.000000000 
+0200
@@ -781,7 +781,7 @@
 
 class AdHocCommand(NamedTuple):
     jid: JID
-    node: Node
+    node: str
     name: str | None
     sessionid: str | None = None
     status: AdHocStatus | None = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-nbxmpp-7.1.0/python-nbxmpp.doap 
new/python-nbxmpp-7.2.0/python-nbxmpp.doap
--- old/python-nbxmpp-7.1.0/python-nbxmpp.doap  2026-02-25 20:15:32.000000000 
+0100
+++ new/python-nbxmpp-7.2.0/python-nbxmpp.doap  2026-04-19 19:12:23.000000000 
+0200
@@ -375,6 +375,13 @@
     </implements>
     <implements>
       <xmpp:SupportedXep>
+        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0379.html"/>
+        <xmpp:status>complete</xmpp:status>
+        <xmpp:version>0.3.3</xmpp:version>
+      </xmpp:SupportedXep>
+    </implements>
+    <implements>
+      <xmpp:SupportedXep>
         <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0380.html"/>
         <xmpp:status>complete</xmpp:status>
         <xmpp:version>0.1</xmpp:version>
@@ -453,6 +460,13 @@
     </implements>
     <implements>
       <xmpp:SupportedXep>
+        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0445.html"/>
+        <xmpp:status>complete</xmpp:status>
+        <xmpp:version>0.2.0</xmpp:version>
+      </xmpp:SupportedXep>
+    </implements>
+    <implements>
+      <xmpp:SupportedXep>
         <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0461.html"/>
         <xmpp:status>complete</xmpp:status>
         <xmpp:version>0.2.0</xmpp:version>
@@ -465,5 +479,13 @@
         <xmpp:version>0.1.0</xmpp:version>
       </xmpp:SupportedXep>
     </implements>
+    <implements>
+      <xmpp:SupportedXep>
+        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0511.html"/>
+        <xmpp:status>complete</xmpp:status>
+        <xmpp:version>0.1.0</xmpp:version>
+        <xmpp:since>7.1.0</xmpp:since>
+      </xmpp:SupportedXep>
+    </implements>
   </Project>
 </rdf:RDF>

Reply via email to