Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-humanreadable for 
openSUSE:Factory checked in at 2026-05-10 16:48:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-humanreadable (Old)
 and      /work/SRC/openSUSE:Factory/.python-humanreadable.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-humanreadable"

Sun May 10 16:48:19 2026 rev:6 rq:1352260 version:0.4.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-humanreadable/python-humanreadable.changes    
    2025-06-10 09:09:35.226104428 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-humanreadable.new.1966/python-humanreadable.changes
      2026-05-10 16:49:03.962600567 +0200
@@ -1,0 +2,11 @@
+Sun May 10 10:00:54 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.4.3:
+  * Improve error handling
+- update to 0.4.2:
+  * Bump the actions-dependencies group across 1 directory with 6
+    updates
+  * Drop support for Python 3.9 and add support for Python 3.14
+  * Update typepy version constraint to <3
+
+-------------------------------------------------------------------

Old:
----
  humanreadable-0.4.1.tar.gz

New:
----
  humanreadable-0.4.3.tar.gz

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

Other differences:
------------------
++++++ python-humanreadable.spec ++++++
--- /var/tmp/diff_new_pack.GI5tfl/_old  2026-05-10 16:49:04.894638710 +0200
+++ /var/tmp/diff_new_pack.GI5tfl/_new  2026-05-10 16:49:04.902639038 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-humanreadable
 #
-# 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
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-humanreadable
-Version:        0.4.1
+Version:        0.4.3
 Release:        0
 Summary:        A Python library to convert from human-readable values to 
Python values
 License:        MIT

++++++ humanreadable-0.4.1.tar.gz -> humanreadable-0.4.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/.github/workflows/ci.yml 
new/humanreadable-0.4.3/.github/workflows/ci.yml
--- old/humanreadable-0.4.1/.github/workflows/ci.yml    2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/.github/workflows/ci.yml    2026-05-09 
16:45:10.000000000 +0200
@@ -26,12 +26,12 @@
     timeout-minutes: 20
 
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v6
         with:
           fetch-depth: 0
           fetch-tags: true
 
-      - uses: actions/setup-python@v5
+      - uses: actions/setup-python@v6
         with:
           python-version: "3.13"
           cache: pip
@@ -44,7 +44,7 @@
 
       - run: make build
 
-      - uses: actions/upload-artifact@v4
+      - uses: actions/upload-artifact@v7
         with:
           name: dist
           path: ./dist/*
@@ -57,12 +57,12 @@
     timeout-minutes: 20
 
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v6
         with:
           fetch-depth: 0
           fetch-tags: true
 
-      - uses: actions/setup-python@v5
+      - uses: actions/setup-python@v6
         with:
           python-version: "3.13"
           cache: pip
@@ -80,7 +80,7 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "pypy-3.10"]
+        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "pypy-3.10"]
         os: [ubuntu-latest, macos-latest, windows-latest]
         exclude:
           - os: windows-latest
@@ -96,10 +96,10 @@
           config: ${{ vars.PERMISSIONS_CONFIG }}
         if: ${{ matrix.os == 'ubuntu-latest' }}
 
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v6
 
       - name: Setup Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@v6
         with:
           python-version: ${{ matrix.python-version }}
           cache: pip
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/.github/workflows/publish.yml 
new/humanreadable-0.4.3/.github/workflows/publish.yml
--- old/humanreadable-0.4.1/.github/workflows/publish.yml       2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/.github/workflows/publish.yml       2026-05-09 
16:45:10.000000000 +0200
@@ -14,12 +14,12 @@
     timeout-minutes: 20
 
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v6
         with:
           fetch-depth: 0
           fetch-tags: true
 
-      - uses: actions/setup-python@v5
+      - uses: actions/setup-python@v6
         with:
           python-version: "3.13"
           cache: pip
@@ -32,7 +32,7 @@
 
       - run: make build
 
-      - uses: actions/upload-artifact@v4
+      - uses: actions/upload-artifact@v7
         with:
           name: dist
           path: ./dist/*
@@ -48,7 +48,7 @@
       id-token: write  # IMPORTANT: this permission is mandatory for trusted 
publishing
 
     steps:
-      - uses: actions/download-artifact@v4
+      - uses: actions/download-artifact@v8
         with:
           name: dist
           path: ./dist
@@ -65,20 +65,20 @@
       contents: write
 
     steps:
-      - uses: actions/download-artifact@v4
+      - uses: actions/download-artifact@v8
         with:
           name: dist
           path: ./dist
 
       - name: Sign the dists with Sigstore
-        uses: sigstore/[email protected]
+        uses: sigstore/[email protected]
         with:
           inputs: >-
             ./dist/*.tar.gz
             ./dist/*.whl
 
       - name: Generate a GitHub release
-        uses: softprops/action-gh-release@v2
+        uses: softprops/action-gh-release@v3
         with:
           generate_release_notes: true
           files: dist/*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/LICENSE 
new/humanreadable-0.4.3/LICENSE
--- old/humanreadable-0.4.1/LICENSE     2025-05-04 07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/LICENSE     2026-05-09 16:45:10.000000000 +0200
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2019 Tsuyoshi Hombashi
+Copyright (c) 2019-2026 Tsuyoshi Hombashi
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/Makefile 
new/humanreadable-0.4.3/Makefile
--- old/humanreadable-0.4.1/Makefile    2025-05-04 07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/Makefile    2026-05-09 16:45:10.000000000 +0200
@@ -4,7 +4,7 @@
 
 PYTHON := python3
 
-AUTHOR := thombashi
+AUTHOR := Tsuyoshi Hombashi
 FIRST_RELEASE_YEAR := 2019
 LAST_UPDATE_YEAR := $(shell git log -1 --format=%cd --date=format:%Y)
 
@@ -13,7 +13,7 @@
 build-remote: clean
        @mkdir -p $(BUILD_WORK_DIR)
        @cd $(BUILD_WORK_DIR) && \
-               git clone https://github.com/$(AUTHOR)/$(PACKAGE).git --depth 1 
&& \
+               git clone https://github.com/thombashi/$(PACKAGE).git --depth 1 
&& \
                cd $(PACKAGE) && \
                $(PYTHON) -m tox -e build
        ls -lh $(PKG_BUILD_DIR)/dist/*
@@ -51,6 +51,10 @@
        @$(PYTHON) -m pip install -q --disable-pip-version-check --upgrade -e 
.[test]
        @$(PYTHON) -m pip check
 
+.PHONY: test
+test:
+       $(PYTHON) -m tox -e py
+
 .PHONY: update-copyright
 update-copyright:
        sed -i "s/f\"Copyright .*/f\"Copyright 
$(FIRST_RELEASE_YEAR)-$(LAST_UPDATE_YEAR), {__author__}\"/" 
$(PACKAGE)/__version__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/PKG-INFO 
new/humanreadable-0.4.3/PKG-INFO
--- old/humanreadable-0.4.1/PKG-INFO    2025-05-04 07:34:41.393539700 +0200
+++ new/humanreadable-0.4.3/PKG-INFO    2026-05-09 16:45:37.694397400 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: humanreadable
-Version: 0.4.1
+Version: 0.4.3
 Summary: humanreadable is a Python library to convert human-readable values to 
other units.
 Home-page: https://github.com/thombashi/humanreadable
 Author: Tsuyoshi Hombashi
@@ -16,11 +16,11 @@
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -28,10 +28,10 @@
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: Text Processing
 Classifier: Typing :: Typed
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 Description-Content-Type: text/x-rst
 License-File: LICENSE
-Requires-Dist: typepy<2,>=1.2.0
+Requires-Dist: typepy<3,>=1.2.0
 Provides-Extra: test
 Requires-Dist: pytest; extra == "test"
 Requires-Dist: pytest-md-report>=0.6.2; extra == "test"
@@ -223,5 +223,5 @@
 
 Dependencies
 ============================================
-- Python 3.9+
+- Python 3.10+
 - `Python package dependencies (automatically installed) 
<https://github.com/thombashi/humanreadable/network/dependencies>`__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/README.rst 
new/humanreadable-0.4.3/README.rst
--- old/humanreadable-0.4.1/README.rst  2025-05-04 07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/README.rst  2026-05-09 16:45:10.000000000 +0200
@@ -171,5 +171,5 @@
 
 Dependencies
 ============================================
-- Python 3.9+
+- Python 3.10+
 - `Python package dependencies (automatically installed) 
<https://github.com/thombashi/humanreadable/network/dependencies>`__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/humanreadable/__version__.py 
new/humanreadable-0.4.3/humanreadable/__version__.py
--- old/humanreadable-0.4.1/humanreadable/__version__.py        2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable/__version__.py        2026-05-09 
16:45:10.000000000 +0200
@@ -1,6 +1,6 @@
 __author__ = "Tsuyoshi Hombashi"
-__copyright__ = f"Copyright 2019-2025, {__author__}"
+__copyright__ = f"Copyright 2019-2026, {__author__}"
 __license__ = "MIT License"
-__version__ = "0.4.1"
+__version__ = "0.4.3"
 __maintainer__ = __author__
 __email__ = "[email protected]"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/humanreadable/_base.py 
new/humanreadable-0.4.3/humanreadable/_base.py
--- old/humanreadable-0.4.1/humanreadable/_base.py      2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable/_base.py      2026-05-09 
16:45:10.000000000 +0200
@@ -6,7 +6,7 @@
 import re
 from decimal import Decimal
 from re import Pattern
-from typing import Final, Optional, Union, cast
+from typing import Final, cast
 
 from typepy import RealNumber, String
 
@@ -33,12 +33,10 @@
         pass
 
     @abc.abstractmethod
-    def get_as(self, unit: Union[str, SupportsUnit]) -> float:  # pragma: no 
cover
+    def get_as(self, unit: str | SupportsUnit) -> float:  # pragma: no cover
         pass
 
-    def __init__(
-        self, readable_value: str, default_unit: Union[str, SupportsUnit, 
None] = None
-    ) -> None:
+    def __init__(self, readable_value: str, default_unit: str | SupportsUnit | 
None = None) -> None:
         self._default_unit = self._normalize_unit(default_unit)
         self._number, self._from_unit = self.__preprocess(readable_value)
 
@@ -49,7 +47,7 @@
 
         return " ".join(items)
 
-    def _normalize_unit(self, unit: Union[str, SupportsUnit, None]) -> 
Optional[SupportsUnit]:
+    def _normalize_unit(self, unit: str | SupportsUnit | None) -> SupportsUnit 
| None:
         if unit is None:
             return None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/humanreadable/_common.py 
new/humanreadable-0.4.3/humanreadable/_common.py
--- old/humanreadable-0.4.1/humanreadable/_common.py    2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable/_common.py    2026-05-09 
16:45:10.000000000 +0200
@@ -1,9 +1,9 @@
 import re
 from re import Pattern
 
-from ._const import PATTERN_TEMPLETE
+from ._const import PATTERN_TEMPLATE
 from ._types import Units
 
 
 def compile_units_regex_pattern(units: Units, flags: int = 0) -> Pattern[str]:
-    return re.compile("|".join([PATTERN_TEMPLETE.format(unit) for unit in 
units]), flags)
+    return re.compile("|".join([PATTERN_TEMPLATE.format(unit) for unit in 
units]), flags)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/humanreadable/_const.py 
new/humanreadable-0.4.3/humanreadable/_const.py
--- old/humanreadable-0.4.1/humanreadable/_const.py     2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable/_const.py     2026-05-09 
16:45:10.000000000 +0200
@@ -1,4 +1,4 @@
 from typing import Final
 
 
-PATTERN_TEMPLETE: Final[str] = r"\s?{}$"
+PATTERN_TEMPLATE: Final[str] = r"\s?{}$"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/humanreadable/_persec.py 
new/humanreadable-0.4.3/humanreadable/_persec.py
--- old/humanreadable-0.4.1/humanreadable/_persec.py    2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable/_persec.py    2026-05-09 
16:45:10.000000000 +0200
@@ -6,11 +6,12 @@
 from dataclasses import dataclass
 from decimal import Decimal
 from re import Pattern
-from typing import Final, NamedTuple, Optional, Union, cast
+from typing import Final, NamedTuple, cast
 
 from ._base import HumanReadableValue
 from ._common import compile_units_regex_pattern
 from ._types import HumanReadableStyle, SupportsUnit, TextUnitsMap, Units
+from .error import ParameterError
 
 
 _BPS_PATTERN: Final[str] = r"bits?(/|\s?per\s?)(s|sec|second)"
@@ -127,6 +128,14 @@
     def get_text_units(cls) -> TextUnitsMap:
         return cls._TEXT_UNITS
 
+    def __init__(self, readable_value: str, default_unit: str | SupportsUnit | 
None = None) -> None:
+        super().__init__(readable_value, default_unit)
+        if self._number < 0:
+            raise ParameterError(
+                "bps value must be non-negative",
+                value=readable_value,
+            )
+
     @property
     def _text_units(self) -> TextUnitsMap:
         return self._TEXT_UNITS
@@ -239,7 +248,7 @@
         number = self._number + Decimal(other.get_as(self._from_unit))
         return BitsPerSecond(str(number), default_unit=self._from_unit)
 
-    def get_as(self, unit: Union[str, SupportsUnit]) -> float:
+    def get_as(self, unit: str | SupportsUnit) -> float:
         unit_maps: dict[SupportsUnit, str] = {
             self.Unit.BPS: "bps",
             self.Unit.KBPS: "kilo_bps",
@@ -256,7 +265,7 @@
 
         return getattr(self, unit_maps[norm_unit])
 
-    def _normalize_unit(self, unit: Union[str, SupportsUnit, None]) -> 
Optional[SupportsUnit]:
+    def _normalize_unit(self, unit: str | SupportsUnit | None) -> SupportsUnit 
| None:
         if isinstance(unit, ByteUnit):
             return unit
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/humanreadable/_time.py 
new/humanreadable-0.4.3/humanreadable/_time.py
--- old/humanreadable-0.4.1/humanreadable/_time.py      2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable/_time.py      2026-05-09 
16:45:10.000000000 +0200
@@ -7,7 +7,7 @@
 from dataclasses import dataclass
 from decimal import Decimal
 from re import Pattern
-from typing import Final, NamedTuple, Optional, Union, cast
+from typing import Final, NamedTuple, cast
 
 from ._base import HumanReadableValue
 from ._common import compile_units_regex_pattern
@@ -131,9 +131,7 @@
             self.Unit.MICROSECOND,
         ]
 
-    def __init__(
-        self, readable_value: str, default_unit: Union[str, SupportsUnit, 
None] = None
-    ) -> None:
+    def __init__(self, readable_value: str, default_unit: str | SupportsUnit | 
None = None) -> None:
         values = re.findall(r"\d+\s*[a-zA-Z]+", readable_value)
         if len(values) <= 1:
             super().__init__(readable_value, default_unit)
@@ -191,7 +189,7 @@
                     value=self,
                 )
 
-    def get_as(self, unit: Union[str, SupportsUnit]) -> float:
+    def get_as(self, unit: str | SupportsUnit) -> float:
         unit_maps: dict[SupportsUnit, str] = {
             self.Unit.DAY: "days",
             self.Unit.HOUR: "hours",
@@ -235,12 +233,12 @@
             )
 
         if not items:
-            assert self._default_unit
-            return f"0 {self._default_unit.name}"
+            unit = self._default_unit or self._from_unit
+            return f"0{_to_unit_str(unit, style)}"
 
         return " ".join(items)
 
-    def _normalize_unit(self, unit: Union[str, SupportsUnit, None]) -> 
Optional[SupportsUnit]:
+    def _normalize_unit(self, unit: str | SupportsUnit | None) -> SupportsUnit 
| None:
         if isinstance(unit, TimeUnit):
             return unit
 
@@ -255,11 +253,11 @@
         return day_coef * sixty_coef * thousand_coef
 
 
-def _parse(value: Union[str, Time], default_unit: Union[str, SupportsUnit, 
None] = None) -> Time:
+def _parse(value: str | Time, default_unit: str | SupportsUnit | None = None) 
-> Time:
     if isinstance(value, Time):
         return value
 
-    sum: Optional[Time] = None
+    sum: Time | None = None
 
     for item in reversed(re.findall(r"\d+\s*[a-zA-Z]+", value)):
         t = Time(item, default_unit=default_unit)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/humanreadable.egg-info/PKG-INFO 
new/humanreadable-0.4.3/humanreadable.egg-info/PKG-INFO
--- old/humanreadable-0.4.1/humanreadable.egg-info/PKG-INFO     2025-05-04 
07:34:41.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable.egg-info/PKG-INFO     2026-05-09 
16:45:37.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: humanreadable
-Version: 0.4.1
+Version: 0.4.3
 Summary: humanreadable is a Python library to convert human-readable values to 
other units.
 Home-page: https://github.com/thombashi/humanreadable
 Author: Tsuyoshi Hombashi
@@ -16,11 +16,11 @@
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -28,10 +28,10 @@
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: Text Processing
 Classifier: Typing :: Typed
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 Description-Content-Type: text/x-rst
 License-File: LICENSE
-Requires-Dist: typepy<2,>=1.2.0
+Requires-Dist: typepy<3,>=1.2.0
 Provides-Extra: test
 Requires-Dist: pytest; extra == "test"
 Requires-Dist: pytest-md-report>=0.6.2; extra == "test"
@@ -223,5 +223,5 @@
 
 Dependencies
 ============================================
-- Python 3.9+
+- Python 3.10+
 - `Python package dependencies (automatically installed) 
<https://github.com/thombashi/humanreadable/network/dependencies>`__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/humanreadable-0.4.1/humanreadable.egg-info/requires.txt 
new/humanreadable-0.4.3/humanreadable.egg-info/requires.txt
--- old/humanreadable-0.4.1/humanreadable.egg-info/requires.txt 2025-05-04 
07:34:41.000000000 +0200
+++ new/humanreadable-0.4.3/humanreadable.egg-info/requires.txt 2026-05-09 
16:45:37.000000000 +0200
@@ -1,4 +1,4 @@
-typepy<2,>=1.2.0
+typepy<3,>=1.2.0
 
 [test]
 pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/pyproject.toml 
new/humanreadable-0.4.3/pyproject.toml
--- old/humanreadable-0.4.1/pyproject.toml      2025-05-04 07:34:19.000000000 
+0200
+++ new/humanreadable-0.4.3/pyproject.toml      2026-05-09 16:45:10.000000000 
+0200
@@ -52,7 +52,7 @@
     "build",
     "dist"
 ]
-pythonVersion = "3.9"
+pythonVersion = "3.10"
 
 [tool.pytest.ini_options]
 md_report = true
@@ -61,7 +61,7 @@
 
 [tool.ruff]
 line-length = 100
-target-version = "py39"
+target-version = "py310"
 exclude = [
     ".eggs/",
     ".tox/",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/requirements/requirements.txt 
new/humanreadable-0.4.3/requirements/requirements.txt
--- old/humanreadable-0.4.1/requirements/requirements.txt       2025-05-04 
07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/requirements/requirements.txt       2026-05-09 
16:45:10.000000000 +0200
@@ -1 +1 @@
-typepy>=1.2.0,<2
+typepy>=1.2.0,<3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/setup.py 
new/humanreadable-0.4.3/setup.py
--- old/humanreadable-0.4.1/setup.py    2025-05-04 07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/setup.py    2026-05-09 16:45:10.000000000 +0200
@@ -53,7 +53,7 @@
         "Source": REPOSITORY_URL,
         "Tracker": f"{REPOSITORY_URL:s}/issues",
     },
-    python_requires=">=3.9",
+    python_requires=">=3.10",
     install_requires=INSTALL_REQUIRES,
     extras_require={"test": TESTS_REQUIRES},
     classifiers=[
@@ -63,11 +63,11 @@
         "License :: OSI Approved :: MIT License",
         "Operating System :: OS Independent",
         "Programming Language :: Python :: 3",
-        "Programming Language :: Python :: 3.9",
         "Programming Language :: Python :: 3.10",
         "Programming Language :: Python :: 3.11",
         "Programming Language :: Python :: 3.12",
         "Programming Language :: Python :: 3.13",
+        "Programming Language :: Python :: 3.14",
         "Programming Language :: Python :: 3 :: Only",
         "Programming Language :: Python :: Implementation :: CPython",
         "Programming Language :: Python :: Implementation :: PyPy",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/test/test_persec.py 
new/humanreadable-0.4.3/test/test_persec.py
--- old/humanreadable-0.4.1/test/test_persec.py 2025-05-04 07:34:19.000000000 
+0200
+++ new/humanreadable-0.4.3/test/test_persec.py 2026-05-09 16:45:10.000000000 
+0200
@@ -36,6 +36,9 @@
             ["2m", ParameterError],
             ["2ms", ParameterError],
             ["two Gbps", ParameterError],
+            ["-1bps", ParameterError],
+            ["-100Mbps", ParameterError],
+            ["-2.5 Gbit/s", ParameterError],
         ],
     )
     def test_exception(self, value, exception):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/test/test_time.py 
new/humanreadable-0.4.3/test/test_time.py
--- old/humanreadable-0.4.1/test/test_time.py   2025-05-04 07:34:19.000000000 
+0200
+++ new/humanreadable-0.4.3/test/test_time.py   2026-05-09 16:45:10.000000000 
+0200
@@ -236,3 +236,14 @@
     )
     def test_normal_default_unit(self, value, default_unit, style, expected):
         assert Time(value, 
default_unit=default_unit).to_humanreadable(style=style) == expected
+
+    @pytest.mark.parametrize(
+        ["value", "style", "expected"],
+        [
+            ["0s", "full", "0 seconds"],
+            ["0ms", "full", "0 milliseconds"],
+            ["0min", "short", "0m"],
+        ],
+    )
+    def test_normal_zero_without_default_unit(self, value, style, expected):
+        assert Time(value).to_humanreadable(style=style) == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/humanreadable-0.4.1/tox.ini 
new/humanreadable-0.4.3/tox.ini
--- old/humanreadable-0.4.1/tox.ini     2025-05-04 07:34:19.000000000 +0200
+++ new/humanreadable-0.4.3/tox.ini     2026-05-09 16:45:10.000000000 +0200
@@ -1,6 +1,6 @@
 [tox]
 envlist =
-    py{39,310,311,312,313}
+    py{310,311,312,313,314}
     pypy3
     build
     cov

Reply via email to