Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-poetry-plugin-export for
openSUSE:Factory checked in at 2023-04-25 16:42:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-poetry-plugin-export (Old)
and /work/SRC/openSUSE:Factory/.python-poetry-plugin-export.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-poetry-plugin-export"
Tue Apr 25 16:42:25 2023 rev:3 rq:1082594 version:1.3.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-poetry-plugin-export/python-poetry-plugin-export.changes
2022-12-15 20:29:02.641540464 +0100
+++
/work/SRC/openSUSE:Factory/.python-poetry-plugin-export.new.1533/python-poetry-plugin-export.changes
2023-04-25 16:42:25.118087205 +0200
@@ -1,0 +2,13 @@
+Mon Apr 24 19:13:42 UTC 2023 - Torsten Gruner <[email protected]>
+
+- Update to 1.3.1
+ * This release mainly fixes test suite compatibility with
+ upcoming Poetry releases.
+ * Improve error message in some cases when the dependency walk fails (#184).
+- Version 1.3.0
+ * Drop some compatibility code and bump minimum required
+ poetry version to 1.3.0 (#167).
+ * Fix an issue where the export failed if there was a circular
+ dependency on the root package (#118).
+
+------------------------------------------------------------------
Old:
----
poetry_plugin_export-1.2.0.tar.gz
New:
----
poetry_plugin_export-1.3.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-poetry-plugin-export.spec ++++++
--- /var/tmp/diff_new_pack.0KV8VQ/_old 2023-04-25 16:42:25.582089936 +0200
+++ /var/tmp/diff_new_pack.0KV8VQ/_new 2023-04-25 16:42:25.586089960 +0200
@@ -1,7 +1,7 @@
#
# spec file
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -26,7 +26,7 @@
%endif
Name: python-poetry-plugin-export%{psuffix}
-Version: 1.2.0
+Version: 1.3.1
Release: 0
Summary: Poetry plugin to export the dependencies to various formats
License: MIT
@@ -37,13 +37,15 @@
# No buildtime requirement of poetry: avoid build dep cycles!
BuildRequires: python-rpm-macros
%if %{with test}
+BuildRequires: %{python_module build}
+BuildRequires: %{python_module installer}
BuildRequires: %{python_module poetry-plugin-export = %{version}}
BuildRequires: %{python_module pytest-mock}
BuildRequires: %{python_module pytest-xdist}
BuildRequires: %{python_module pytest}
%endif
BuildRequires: fdupes
-Requires: python-poetry >= 1.2.2
+Requires: python-poetry >= 1.3.0
Requires: python-poetry-core >= 1.3.0
Provides: python-poetry_plugin_export = %{version}-%{release}
BuildArch: noarch
++++++ poetry_plugin_export-1.2.0.tar.gz -> poetry_plugin_export-1.3.1.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/PKG-INFO
new/poetry_plugin_export-1.3.1/PKG-INFO
--- old/poetry_plugin_export-1.2.0/PKG-INFO 1970-01-01 01:00:00.000000000
+0100
+++ new/poetry_plugin_export-1.3.1/PKG-INFO 1970-01-01 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: poetry-plugin-export
-Version: 1.2.0
+Version: 1.3.1
Summary: Poetry plugin to export the dependencies to various formats
Home-page: https://python-poetry.org/
License: MIT
@@ -14,7 +14,7 @@
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
-Requires-Dist: poetry (>=1.2.2,<2.0.0)
+Requires-Dist: poetry (>=1.3.0,<2.0.0)
Requires-Dist: poetry-core (>=1.3.0,<2.0.0)
Project-URL: Repository, https://github.com/python-poetry/poetry-plugin-export
Description-Content-Type: text/markdown
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/pyproject.toml
new/poetry_plugin_export-1.3.1/pyproject.toml
--- old/poetry_plugin_export-1.2.0/pyproject.toml 2022-11-05
14:30:22.819279200 +0100
+++ new/poetry_plugin_export-1.3.1/pyproject.toml 2023-04-17
16:40:05.811764200 +0200
@@ -1,6 +1,6 @@
[tool.poetry]
name = "poetry-plugin-export"
-version = "1.2.0"
+version = "1.3.1"
description = "Poetry plugin to export the dependencies to various formats"
authors = ["Sébastien Eustace <[email protected]>"]
license = "MIT"
@@ -18,7 +18,7 @@
[tool.poetry.dependencies]
python = "^3.7"
-poetry = "^1.2.2"
+poetry = "^1.3.0"
poetry-core = "^1.3.0"
[tool.poetry.group.dev.dependencies]
@@ -27,7 +27,7 @@
pytest-cov = "^4.0"
pytest-mock = "^3.9"
pytest-randomly = "^3.12"
-pytest-xdist = { version = "^2.5", extras = ["psutil"] }
+pytest-xdist = { version = "^3.1", extras = ["psutil"] }
mypy = ">=0.971"
# only used in github actions
@@ -64,12 +64,6 @@
files = ["src", "tests"]
exclude = ["^tests/fixtures/"]
-[[tool.mypy.overrides]]
-module = [
- 'cleo.*',
-]
-ignore_missing_imports = true
-
# use of importlib-metadata backport at python3.7 makes it impossible to
# satisfy mypy without some ignores: but we get a different set of ignores at
# different python versions.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/setup.py
new/poetry_plugin_export-1.3.1/setup.py
--- old/poetry_plugin_export-1.2.0/setup.py 1970-01-01 01:00:00.000000000
+0100
+++ new/poetry_plugin_export-1.3.1/setup.py 1970-01-01 01:00:00.000000000
+0100
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-from setuptools import setup
-
-package_dir = \
-{'': 'src'}
-
-packages = \
-['poetry_plugin_export']
-
-package_data = \
-{'': ['*']}
-
-install_requires = \
-['poetry-core>=1.3.0,<2.0.0', 'poetry>=1.2.2,<2.0.0']
-
-entry_points = \
-{'poetry.application.plugin': ['export = '
-
'poetry_plugin_export.plugins:ExportApplicationPlugin']}
-
-setup_kwargs = {
- 'name': 'poetry-plugin-export',
- 'version': '1.2.0',
- 'description': 'Poetry plugin to export the dependencies to various
formats',
- 'long_description': '# Poetry Plugin: Export\n\nThis package is a plugin
that allows the export of locked packages to various formats.\n\n**Note**: For
now, only the `constraints.txt` and `requirements.txt` formats are
available.\n\nThis plugin provides the same features as the existing `export`
command of Poetry which it will eventually replace.\n\n\n## Installation\n\nThe
easiest way to install the `export` plugin is via the `self add` command of
Poetry.\n\n```bash\npoetry self add poetry-plugin-export\n```\n\nIf you used
`pipx` to install Poetry you can add the plugin via the `pipx inject`
command.\n\n```bash\npipx inject poetry poetry-plugin-export\n```\n\nOtherwise,
if you used `pip` to install Poetry you can add the plugin packages via the
`pip install` command.\n\n```bash\npip install
poetry-plugin-export\n```\n\n\n## Usage\n\nThe plugin provides an `export`
command to export to the desired format.\n\n```bash\npoetry export -f
requirements.txt --output requirements.txt\n`
``\n\n**Note**: Only the `constraints.txt` and `requirements.txt` formats are
currently supported.\n\n### Available options\n\n* `--format (-f)`: The format
to export to (default: `requirements.txt`). Currently, only `constraints.txt`
and `requirements.txt` are supported.\n* `--output (-o)`: The name of the
output file. If omitted, print to standard output.\n* `--without`: The
dependency groups to ignore when exporting.\n* `--with`: The optional
dependency groups to include when exporting.\n* `--only`: The only dependency
groups to include when exporting.\n* `--default`: Only export the main
dependencies. (**Deprecated**)\n* `--dev`: Include development dependencies.
(**Deprecated**)\n* `--extras (-E)`: Extra sets of dependencies to include.\n*
`--without-hashes`: Exclude hashes from the exported file.\n*
`--with-credentials`: Include credentials for extra indices.\n',
- 'author': 'Sébastien Eustace',
- 'author_email': '[email protected]',
- 'maintainer': 'None',
- 'maintainer_email': 'None',
- 'url': 'https://python-poetry.org/',
- 'package_dir': package_dir,
- 'packages': packages,
- 'package_data': package_data,
- 'install_requires': install_requires,
- 'entry_points': entry_points,
- 'python_requires': '>=3.7,<4.0',
-}
-
-
-setup(**setup_kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_plugin_export-1.2.0/src/poetry_plugin_export/command.py
new/poetry_plugin_export-1.3.1/src/poetry_plugin_export/command.py
--- old/poetry_plugin_export-1.2.0/src/poetry_plugin_export/command.py
2022-11-05 14:30:22.819279200 +0100
+++ new/poetry_plugin_export-1.3.1/src/poetry_plugin_export/command.py
2023-04-17 16:40:05.811764200 +0200
@@ -18,8 +18,10 @@
option(
"format",
"f",
- "Format to export to. Currently, only constraints.txt and
requirements.txt"
- " are supported.",
+ (
+ "Format to export to. Currently, only constraints.txt and"
+ " requirements.txt are supported."
+ ),
flag=False,
default=Exporter.FORMAT_REQUIREMENTS_TXT,
),
@@ -55,7 +57,7 @@
def default_groups(self) -> set[str]:
return {MAIN_GROUP}
- def handle(self) -> None:
+ def handle(self) -> int:
fmt = self.option("format")
if not Exporter.is_format_supported(fmt):
@@ -105,3 +107,5 @@
exporter.with_credentials(self.option("with-credentials"))
exporter.with_urls(not self.option("without-urls"))
exporter.export(fmt, Path.cwd(), output or self.io)
+
+ return 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_plugin_export-1.2.0/src/poetry_plugin_export/exporter.py
new/poetry_plugin_export-1.3.1/src/poetry_plugin_export/exporter.py
--- old/poetry_plugin_export-1.2.0/src/poetry_plugin_export/exporter.py
2022-11-05 14:30:22.819279200 +0100
+++ new/poetry_plugin_export-1.3.1/src/poetry_plugin_export/exporter.py
2023-04-17 16:40:05.811764200 +0200
@@ -8,19 +8,13 @@
from cleo.io.io import IO
from poetry.core.packages.dependency_group import MAIN_GROUP
-
-
-try:
- from poetry.repositories.http_repository import ( # type: ignore[import]
# noqa: E501
- HTTPRepository,
- )
-except ImportError: # poetry<1.3.0
- from poetry.repositories.http import HTTPRepository
+from poetry.repositories.http_repository import HTTPRepository
from poetry_plugin_export.walker import get_project_dependency_packages
if TYPE_CHECKING:
+ from collections.abc import Collection
from pathlib import Path
from packaging.utils import NormalizedName
@@ -47,14 +41,14 @@
self._with_hashes = True
self._with_credentials = False
self._with_urls = True
- self._extras: bool | list[NormalizedName] | None = []
+ self._extras: Collection[NormalizedName] = ()
self._groups: Iterable[str] = [MAIN_GROUP]
@classmethod
def is_format_supported(cls, fmt: str) -> bool:
return fmt in cls.EXPORT_METHODS
- def with_extras(self, extras: bool | list[NormalizedName] | None) ->
Exporter:
+ def with_extras(self, extras: Collection[NormalizedName]) -> Exporter:
self._extras = extras
return self
@@ -101,6 +95,7 @@
for dependency_package in get_project_dependency_packages(
self._poetry.locker,
project_requires=root.all_requires,
+ root_package_name=root.name,
project_python_marker=root.python_marker,
extras=self._extras,
):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_plugin_export-1.2.0/src/poetry_plugin_export/walker.py
new/poetry_plugin_export-1.3.1/src/poetry_plugin_export/walker.py
--- old/poetry_plugin_export-1.2.0/src/poetry_plugin_export/walker.py
2022-11-05 14:30:22.819279200 +0100
+++ new/poetry_plugin_export-1.3.1/src/poetry_plugin_export/walker.py
2023-04-17 16:40:05.811764200 +0200
@@ -11,9 +11,9 @@
if TYPE_CHECKING:
+ from collections.abc import Collection
from collections.abc import Iterable
from collections.abc import Iterator
- from collections.abc import Sequence
from packaging.utils import NormalizedName
from poetry.core.packages.dependency import Dependency
@@ -52,8 +52,9 @@
def get_project_dependency_packages(
locker: Locker,
project_requires: list[Dependency],
+ root_package_name: NormalizedName,
project_python_marker: BaseMarker | None = None,
- extras: bool | Sequence[NormalizedName] | None = None,
+ extras: Collection[NormalizedName] = (),
) -> Iterator[DependencyPackage]:
# Apply the project python marker to all requirements.
if project_python_marker is not None:
@@ -67,22 +68,17 @@
repository = locker.locked_repository()
# Build a set of all packages required by our selected extras
- extra_package_names: set[str] | None = None
-
- if extras is not True:
- locked_extras = {
- canonicalize_name(extra): [
- canonicalize_name(dependency) for dependency in dependencies
- ]
- for extra, dependencies in locker.lock_data.get("extras",
{}).items()
- }
- extra_package_names = set(
- get_extra_package_names(
- repository.packages,
- locked_extras,
- extras or (),
- )
- )
+ locked_extras = {
+ canonicalize_name(extra): [
+ canonicalize_name(dependency) for dependency in dependencies
+ ]
+ for extra, dependencies in locker.lock_data.get("extras", {}).items()
+ }
+ extra_package_names = get_extra_package_names(
+ repository.packages,
+ locked_extras,
+ extras,
+ )
# If a package is optional and we haven't opted in to it, do not select
selected = []
@@ -92,9 +88,7 @@
except IndexError:
continue
- if extra_package_names is not None and (
- package.optional and package.name not in extra_package_names
- ):
+ if package.optional and package.name not in extra_package_names:
# a package is locked as optional, but is not activated via extras
continue
@@ -103,6 +97,7 @@
for package, dependency in get_project_dependencies(
project_requires=selected,
locked_packages=repository.packages,
+ root_package_name=root_package_name,
):
yield DependencyPackage(dependency=dependency, package=package)
@@ -110,6 +105,7 @@
def get_project_dependencies(
project_requires: list[Dependency],
locked_packages: list[Package],
+ root_package_name: NormalizedName,
) -> Iterable[tuple[Package, Dependency]]:
# group packages entries by name, this is required because requirement
might use
# different constraints.
@@ -129,6 +125,7 @@
nested_dependencies = walk_dependencies(
dependencies=project_requires,
packages_by_name=packages_by_name,
+ root_package_name=root_package_name,
)
return nested_dependencies.items()
@@ -137,6 +134,7 @@
def walk_dependencies(
dependencies: list[Dependency],
packages_by_name: dict[str, list[Package]],
+ root_package_name: NormalizedName,
) -> dict[Package, Dependency]:
nested_dependencies: dict[Package, Dependency] = {}
@@ -145,6 +143,8 @@
requirement = dependencies.pop(0)
if (requirement, requirement.marker) in visited:
continue
+ if requirement.name == root_package_name:
+ continue
visited.add((requirement, requirement.marker))
locked_package = get_locked_package(
@@ -242,10 +242,27 @@
# If we have an overlapping candidate, we must use it.
if overlapping_candidates:
- compatible_candidates = [
+ filtered_compatible_candidates = [
package
for package in compatible_candidates
if package in overlapping_candidates
]
+ if not filtered_compatible_candidates:
+ # TODO: Support this case:
+ # https://github.com/python-poetry/poetry-plugin-export/issues/183
+ raise DependencyWalkerError(
+ f"The `{dependency.name}` package has the following compatible"
+ f" candidates `{compatible_candidates}`; but, the exporter
dependency"
+ f" walker previously elected `{overlapping_candidates.pop()}`
which is"
+ f" not compatible with the dependency `{dependency}`. Please
contribute"
+ " to `poetry-plugin-export` to solve this problem."
+ )
+
+ compatible_candidates = filtered_compatible_candidates
+
return next(iter(compatible_candidates), None)
+
+
+class DependencyWalkerError(Exception):
+ pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/tests/command/conftest.py
new/poetry_plugin_export-1.3.1/tests/command/conftest.py
--- old/poetry_plugin_export-1.2.0/tests/command/conftest.py 2022-11-05
14:30:22.823279100 +0100
+++ new/poetry_plugin_export-1.3.1/tests/command/conftest.py 2023-04-17
16:40:05.811764200 +0200
@@ -6,6 +6,8 @@
from cleo.io.null_io import NullIO
from cleo.testers.command_tester import CommandTester
+from poetry.console.commands.env_command import EnvCommand
+from poetry.console.commands.installer_command import InstallerCommand
from poetry.installation import Installer
from poetry.utils.env import MockEnv
@@ -64,12 +66,11 @@
app._poetry = poetry
poetry = app.poetry
- cmd._pool = poetry.pool
- if hasattr(cmd, "set_env"):
+ if isinstance(cmd, EnvCommand):
cmd.set_env(environment or env)
- if hasattr(cmd, "set_installer"):
+ if isinstance(cmd, InstallerCommand):
installer = installer or Installer(
tester.io,
env,
@@ -80,7 +81,6 @@
executor=executor
or TestExecutor(env, poetry.pool, poetry.config, tester.io),
)
- installer.use_executor(True)
cmd.set_installer(installer)
return tester
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/tests/conftest.py
new/poetry_plugin_export-1.3.1/tests/conftest.py
--- old/poetry_plugin_export-1.2.0/tests/conftest.py 2022-11-05
14:30:22.823279100 +0100
+++ new/poetry_plugin_export-1.3.1/tests/conftest.py 2023-04-17
16:40:05.811764200 +0200
@@ -5,7 +5,6 @@
from pathlib import Path
from typing import TYPE_CHECKING
from typing import Any
-from typing import cast
import pytest
@@ -15,15 +14,7 @@
from poetry.factory import Factory
from poetry.layouts import layout
from poetry.repositories import Repository
-
-
-try:
- from poetry.repositories.repository_pool import ( # type: ignore[import]
# noqa: E501
- RepositoryPool,
- )
-except ImportError: # poetry<1.3.0
- from poetry.repositories.pool import Pool as RepositoryPool
-
+from poetry.repositories.repository_pool import RepositoryPool
from poetry.utils.env import SystemEnv
from tests.helpers import TestLocker
@@ -180,13 +171,7 @@
poetry = Factory().create_poetry(project_dir)
- lock = poetry.locker.lock
- if isinstance(lock, Path):
- lock_path = cast("Path", lock)
- else:
- # poetry < 1.3
- lock_path = lock.path
- locker = TestLocker(lock_path, poetry.locker._local_config)
+ locker = TestLocker(poetry.locker.lock, poetry.locker._local_config)
locker.write()
poetry.set_locker(locker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/poetry_plugin_export-1.2.0/tests/fixtures/sample_project/pyproject.toml
new/poetry_plugin_export-1.3.1/tests/fixtures/sample_project/pyproject.toml
--- old/poetry_plugin_export-1.2.0/tests/fixtures/sample_project/pyproject.toml
2022-11-05 14:30:22.823279100 +0100
+++ new/poetry_plugin_export-1.3.1/tests/fixtures/sample_project/pyproject.toml
2023-04-17 16:40:05.815764700 +0200
@@ -1,5 +1,5 @@
[tool.poetry]
-name = "my-package"
+name = "sample-project"
version = "1.2.3"
description = "Some description."
authors = [
@@ -51,7 +51,7 @@
[tool.poetry.scripts]
-my-script = "my_package:main"
+my-script = "sample_project:main"
[tool.poetry.plugins."blogtool.parsers"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/tests/helpers.py
new/poetry_plugin_export-1.3.1/tests/helpers.py
--- old/poetry_plugin_export-1.2.0/tests/helpers.py 2022-11-05
14:30:22.823279100 +0100
+++ new/poetry_plugin_export-1.3.1/tests/helpers.py 2023-04-17
16:40:05.815764700 +0200
@@ -3,11 +3,9 @@
import os
from contextlib import contextmanager
-from pathlib import Path
from typing import TYPE_CHECKING
from typing import Any
from typing import Iterator
-from typing import cast
from poetry.console.application import Application
from poetry.factory import Factory
@@ -16,6 +14,8 @@
if TYPE_CHECKING:
+ from pathlib import Path
+
from poetry.core.packages.package import Package
from poetry.installation.operations.operation import Operation
from poetry.poetry import Poetry
@@ -33,17 +33,13 @@
self._poetry = Factory().create_poetry(poetry.file.path.parent)
self._poetry.set_pool(poetry.pool)
self._poetry.set_config(poetry.config)
- lock = poetry.locker.lock
- if isinstance(lock, Path):
- lock_path = cast("Path", lock)
- else:
- # poetry < 1.3
- lock_path = lock.path
- self._poetry.set_locker(TestLocker(lock_path,
self._poetry.local_config))
+ self._poetry.set_locker(
+ TestLocker(poetry.locker.lock, self._poetry.local_config)
+ )
class TestLocker(Locker):
- def __init__(self, lock: str | Path, local_config: dict[str, Any]) -> None:
+ def __init__(self, lock: Path, local_config: dict[str, Any]) -> None:
super().__init__(lock, local_config)
self._locked = False
self._write = False
@@ -63,7 +59,7 @@
def mock_lock_data(self, data: dict[str, Any]) -> None:
self.locked()
- self._lock_data = data # type: ignore[assignment]
+ self._lock_data = data
def is_fresh(self) -> bool:
return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/tests/test_exporter.py
new/poetry_plugin_export-1.3.1/tests/test_exporter.py
--- old/poetry_plugin_export-1.2.0/tests/test_exporter.py 2022-11-05
14:30:22.823279100 +0100
+++ new/poetry_plugin_export-1.3.1/tests/test_exporter.py 2023-04-17
16:40:05.815764700 +0200
@@ -35,6 +35,7 @@
if TYPE_CHECKING:
+ from collections.abc import Collection
from pathlib import Path
from packaging.utils import NormalizedName
@@ -54,7 +55,7 @@
return self
def mock_lock_data(self, data: dict[str, Any]) -> None:
- self._lock_data = data # type: ignore[assignment]
+ self._lock_data = data
def is_locked(self) -> bool:
return self._locked
@@ -79,14 +80,17 @@
return p
-def set_package_requires(poetry: Poetry, skip: set[str] | None = None) -> None:
+def set_package_requires(
+ poetry: Poetry, skip: set[str] | None = None, dev: set[str] | None = None
+) -> None:
skip = skip or set()
+ dev = dev or set()
packages = poetry.locker.locked_repository().packages
package = poetry.package.with_dependency_groups([], only=True)
for pkg in packages:
if pkg.name not in skip:
dep = pkg.to_dependency()
- if pkg.category == "dev":
+ if pkg.name in dev:
dep._groups = frozenset(["dev"])
package.add_dependency(dep)
@@ -102,14 +106,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -146,7 +148,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "python_version < '3.7'",
@@ -154,7 +155,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "extra =='foo'",
@@ -162,7 +162,6 @@
{
"name": "baz",
"version": "7.8.9",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "sys_platform == 'win32'",
@@ -203,7 +202,6 @@
{
"name": "poetry",
"version": "1.1.4",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"keyring": "*"},
@@ -211,7 +209,6 @@
{
"name": "junit-xml",
"version": "1.9",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"six": "*"},
@@ -219,7 +216,6 @@
{
"name": "keyring",
"version": "21.8.0",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -232,7 +228,6 @@
{
"name": "secretstorage",
"version": "3.3.0",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"cryptography": "*"},
@@ -240,7 +235,6 @@
{
"name": "cryptography",
"version": "3.2",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"six": "*"},
@@ -248,7 +242,6 @@
{
"name": "six",
"version": "1.15.0",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -324,7 +317,6 @@
{
"name": "pyinstaller",
"version": "4.0",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -338,14 +330,12 @@
{
"name": "altgraph",
"version": "0.17",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "macholib",
"version": "1.8",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"altgraph": ">=0.15"},
@@ -404,7 +394,6 @@
{
"name": "a",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "python_version < '3.7'",
@@ -413,7 +402,6 @@
{
"name": "b",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "platform_system == 'Windows'",
@@ -422,7 +410,6 @@
{
"name": "c",
"version": "7.8.9",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "sys_platform == 'win32'",
@@ -431,7 +418,6 @@
{
"name": "d",
"version": "0.0.1",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -499,14 +485,12 @@
{
"name": "a",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "b",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
"dependencies": {"a": ">=1.2.3"},
@@ -553,14 +537,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -602,14 +584,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -659,14 +639,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -707,14 +685,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
},
@@ -729,7 +705,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.export("requirements.txt", tmp_path, "requirements.txt")
@@ -754,14 +730,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
},
@@ -776,7 +750,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
@@ -804,14 +778,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
},
@@ -826,7 +798,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([])
@@ -847,14 +819,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": True,
"python-versions": "*",
},
@@ -869,7 +839,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
@@ -890,22 +860,6 @@
["extras", "lines"],
[
(
- None,
- [f"foo==1.2.3 ; {MARKER_PY}"],
- ),
- (
- False,
- [f"foo==1.2.3 ; {MARKER_PY}"],
- ),
- (
- True,
- [
- f"bar==4.5.6 ; {MARKER_PY}",
- f"foo==1.2.3 ; {MARKER_PY}",
- f"spam==0.1.0 ; {MARKER_PY}",
- ],
- ),
- (
["feature-bar"],
[
f"bar==4.5.6 ; {MARKER_PY}",
@@ -918,7 +872,7 @@
def test_exporter_exports_requirements_txt_with_optional_packages(
tmp_path: Path,
poetry: Poetry,
- extras: bool | list[NormalizedName] | None,
+ extras: Collection[NormalizedName],
lines: list[str],
) -> None:
poetry.locker.mock_lock_data( # type: ignore[attr-defined]
@@ -927,14 +881,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": True,
"python-versions": "*",
"dependencies": {"spam": ">=0.1"},
@@ -942,7 +894,6 @@
{
"name": "spam",
"version": "0.1.0",
- "category": "main",
"optional": True,
"python-versions": "*",
},
@@ -988,7 +939,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1029,7 +979,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1041,7 +990,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -1084,7 +1032,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"bar": {"version": "4.5.6"}},
@@ -1092,7 +1039,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"baz": {"version": "7.8.9"}},
@@ -1100,7 +1046,6 @@
{
"name": "baz",
"version": "7.8.9",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"foo": {"version": "1.2.3"}},
@@ -1130,6 +1075,42 @@
assert content == expected
+def test_exporter_can_export_requirements_txt_with_circular_root_dependency(
+ tmp_path: Path, poetry: Poetry
+) -> None:
+ poetry.locker.mock_lock_data( # type: ignore[attr-defined]
+ {
+ "package": [
+ {
+ "name": "foo",
+ "version": "1.2.3",
+ "optional": False,
+ "python-versions": "*",
+ "dependencies": {poetry.package.pretty_name: {"version":
"1.2.3"}},
+ },
+ ],
+ "metadata": {
+ "python-versions": "*",
+ "content-hash": "123456789",
+ "files": {"foo": []},
+ },
+ }
+ )
+ set_package_requires(poetry)
+
+ exporter = Exporter(poetry, NullIO())
+ exporter.export("requirements.txt", tmp_path, "requirements.txt")
+
+ with (tmp_path / "requirements.txt").open(encoding="utf-8") as f:
+ content = f.read()
+
+ expected = f"""\
+foo==1.2.3 ; {MARKER_PY}
+"""
+
+ assert content == expected
+
+
def
test_exporter_can_export_requirements_txt_with_nested_packages_and_multiple_markers(
tmp_path: Path, poetry: Poetry
) -> None:
@@ -1139,7 +1120,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -1158,7 +1138,6 @@
{
"name": "bar",
"version": "7.8.9",
- "category": "main",
"optional": True,
"python-versions": "*",
"dependencies": {
@@ -1171,7 +1150,6 @@
{
"name": "baz",
"version": "10.11.13",
- "category": "main",
"optional": True,
"python-versions": "*",
},
@@ -1213,7 +1191,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "python_version < '3.7'",
@@ -1255,7 +1232,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1296,7 +1272,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1308,7 +1283,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1320,7 +1294,6 @@
{
"name": "baz",
"version": "7.8.9",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1363,7 +1336,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "python_version < '3.7'",
@@ -1406,7 +1378,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1448,7 +1419,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"marker": "python_version < '3.7'",
@@ -1497,14 +1467,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1524,7 +1492,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
@@ -1560,14 +1528,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1587,7 +1553,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
@@ -1622,7 +1588,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1641,7 +1606,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
exporter.export("requirements.txt", tmp_path, "requirements.txt")
@@ -1689,14 +1654,12 @@
{
"name": "foo",
"version": "1.2.1",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "1.2.2",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -1711,7 +1674,6 @@
{
"name": "baz",
"version": "1.2.3",
- "category": "dev",
"optional": False,
"python-versions": "*",
},
@@ -1723,7 +1685,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"baz"})
exporter = Exporter(poetry, NullIO())
if dev:
@@ -1757,7 +1719,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1769,7 +1730,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1781,7 +1741,6 @@
{
"name": "baz",
"version": "7.8.9",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1802,7 +1761,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar", "baz"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
@@ -1864,7 +1823,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -1876,7 +1834,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1888,7 +1845,6 @@
{
"name": "baz",
"version": "7.8.9",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1909,7 +1865,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar", "baz"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
@@ -1952,14 +1908,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "dev",
"optional": False,
"python-versions": "*",
"source": {
@@ -1979,7 +1933,7 @@
},
}
)
- set_package_requires(poetry)
+ set_package_requires(poetry, dev={"bar"})
exporter = Exporter(poetry, NullIO())
exporter.only_groups([MAIN_GROUP, "dev"])
@@ -2014,14 +1968,12 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -2057,7 +2009,6 @@
{
"name": "celery",
"version": "5.1.2",
- "category": "main",
"optional": False,
"python-versions": "<3.7",
"dependencies": {
@@ -2069,7 +2020,6 @@
{
"name": "celery",
"version": "5.2.3",
- "category": "main",
"optional": False,
"python-versions": ">=3.7",
"dependencies": {
@@ -2081,7 +2031,6 @@
{
"name": "click",
"version": "7.1.2",
- "category": "main",
"optional": False,
"python-versions": (
">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
@@ -2090,7 +2039,6 @@
{
"name": "click",
"version": "8.0.3",
- "category": "main",
"optional": False,
"python-versions": ">=3.6",
"dependencies": {},
@@ -2098,7 +2046,6 @@
{
"name": "click-didyoumean",
"version": "0.0.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"click": "*"},
@@ -2106,7 +2053,6 @@
{
"name": "click-didyoumean",
"version": "0.3.0",
- "category": "main",
"optional": False,
"python-versions": ">=3.6.2,<4.0.0",
"dependencies": {"click": ">=7"},
@@ -2114,7 +2060,6 @@
{
"name": "click-plugins",
"version": "1.1.1",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {"click": ">=4.0"},
@@ -2154,7 +2099,7 @@
io = BufferedIO()
exporter.export("requirements.txt", tmp_path, io)
- expected = f"""\
+ expected_legacy = f"""\
celery==5.1.2 ; {MARKER_PY36_ONLY}
celery==5.2.3 ; {MARKER_PY37}
click-didyoumean==0.0.3 ; {MARKER_PY36_PY362}
@@ -2164,7 +2109,17 @@
click==8.0.3 ; {MARKER_PY37}
"""
- assert io.fetch_output() == expected
+ expected = f"""\
+celery==5.1.2 ; {MARKER_PY36_ONLY}
+celery==5.2.3 ; {MARKER_PY37}
+click-didyoumean==0.0.3 ; {MARKER_PY36_PY362}
+click-didyoumean==0.3.0 ; {MARKER_PY362_PY40}
+click-plugins==1.1.1 ; {MARKER_PY36}
+click==7.1.2 ; {MARKER_PY36_ONLY}
+click==8.0.3 ; {MARKER_PY37}
+"""
+
+ assert io.fetch_output() in {expected, expected_legacy}
def test_exporter_handles_extras_next_to_non_extras(
@@ -2178,7 +2133,6 @@
"name": "localstack",
"python-versions": "*",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {
"localstack-ext": [
@@ -2196,7 +2150,6 @@
"name": "localstack-ext",
"python-versions": "*",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {
"something": "*",
@@ -2218,7 +2171,6 @@
"name": "something",
"python-versions": "*",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {},
},
@@ -2226,7 +2178,6 @@
"name": "something-else",
"python-versions": "*",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {},
},
@@ -2234,7 +2185,6 @@
"name": "another-thing",
"python-versions": "*",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {},
},
@@ -2291,7 +2241,6 @@
"name": "ipython",
"python-versions": ">=3.6",
"version": "7.16.3",
- "category": "main",
"optional": False,
"dependencies": {},
},
@@ -2299,7 +2248,6 @@
"name": "ipython",
"python-versions": ">=3.7",
"version": "7.34.0",
- "category": "main",
"optional": False,
"dependencies": {},
},
@@ -2307,7 +2255,6 @@
"name": "slash",
"python-versions": ">=3.6.*",
"version": "1.13.0",
- "category": "main",
"optional": False,
"dependencies": {
"ipython": [
@@ -2405,7 +2352,6 @@
"name": "foo",
"python-versions": ">=3.6",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {"pytest": {"version": "^6.2.4",
"optional": True}},
"extras": {"test": ["pytest (>=6.2.4,<7.0.0)"]},
@@ -2414,7 +2360,6 @@
"name": "pytest",
"python-versions": ">=3.6",
"version": "6.24.0",
- "category": "dev",
"optional": False,
"dependencies": {},
},
@@ -2489,7 +2434,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -2502,7 +2446,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -2517,7 +2460,6 @@
{
"name": "baz",
"version": "7.8.9",
- "category": "main",
"optional": False,
"python-versions": "*",
},
@@ -2549,7 +2491,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -2562,14 +2503,12 @@
{
"name": "bar",
"version": "7.8.9",
- "category": "main",
"optional": False,
"python-versions": "*",
},
{
"name": "baz",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
"source": {
@@ -2616,7 +2555,6 @@
"name": "foo",
"python-versions": ">=3.6",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {},
"source": {
@@ -2628,7 +2566,6 @@
"name": "foo",
"python-versions": ">=3.6",
"version": "1.0.0",
- "category": "main",
"optional": False,
"dependencies": {},
"source": {
@@ -2692,7 +2629,6 @@
{
"name": "foo",
"version": "1.2.3",
- "category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
@@ -2707,7 +2643,6 @@
{
"name": "bar",
"version": "4.5.6",
- "category": "main",
"optional": False,
"python-versions": "*",
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/tests/test_walker.py
new/poetry_plugin_export-1.3.1/tests/test_walker.py
--- old/poetry_plugin_export-1.2.0/tests/test_walker.py 1970-01-01
01:00:00.000000000 +0100
+++ new/poetry_plugin_export-1.3.1/tests/test_walker.py 2023-04-17
16:40:05.815764700 +0200
@@ -0,0 +1,27 @@
+from __future__ import annotations
+
+import pytest
+
+from packaging.utils import NormalizedName
+from poetry.core.packages.dependency import Dependency
+from poetry.core.packages.package import Package
+
+from poetry_plugin_export.walker import DependencyWalkerError
+from poetry_plugin_export.walker import walk_dependencies
+
+
+def test_walk_dependencies_multiple_versions_when_latest_is_not_compatible()
-> None:
+ # TODO: Support this case:
+ # https://github.com/python-poetry/poetry-plugin-export/issues/183
+ with pytest.raises(DependencyWalkerError):
+ walk_dependencies(
+ dependencies=[
+ Dependency("grpcio", ">=1.42.0"),
+ Dependency("grpcio", ">=1.42.0,<=1.49.1"),
+ Dependency("grpcio", ">=1.47.0,<2.0dev"),
+ ],
+ packages_by_name={
+ "grpcio": [Package("grpcio", "1.51.3"), Package("grpcio",
"1.49.1")]
+ },
+ root_package_name=NormalizedName("package-name"),
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/poetry_plugin_export-1.2.0/tests/types.py
new/poetry_plugin_export-1.3.1/tests/types.py
--- old/poetry_plugin_export-1.2.0/tests/types.py 2022-11-05
14:30:22.823279100 +0100
+++ new/poetry_plugin_export-1.3.1/tests/types.py 2023-04-17
16:40:05.815764700 +0200
@@ -14,7 +14,7 @@
class CommandTesterFactory(Protocol):
def __call__(
- self: CommandTester,
+ self,
command: str,
poetry: Poetry | None = None,
installer: Installer | None = None,