python-poetry / poetry

Python packaging and dependency management made easy
https://python-poetry.org
MIT License
31.06k stars 2.26k forks source link

test_add_git_constraint_with_extras is flaky #9652

Open hrnciar opened 2 weeks ago

hrnciar commented 2 weeks ago

Description

When building poetry on Fedora rawhide we are experiencing a flakiness of test_add_git_constraint_with_extras.

Downstream report: https://bugzilla.redhat.com/show_bug.cgi?id=2301097

Workarounds

Building poetry multiple times usually gets the test pass.

Poetry Installation Method

system package manager (eg: dnf, apt etc.)

Operating System

Fedora rawhide

Poetry Version

1.8.3

Poetry Configuration

~~~~
❯ poetry config --list
cache-dir = "/home/thrnciar/.cache/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /home/thrnciar/.cache/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
~~~~

Python Sysconfig

No response

Example pyproject.toml

No response

Poetry Runtime Logs

~~~~
=================================== FAILURES ===================================
___________________ test_add_git_constraint_with_extras[foo] ___________________
[gw0] linux -- Python 3.13.0 /usr/bin/python3

app = <tests.helpers.PoetryTestApplication object at 0x7f8a1a540c00>
repo = <tests.helpers.TestRepository object at 0x7f8a1ace0c50>
tester = <cleo.testers.command_tester.CommandTester object at 0x7f8a0870da20>
tmp_venv = VirtualEnv("/tmp/pytest-of-mockbuild/pytest-0/popen-gw0/test_add_git_constraint_with_e0/venv")
extra_name = 'foo'

    @pytest.mark.parametrize("extra_name", ["foo", "FOO"])
    def test_add_git_constraint_with_extras(
        app: PoetryTestApplication,
        repo: TestRepository,
        tester: CommandTester,
        tmp_venv: VirtualEnv,
        extra_name: str,
    ) -> None:
        assert isinstance(tester.command, InstallerCommand)
        tester.command.set_env(tmp_venv)

        repo.add_package(get_package("pendulum", "1.4.4"))
        repo.add_package(get_package("cleo", "0.6.5"))
        repo.add_package(get_package("tomlkit", "0.5.5"))

        tester.execute(f"git+https://github.com/demo/demo.git[{extra_name},bar]")

        expected = """\

    Updating dependencies
    Resolving dependencies...

    Package operations: 4 installs, 0 updates, 0 removals

      - Installing cleo (0.6.5)
      - Installing pendulum (1.4.4)
      - Installing tomlkit (0.5.5)
      - Installing demo (0.1.2 9cf87a2)

    Writing lock file
    """

>       assert tester.io.fetch_output().strip() == expected.strip()
E       AssertionError: assert 'Updating dep...ing lock file' == 'Updating dep...ing lock file'
E         
E         Skipping 137 identical leading characters in diff, use -v to show
E         Skipping 47 identical trailing characters in diff, use -v to show
E         + nstalling tomlkit (0.5.5)
E         - nstalling pendulum (1.4.4)
E         +   - Installing pendulum (1.4.4)
E         ? +++++
E         -   - Installing tomlkit (0.5.5)
E             - Ins

tests/console/commands/test_add.py:414: AssertionError
___________________ test_add_git_constraint_with_extras[FOO] ___________________
[gw0] linux -- Python 3.13.0 /usr/bin/python3

app = <tests.helpers.PoetryTestApplication object at 0x7f8a1adc3ce0>
repo = <tests.helpers.TestRepository object at 0x7f8a087381d0>
tester = <cleo.testers.command_tester.CommandTester object at 0x7f8a19ca6cf0>
tmp_venv = VirtualEnv("/tmp/pytest-of-mockbuild/pytest-0/popen-gw0/test_add_git_constraint_with_e1/venv")
extra_name = 'FOO'

    @pytest.mark.parametrize("extra_name", ["foo", "FOO"])
    def test_add_git_constraint_with_extras(
        app: PoetryTestApplication,
        repo: TestRepository,
        tester: CommandTester,
        tmp_venv: VirtualEnv,
        extra_name: str,
    ) -> None:
        assert isinstance(tester.command, InstallerCommand)
        tester.command.set_env(tmp_venv)

        repo.add_package(get_package("pendulum", "1.4.4"))
        repo.add_package(get_package("cleo", "0.6.5"))
        repo.add_package(get_package("tomlkit", "0.5.5"))

        tester.execute(f"git+https://github.com/demo/demo.git[{extra_name},bar]")

        expected = """\

    Updating dependencies
    Resolving dependencies...

    Package operations: 4 installs, 0 updates, 0 removals

      - Installing cleo (0.6.5)
      - Installing pendulum (1.4.4)
      - Installing tomlkit (0.5.5)
      - Installing demo (0.1.2 9cf87a2)

    Writing lock file
    """

>       assert tester.io.fetch_output().strip() == expected.strip()
E       AssertionError: assert 'Updating dep...ing lock file' == 'Updating dep...ing lock file'
E         
E         Skipping 137 identical leading characters in diff, use -v to show
E         Skipping 47 identical trailing characters in diff, use -v to show
E         + nstalling tomlkit (0.5.5)
E         - nstalling pendulum (1.4.4)
E         +   - Installing pendulum (1.4.4)
E         ? +++++
E         -   - Installing tomlkit (0.5.5)
E             - Ins

tests/console/commands/test_add.py:414: AssertionError
=============================== warnings summary ===============================
tests/console/commands/test_publish.py: 6 warnings
tests/inspection/test_lazy_wheel.py: 101 warnings
tests/console/commands/test_search.py: 1 warning
tests/installation/test_chef.py: 4 warnings
tests/installation/test_chooser.py: 27 warnings
tests/installation/test_executor.py: 28 warnings
tests/publishing/test_uploader.py: 23 warnings
tests/repositories/test_legacy_repository.py: 13 warnings
tests/utils/test_authenticator.py: 73 warnings
tests/utils/test_helpers.py: 5 warnings
  /usr/lib/python3.13/site-packages/httpretty/core.py:1077: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
    now = datetime.utcnow()

tests/utils/test_authenticator.py::test_authenticator_falls_back_to_keyring_url
  /builddir/build/BUILD/poetry-1.8.3-build/poetry-1.8.3/tests/utils/test_authenticator.py:197: DeprecationWarning: Empty usernames are deprecated. See #668
    dummy_keyring.set_password(

tests/utils/test_authenticator.py::test_authenticator_falls_back_to_keyring_netloc
  /builddir/build/BUILD/poetry-1.8.3-build/poetry-1.8.3/tests/utils/test_authenticator.py:223: DeprecationWarning: Empty usernames are deprecated. See #668
    dummy_keyring.set_password("foo.bar", None, SimpleCredential("foo", "bar"))

tests/utils/test_authenticator.py::test_authenticator_falls_back_to_keyring_url_matched_by_path
  /builddir/build/BUILD/poetry-1.8.3-build/poetry-1.8.3/tests/utils/test_authenticator.py:486: DeprecationWarning: Empty usernames are deprecated. See #668
    dummy_keyring.set_password(

tests/utils/test_authenticator.py::test_authenticator_falls_back_to_keyring_url_matched_by_path
  /builddir/build/BUILD/poetry-1.8.3-build/poetry-1.8.3/tests/utils/test_authenticator.py:489: DeprecationWarning: Empty usernames are deprecated. See #668
    dummy_keyring.set_password(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/console/commands/test_add.py::test_add_git_constraint_with_extras[foo]
FAILED tests/console/commands/test_add.py::test_add_git_constraint_with_extras[FOO]
=========== 2 failed, 1609 passed, 6 skipped, 285 warnings in 48.09s ===========
~~~~
Secrus commented 2 weeks ago

It looks like something in Python 3.13 is different, cause we have similar errors in #9523

dimbleby commented 2 weeks ago

cf https://github.com/python-poetry/poetry/pull/9523

Seems like something has changed at python 3.13, but in poetry's own pipeline only macos seems affected.

I'm in no position - and not terribly interested - to reproduce, but if you figure out what is going on then probably that would be a useful contribution.