Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-SecretStorage for 
openSUSE:Factory checked in at 2026-03-05 17:14:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-SecretStorage (Old)
 and      /work/SRC/openSUSE:Factory/.python-SecretStorage.new.561 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-SecretStorage"

Thu Mar  5 17:14:02 2026 rev:21 rq:1336216 version:3.5.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-SecretStorage/python-SecretStorage.changes    
    2025-11-18 15:31:03.285188101 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-SecretStorage.new.561/python-SecretStorage.changes
       2026-03-05 17:15:21.719182965 +0100
@@ -1,0 +2,9 @@
+Tue Mar  3 20:51:08 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 3.5.0:
+  * Added ``timeout`` argument to the ``unlock()`` methods of
+    ``Collection`` and ``Item`` [`#33`_].
+  * Removed ``int_to_bytes()`` function in favor of the built-in
+    method.
+
+-------------------------------------------------------------------

Old:
----
  secretstorage-3.4.1.tar.gz

New:
----
  secretstorage-3.5.0.tar.gz

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

Other differences:
------------------
++++++ python-SecretStorage.spec ++++++
--- /var/tmp/diff_new_pack.6izNxD/_old  2026-03-05 17:15:22.819228689 +0100
+++ /var/tmp/diff_new_pack.6izNxD/_new  2026-03-05 17:15:22.823228855 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-SecretStorage
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -27,7 +27,7 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-SecretStorage%{psuffix}
-Version:        3.4.1
+Version:        3.5.0
 Release:        0
 Summary:        Python bindings to FreeDesktoporg Secret Service API
 License:        BSD-3-Clause

++++++ secretstorage-3.4.1.tar.gz -> secretstorage-3.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/PKG-INFO 
new/secretstorage-3.5.0/PKG-INFO
--- old/secretstorage-3.4.1/PKG-INFO    2025-11-11 12:30:11.427642300 +0100
+++ new/secretstorage-3.5.0/PKG-INFO    2025-11-23 20:02:38.705194500 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: SecretStorage
-Version: 3.4.1
+Version: 3.5.0
 Summary: Python bindings to FreeDesktop.org Secret Service API
 Author-email: Dmitry Shachnev <[email protected]>
 License-Expression: BSD-3-Clause
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/SecretStorage.egg-info/PKG-INFO 
new/secretstorage-3.5.0/SecretStorage.egg-info/PKG-INFO
--- old/secretstorage-3.4.1/SecretStorage.egg-info/PKG-INFO     2025-11-11 
12:30:11.000000000 +0100
+++ new/secretstorage-3.5.0/SecretStorage.egg-info/PKG-INFO     2025-11-23 
20:02:38.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: SecretStorage
-Version: 3.4.1
+Version: 3.5.0
 Summary: Python bindings to FreeDesktop.org Secret Service API
 Author-email: Dmitry Shachnev <[email protected]>
 License-Expression: BSD-3-Clause
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/secretstorage-3.4.1/SecretStorage.egg-info/SOURCES.txt 
new/secretstorage-3.5.0/SecretStorage.egg-info/SOURCES.txt
--- old/secretstorage-3.4.1/SecretStorage.egg-info/SOURCES.txt  2025-11-11 
12:30:11.000000000 +0100
+++ new/secretstorage-3.5.0/SecretStorage.egg-info/SOURCES.txt  2025-11-23 
20:02:38.000000000 +0100
@@ -28,7 +28,6 @@
 tests/run_tests.py
 tests/test_collection.py
 tests/test_context_manager.py
-tests/test_dhcrypto.py
 tests/test_exceptions.py
 tests/test_item.py
 tests/test_unlocking.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/changelog 
new/secretstorage-3.5.0/changelog
--- old/secretstorage-3.4.1/changelog   2025-11-11 12:30:06.000000000 +0100
+++ new/secretstorage-3.5.0/changelog   2025-11-23 20:02:35.000000000 +0100
@@ -1,3 +1,12 @@
+SecretStorage 3.5.0, 2025-11-23
+===============================
+
+* Added ``timeout`` argument to the ``unlock()`` methods of ``Collection``
+  and ``Item`` [`#33`_].
+* Removed ``int_to_bytes()`` function in favor of the built-in method.
+
+.. _`#33`: https://github.com/mitya57/secretstorage/issues/33
+
 SecretStorage 3.4.1, 2025-11-11
 ===============================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/docs/conf.py 
new/secretstorage-3.5.0/docs/conf.py
--- old/secretstorage-3.4.1/docs/conf.py        2025-11-11 12:30:06.000000000 
+0100
+++ new/secretstorage-3.5.0/docs/conf.py        2025-11-23 20:02:35.000000000 
+0100
@@ -32,9 +32,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = '3.4'
+version = '3.5'
 # The full version, including alpha/beta/rc tags.
-release = '3.4.1'
+release = '3.5.0'
 
 # The name of the Pygments (syntax highlighting) style to use.
 pygments_style = 'sphinx'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/docs/index.rst 
new/secretstorage-3.5.0/docs/index.rst
--- old/secretstorage-3.4.1/docs/index.rst      2025-11-11 12:30:06.000000000 
+0100
+++ new/secretstorage-3.5.0/docs/index.rst      2025-11-23 20:02:35.000000000 
+0100
@@ -17,7 +17,7 @@
 .. _`Secret Service`: https://specifications.freedesktop.org/secret-service/
 .. _`GNOME Keyring`: https://wiki.gnome.org/Projects/GnomeKeyring
 .. _KWallet: https://invent.kde.org/frameworks/kwallet
-.. _KeePassXC: https://avaldes.co/2020/01/28/secret-service-keepassxc.html
+.. _KeePassXC: https://c3pb.de/blog/keepassxc-secrets-service.html
 
 SecretStorage code is hosted on GitHub_.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/pyproject.toml 
new/secretstorage-3.5.0/pyproject.toml
--- old/secretstorage-3.4.1/pyproject.toml      2025-11-11 12:30:06.000000000 
+0100
+++ new/secretstorage-3.5.0/pyproject.toml      2025-11-23 20:02:35.000000000 
+0100
@@ -4,7 +4,7 @@
 
 [project]
 name = "SecretStorage"
-version = "3.4.1"
+version = "3.5.0"
 description = "Python bindings to FreeDesktop.org Secret Service API"
 authors = [{name = "Dmitry Shachnev", email = "[email protected]"}]
 license = "BSD-3-Clause"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/secretstorage/__init__.py 
new/secretstorage-3.5.0/secretstorage/__init__.py
--- old/secretstorage-3.4.1/secretstorage/__init__.py   2025-11-11 
12:30:06.000000000 +0100
+++ new/secretstorage-3.5.0/secretstorage/__init__.py   2025-11-23 
20:02:35.000000000 +0100
@@ -29,7 +29,7 @@
 from secretstorage.item import Item
 from secretstorage.util import add_match_rules
 
-__version_tuple__ = (3, 4, 1)
+__version_tuple__ = (3, 5, 0)
 __version__ = '.'.join(map(str, __version_tuple__))
 
 __all__ = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/secretstorage/collection.py 
new/secretstorage-3.5.0/secretstorage/collection.py
--- old/secretstorage-3.4.1/secretstorage/collection.py 2025-11-11 
12:30:06.000000000 +0100
+++ new/secretstorage-3.5.0/secretstorage/collection.py 2025-11-23 
20:02:35.000000000 +0100
@@ -1,6 +1,6 @@
 # SecretStorage module for Python
 # Access passwords using the SecretService DBus API
-# Author: Dmitry Shachnev, 2013-2022
+# Author: Dmitry Shachnev, 2013-2025
 # License: 3-clause BSD, see LICENSE file
 
 """Collection is a place where secret items are stored. Normally, only
@@ -66,17 +66,23 @@
         if self.is_locked():
             raise LockedException('Collection is locked!')
 
-    def unlock(self) -> bool:
+    def unlock(self, timeout: float | None = None) -> bool:
         """Requests unlocking the collection.
 
         Returns a boolean representing whether the prompt has been
         dismissed; that means :const:`False` on successful unlocking
         and :const:`True` if it has been dismissed.
 
+        :raises: ``TimeoutError`` if `timeout` (in seconds) passed
+           and the prompt was neither accepted nor dismissed.
+
         .. versionchanged:: 3.0
            No longer accepts the ``callback`` argument.
+
+        .. versionchanged:: 3.5
+           Added ``timeout`` argument.
         """
-        return unlock_objects(self.connection, [self.collection_path])
+        return unlock_objects(self.connection, [self.collection_path], 
timeout=timeout)
 
     def lock(self) -> None:
         """Locks the collection."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/secretstorage/dhcrypto.py 
new/secretstorage-3.5.0/secretstorage/dhcrypto.py
--- old/secretstorage-3.4.1/secretstorage/dhcrypto.py   2025-11-11 
12:30:06.000000000 +0100
+++ new/secretstorage-3.5.0/secretstorage/dhcrypto.py   2025-11-23 
20:02:35.000000000 +0100
@@ -8,7 +8,6 @@
 algorithm.'''
 
 import hmac
-import math
 import os
 from hashlib import sha256
 
@@ -27,12 +26,6 @@
 )
 
 
-def int_to_bytes(number: int, length: int) -> bytes:
-    result = number.to_bytes(math.ceil(number.bit_length() / 8), 'big')
-    # Pad with zero bytes if needed.
-    return b'\x00' * (length - len(result)) + result
-
-
 DH_PRIME_1024 = int.from_bytes(DH_PRIME_1024_BYTES, 'big')
 
 
@@ -48,7 +41,7 @@
     def set_server_public_key(self, server_public_key: int) -> None:
         common_secret_int = pow(server_public_key, self.my_private_key,
                                 DH_PRIME_1024)
-        common_secret = int_to_bytes(common_secret_int, 128)
+        common_secret = common_secret_int.to_bytes(128, 'big')
         # HKDF with null salt, empty info and SHA-256 hash
         salt = b'\x00' * 0x20
         pseudo_random_key = hmac.new(salt, common_secret, sha256).digest()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/secretstorage/item.py 
new/secretstorage-3.5.0/secretstorage/item.py
--- old/secretstorage-3.4.1/secretstorage/item.py       2025-11-11 
12:30:06.000000000 +0100
+++ new/secretstorage-3.5.0/secretstorage/item.py       2025-11-23 
20:02:35.000000000 +0100
@@ -1,6 +1,6 @@
 # SecretStorage module for Python
 # Access passwords using the SecretService DBus API
-# Author: Dmitry Shachnev, 2013-2018
+# Author: Dmitry Shachnev, 2013-2025
 # License: 3-clause BSD, see LICENSE file
 
 """SecretStorage item contains a *secret*, some *attributes* and a
@@ -53,7 +53,7 @@
         if self.is_locked():
             raise LockedException('Item is locked!')
 
-    def unlock(self) -> bool:
+    def unlock(self, timeout: float | None = None) -> bool:
         """Requests unlocking the item. Usually, this means that the
         whole collection containing this item will be unlocked.
 
@@ -61,12 +61,18 @@
         dismissed; that means :const:`False` on successful unlocking
         and :const:`True` if it has been dismissed.
 
+        :raises: ``TimeoutError`` if `timeout` (in seconds) passed
+           and the prompt was neither accepted nor dismissed.
+
         .. versionadded:: 2.1.2
 
         .. versionchanged:: 3.0
            No longer accepts the ``callback`` argument.
+
+        .. versionchanged:: 3.5
+           Added ``timeout`` argument.
         """
-        return unlock_objects(self.connection, [self.item_path])
+        return unlock_objects(self.connection, [self.item_path], 
timeout=timeout)
 
     def get_attributes(self) -> dict[str, str]:
         """Returns item attributes (dictionary)."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/secretstorage/util.py 
new/secretstorage-3.5.0/secretstorage/util.py
--- old/secretstorage-3.4.1/secretstorage/util.py       2025-11-11 
12:30:06.000000000 +0100
+++ new/secretstorage-3.5.0/secretstorage/util.py       2025-11-23 
20:02:35.000000000 +0100
@@ -35,7 +35,7 @@
     SS_PATH,
     SS_PREFIX,
 )
-from secretstorage.dhcrypto import Session, int_to_bytes
+from secretstorage.dhcrypto import Session
 from secretstorage.exceptions import (
     ItemNotFoundException,
     SecretServiceNotAvailableException,
@@ -102,7 +102,7 @@
         output, result = service.call(
             'OpenSession', 'sv',
             ALGORITHM_DH,
-            ('ay', int_to_bytes(session.my_public_key, 128)))
+            ('ay', session.my_public_key.to_bytes(128, 'big')))
     except DBusErrorResponse as resp:
         if resp.name != DBUS_NOT_SUPPORTED:
             raise
@@ -147,13 +147,25 @@
     )
 
 
-def exec_prompt(connection: DBusConnection,
-                prompt_path: str) -> tuple[bool, list[str]]:
+def exec_prompt(
+    connection: DBusConnection,
+    prompt_path: str,
+    *,
+    timeout: float | None = None,
+) -> tuple[bool, tuple[str, Any]]:
     """Executes the prompt in a blocking mode.
 
-    :returns: a tuple; the first element is a boolean value showing
-              whether the operation was dismissed, the second element
-              is a list of unlocked object paths
+    :returns: a two-element tuple:
+
+       - The first element is a boolean value indicating whether the operation 
was
+         dismissed.
+       - The second element is a (signature, result) tuple. For creating items 
and
+         collections, ``signature`` is ``'o'`` and ``result`` is a single 
object
+         path. For unlocking, ``signature`` is ``'ao'`` and ``result`` is a 
list of
+         object paths.
+
+    .. versionchanged:: 3.5
+       Added ``timeout`` keyword argument.
     """
     prompt = DBusAddressWrapper(prompt_path, PROMPT_IFACE, connection)
     rule = MatchRule(
@@ -164,21 +176,35 @@
     )
     with connection.filter(rule) as signals:
         prompt.call('Prompt', 's', '')
-        dismissed, result = connection.recv_until_filtered(signals).body
+        message = connection.recv_until_filtered(signals, timeout=timeout)
+        dismissed, result = message.body
     assert dismissed is not None
     assert result is not None
     return dismissed, result
 
 
-def unlock_objects(connection: DBusConnection, paths: list[str]) -> bool:
+def unlock_objects(
+    connection: DBusConnection,
+    paths: list[str],
+    *,
+    timeout: float | None = None,
+) -> bool:
     """Requests unlocking objects specified in `paths`.
     Returns a boolean representing whether the operation was dismissed.
 
-    .. versionadded:: 2.1.2"""
+    .. versionadded:: 2.1.2
+
+    .. versionchanged:: 3.5
+       Added ``timeout`` keyword argument.
+    """
     service = DBusAddressWrapper(SS_PATH, SERVICE_IFACE, connection)
     unlocked_paths, prompt = service.call('Unlock', 'ao', paths)
     if len(prompt) > 1:
-        dismissed, (signature, unlocked) = exec_prompt(connection, prompt)
+        dismissed, (signature, unlocked) = exec_prompt(
+            connection,
+            prompt,
+            timeout=timeout,
+        )
         assert signature == 'ao'
         return dismissed
     return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/secretstorage-3.4.1/tests/test_dhcrypto.py 
new/secretstorage-3.5.0/tests/test_dhcrypto.py
--- old/secretstorage-3.4.1/tests/test_dhcrypto.py      2025-11-11 
12:30:06.000000000 +0100
+++ new/secretstorage-3.5.0/tests/test_dhcrypto.py      1970-01-01 
01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-# Tests for SecretStorage
-# Author: Dmitry Shachnev, 2014-2025
-# License: 3-clause BSD, see LICENSE file
-
-# This file tests the dhcrypto module.
-
-import unittest
-
-from secretstorage.dhcrypto import int_to_bytes
-
-
-class ConversionTest(unittest.TestCase):
-    """A test case that tests conversion functions
-    between bytes and long."""
-
-    def test_int_to_bytes(self) -> None:
-        self.assertEqual(int_to_bytes(1, 1), b'\x01')
-        self.assertEqual(int_to_bytes(1, 2), b'\x00\x01')
-        self.assertEqual(int_to_bytes(258, 2), b'\x01\x02')
-        self.assertEqual(int_to_bytes(1 << 64, 9), b'\x01' + b'\x00' * 8)

Reply via email to