Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-cyclopts for openSUSE:Factory
checked in at 2026-11-13 18:29:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-cyclopts (Old)
and /work/SRC/openSUSE:Factory/.python-cyclopts.new.1251 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cyclopts"
Fri Nov 13 18:29:41 2026 rev:28 rq:1397191 version:5.4.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-cyclopts/python-cyclopts.changes
2026-11-10 14:40:01.323565082 +0100
+++
/work/SRC/openSUSE:Factory/.python-cyclopts.new.1251/python-cyclopts.changes
2026-11-13 18:31:54.337597550 +0100
@@ -1,0 +2,17 @@
+Thu Nov 12 19:36:02 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 5.4.2 (PyPI release 2026-11-12):
+ * LimitedChoice errors dedupe listed names and include
+ aliases via Argument.positives
+ * Scalar conversion overflow reported as CoercionError,
+ keeping token and target type on the normal error path
+
+-------------------------------------------------------------------
+Wed Nov 11 19:50:04 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 5.4.1 (PyPI release 2026-11-11):
+ * LimitedChoice count error states the requirement
+ and lists the group options instead of printing
+ only the supplied arguments
+
+-------------------------------------------------------------------
Old:
----
cyclopts-5.4.0.tar.gz
New:
----
cyclopts-5.4.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-cyclopts.spec ++++++
--- /var/tmp/diff_new_pack.7BOlzZ/_old 2026-11-13 18:31:56.043669781 +0100
+++ /var/tmp/diff_new_pack.7BOlzZ/_new 2026-11-13 18:31:56.045669866 +0100
@@ -18,7 +18,7 @@
%bcond_without libalternatives
Name: python-cyclopts
-Version: 5.4.0
+Version: 5.4.2
Release: 0
Summary: Intuitive, easy CLIs based on python type hints
License: Apache-2.0
++++++ cyclopts-5.4.0.tar.gz -> cyclopts-5.4.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cyclopts-5.4.0/PKG-INFO new/cyclopts-5.4.2/PKG-INFO
--- old/cyclopts-5.4.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/cyclopts-5.4.2/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.5
Name: cyclopts
-Version: 5.4.0
+Version: 5.4.2
Summary: Intuitive, easy CLIs based on type hints.
Project-URL: Homepage, https://github.com/BrianPugh/cyclopts
Project-URL: Repository, https://github.com/BrianPugh/cyclopts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cyclopts-5.4.0/cyclopts/_convert.py
new/cyclopts-5.4.2/cyclopts/_convert.py
--- old/cyclopts-5.4.0/cyclopts/_convert.py 2020-02-02 01:00:00.000000000
+0100
+++ new/cyclopts-5.4.2/cyclopts/_convert.py 2020-02-02 01:00:00.000000000
+0100
@@ -843,7 +843,7 @@
if e.token is None:
e.token = token
raise
- except ValueError:
+ except (ValueError, OverflowError):
raise CoercionError(token=token, target_type=type_) from None
else:
# Convert it into a user-supplied class.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cyclopts-5.4.0/cyclopts/_version.py
new/cyclopts-5.4.2/cyclopts/_version.py
--- old/cyclopts-5.4.0/cyclopts/_version.py 2020-02-02 01:00:00.000000000
+0100
+++ new/cyclopts-5.4.2/cyclopts/_version.py 2020-02-02 01:00:00.000000000
+0100
@@ -18,7 +18,7 @@
commit_id: str | None
__commit_id__: str | None
-__version__ = version = '5.4.0'
-__version_tuple__ = version_tuple = (5, 4, 0)
+__version__ = version = '5.4.2'
+__version_tuple__ = version_tuple = (5, 4, 2)
__commit_id__ = commit_id = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cyclopts-5.4.0/cyclopts/argument/_argument.py
new/cyclopts-5.4.2/cyclopts/argument/_argument.py
--- old/cyclopts-5.4.0/cyclopts/argument/_argument.py 2020-02-02
01:00:00.000000000 +0100
+++ new/cyclopts-5.4.2/cyclopts/argument/_argument.py 2020-02-02
01:00:00.000000000 +0100
@@ -1262,12 +1262,15 @@
return self.names[0]
@property
+ def positives(self) -> tuple[str, ...]:
+ """Names the argument goes by, excluding :attr:`negatives`."""
+ assert isinstance(self.parameter.name, tuple)
+ return self.parameter.name
+
+ @property
def names(self) -> tuple[str, ...]:
"""Names the argument goes by (both positive and negative)."""
- import itertools
-
- assert isinstance(self.parameter.name, tuple)
- return tuple(itertools.chain(self.parameter.name, self.negatives))
+ return self.positives + self.negatives
def env_var_split(self, value: str, delimiter: str | None = None) ->
list[str]:
"""Split a given value with :meth:`.Parameter.env_var_split`."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cyclopts-5.4.0/cyclopts/validators/_group.py
new/cyclopts-5.4.2/cyclopts/validators/_group.py
--- old/cyclopts-5.4.0/cyclopts/validators/_group.py 2020-02-02
01:00:00.000000000 +0100
+++ new/cyclopts-5.4.2/cyclopts/validators/_group.py 2020-02-02
01:00:00.000000000 +0100
@@ -15,6 +15,10 @@
Commonly used for enforcing mutually-exclusive parameters (default
behavior).
+ A parameter counts as selected when it is given a value from any
source, regardless of
+ the value itself; e.g. ``--no-flag`` counts the same as ``--flag``.
+ Set ``Parameter(negative="")`` on boolean flags to remove their
negative variants.
+
Parameters
----------
min: int
@@ -64,10 +68,23 @@
)
if self.min == 0 and self.max == 1:
raise ValueError(f"Mutually exclusive arguments: {offenders}")
+
+ if self.min == self.max:
+ requirement = f"Exactly {self.min}"
+ elif self.min == 0:
+ requirement = f"At most {self.max}"
+ elif self.max >= group_size:
+ requirement = f"At least {self.min}"
else:
- raise ValueError(
- f"Received {n_arguments} arguments: {offenders}. Only
[{self.min}, {self.max}] choices may be specified."
- )
+ requirement = f"Between {self.min} and {self.max}"
+ if self.allow_none:
+ requirement += " (or none)"
+ received = f"Received {n_arguments} argument{'' if n_arguments ==
1 else 's'}"
+ if n_arguments:
+ received += f": {offenders}"
+ choices = "{" + ", ".join("/".join(dict.fromkeys(a.positives)) for
a in argument_collection) + "}"
+ verb = "may" if self.min == 0 else "must"
+ raise ValueError(f"{received}. {requirement} of {choices} {verb}
be specified.")
class MutuallyExclusive(LimitedChoice):