Repository navigation
test_lazy_choices_help fails on Python 3.14 #1641
Copy link
Copy link
Open
Labels
bugSomething isn't workingSomething isn't workingnewNeeds triage. Comments are welcome!Needs triage. Comments are welcome!
Description
Checklist
- I've searched for similar issues.
- I'm using the latest version of HTTPie (from git HEAD)
Minimal reproduction code and steps
This is with Python 3.14.0b3 and b4 alike.
uv venv --python=python3.14 venv
. venv/bin/activate
uv pip install '.[dev]'
uv pip install -U httpbin flask werkzeug # to support Python 3.14
python -m pytest --verbose -k test_lazy_choices_help
Current result
============================= test session starts ==============================
platform linux -- Python 3.14.0b3, pytest-8.4.1, pluggy-1.6.0 -- .../httpie/venv/bin/python
cachedir: .pytest_cache
rootdir: .../httpie
configfile: pytest.ini
plugins: mock-3.14.1, httpbin-2.1.0, cov-6.2.1
collecting ... collected 1028 items / 1027 deselected / 1 selected
tests/test_cli_utils.py::test_lazy_choices_help FAILED [100%]
=================================== FAILURES ===================================
____________________________ test_lazy_choices_help ____________________________
self = <Mock name='mock.getter' id='140611738470112'>
def assert_not_called(self):
"""assert that the mock was never called.
"""
if self.call_count != 0:
msg = ("Expected '%s' to not have been called. Called %s times.%s"
% (self._mock_name or 'mock',
self.call_count,
self._calls_repr()))
> raise AssertionError(msg)
E AssertionError: Expected 'getter' to not have been called. Called 1 times.
E Calls: [call()].
/usr/lib64/python3.14/unittest/mock.py:946: AssertionError
During handling of the above exception, another exception occurred:
def test_lazy_choices_help():
mock = Mock()
getter = mock.getter
getter.return_value = ['a', 'b', 'c']
help_formatter = mock.help_formatter
help_formatter.return_value = '<my help>'
parser = ArgumentParser()
parser.register('action', 'lazy_choices', LazyChoices)
parser.add_argument(
'--lazy-option',
default='a',
metavar='SYMBOL',
action='lazy_choices',
getter=getter,
help_formatter=help_formatter,
cache=False # for test purposes
)
# Parser initialization doesn't call it.
> getter.assert_not_called()
E AssertionError: Expected 'getter' to not have been called. Called 1 times.
E Calls: [call()].
tests/test_cli_utils.py:73: AssertionError
=============================== warnings summary ===============================
httpie/cli/definition.py:526
.../httpie/httpie/cli/definition.py:526: PendingDeprecationWarning: FileType is deprecated. Simply open files after parsing arguments.
type=FileType('a+b'),
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_cli_utils.py::test_lazy_choices_help - AssertionError: Expe...
================ 1 failed, 1027 deselected, 1 warning in 0.20s =================
Expected result
Tests pass.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingnewNeeds triage. Comments are welcome!Needs triage. Comments are welcome!
Activity
hroncok commentedon Jul 10, 2025
If I make getter raise, this is the traceback:
hroncok commentedon Jul 10, 2025
gh-65865: Raise early errors for invalid help strings in argparse
python/cpython#124899
Fix test_lazy_choices_help failure on Python 3.14+
tests: fix test_lazy_choices_help for Python 3.13+ (Fixes httpie#1641)
cli/utils: fix test_lazy_choices_help on Python 3.14
alliasgher commentedon Apr 13, 2026
Covered in #1816 along with another bug fix.
ci: add Python 3.14 to test matrix (repro httpie#1641)