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)