Commit 9175a538 by Arun Babu Neelicattu

core: use new version class implementation

parent 3738ae79
...@@ -152,6 +152,14 @@ ssh = ["bcrypt (>=3.1.5)"] ...@@ -152,6 +152,14 @@ ssh = ["bcrypt (>=3.1.5)"]
test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
[[package]] [[package]]
name = "dataclasses"
version = "0.8"
description = "A backport of the dataclasses module for Python 3.6"
category = "main"
optional = false
python-versions = ">=3.6, <3.7"
[[package]]
name = "deepdiff" name = "deepdiff"
version = "5.2.3" version = "5.2.3"
description = "Deep Difference and Search of any Python object/data." description = "Deep Difference and Search of any Python object/data."
...@@ -390,13 +398,14 @@ python-versions = "^3.6" ...@@ -390,13 +398,14 @@ python-versions = "^3.6"
develop = false develop = false
[package.dependencies] [package.dependencies]
dataclasses = {version = "^0.8", markers = "python_version >= \"3.6\" and python_version < \"3.7\""}
importlib-metadata = {version = "^1.7.0", markers = "python_version >= \"3.5\" and python_version < \"3.8\""} importlib-metadata = {version = "^1.7.0", markers = "python_version >= \"3.5\" and python_version < \"3.8\""}
[package.source] [package.source]
type = "git" type = "git"
url = "https://github.com/python-poetry/poetry-core" url = "https://github.com/python-poetry/poetry-core.git"
reference = "master" reference = "master"
resolved_reference = "5d5251c427aacedcf54f9743635a8124e5a26151" resolved_reference = "c11cb9a6ebdda53d45dae78b45f6f73f5368e793"
[[package]] [[package]]
name = "pre-commit" name = "pre-commit"
...@@ -705,7 +714,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt ...@@ -705,7 +714,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.6" python-versions = "^3.6"
content-hash = "c72b0807603d4902cff83901d0e65165e243937b5be90b05c17d3c92a06b4fc8" content-hash = "8442060c68d80744b05aac3a07818a1e04e457c05b0e481d717cb44721009566"
[metadata.files] [metadata.files]
appdirs = [ appdirs = [
...@@ -859,6 +868,10 @@ cryptography = [ ...@@ -859,6 +868,10 @@ cryptography = [
{file = "cryptography-3.4.6-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:9e98b452132963678e3ac6c73f7010fe53adf72209a32854d55690acac3f6724"}, {file = "cryptography-3.4.6-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:9e98b452132963678e3ac6c73f7010fe53adf72209a32854d55690acac3f6724"},
{file = "cryptography-3.4.6.tar.gz", hash = "sha256:2d32223e5b0ee02943f32b19245b61a62db83a882f0e76cc564e1cec60d48f87"}, {file = "cryptography-3.4.6.tar.gz", hash = "sha256:2d32223e5b0ee02943f32b19245b61a62db83a882f0e76cc564e1cec60d48f87"},
] ]
dataclasses = [
{file = "dataclasses-0.8-py3-none-any.whl", hash = "sha256:0201d89fa866f68c8ebd9d08ee6ff50c0b255f8ec63a71c16fda7af82bb887bf"},
{file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"},
]
deepdiff = [ deepdiff = [
{file = "deepdiff-5.2.3-py3-none-any.whl", hash = "sha256:3d3da4bd7e01fb5202088658ed26427104c748dda56a0ecfac9ce9a1d2d00844"}, {file = "deepdiff-5.2.3-py3-none-any.whl", hash = "sha256:3d3da4bd7e01fb5202088658ed26427104c748dda56a0ecfac9ce9a1d2d00844"},
{file = "deepdiff-5.2.3.tar.gz", hash = "sha256:ae2cb98353309f93fbfdda4d77adb08fb303314d836bb6eac3d02ed71a10b40e"}, {file = "deepdiff-5.2.3.tar.gz", hash = "sha256:ae2cb98353309f93fbfdda4d77adb08fb303314d836bb6eac3d02ed71a10b40e"},
......
...@@ -87,31 +87,22 @@ patch, minor, major, prepatch, preminor, premajor, prerelease. ...@@ -87,31 +87,22 @@ patch, minor, major, prepatch, preminor, premajor, prerelease.
raise ValueError("The project's version doesn't seem to follow semver") raise ValueError("The project's version doesn't seem to follow semver")
if rule in {"major", "premajor"}: if rule in {"major", "premajor"}:
new = version.next_major new = version.next_major()
if rule == "premajor": if rule == "premajor":
new = new.first_prerelease new = new.first_prerelease()
elif rule in {"minor", "preminor"}: elif rule in {"minor", "preminor"}:
new = version.next_minor new = version.next_minor()
if rule == "preminor": if rule == "preminor":
new = new.first_prerelease new = new.first_prerelease()
elif rule in {"patch", "prepatch"}: elif rule in {"patch", "prepatch"}:
new = version.next_patch new = version.next_patch()
if rule == "prepatch": if rule == "prepatch":
new = new.first_prerelease new = new.first_prerelease()
elif rule == "prerelease": elif rule == "prerelease":
if version.is_prerelease(): if version.is_unstable():
pre = version.prerelease new = Version(version.epoch, version.release, version.pre.next())
new_prerelease = int(pre[1]) + 1
new = Version.parse(
"{}.{}.{}-{}".format(
version.major,
version.minor,
version.patch,
".".join([pre[0], str(new_prerelease)]),
)
)
else: else:
new = version.next_patch.first_prerelease new = version.next_patch().first_prerelease()
else: else:
new = Version.parse(rule) new = Version.parse(rule)
......
...@@ -543,8 +543,9 @@ class Executor(object): ...@@ -543,8 +543,9 @@ class Executor(object):
# some versions of pip (< 19.0.0) don't understand it # some versions of pip (< 19.0.0) don't understand it
# so we need to check the version of pip to know # so we need to check the version of pip to know
# if we can rely on the build system # if we can rely on the build system
legacy_pip = self._env.pip_version < self._env.pip_version.__class__( legacy_pip = (
19, 0, 0 self._env.pip_version
< self._env.pip_version.__class__.from_parts(19, 0, 0)
) )
package_poetry = Factory().create_poetry(pyproject.file.path.parent) package_poetry = Factory().create_poetry(pyproject.file.path.parent)
......
...@@ -84,7 +84,7 @@ class EditableBuilder(Builder): ...@@ -84,7 +84,7 @@ class EditableBuilder(Builder):
f.write(decode(builder.build_setup())) f.write(decode(builder.build_setup()))
try: try:
if self._env.pip_version < Version(19, 0): if self._env.pip_version < Version.from_parts(19, 0):
pip_editable_install(self._path, self._env) pip_editable_install(self._path, self._env)
else: else:
# Temporarily rename pyproject.toml # Temporarily rename pyproject.toml
......
...@@ -339,7 +339,7 @@ class VersionSolver: ...@@ -339,7 +339,7 @@ class VersionSolver:
if locked and ( if locked and (
dependency.constraint.allows(locked.version) dependency.constraint.allows(locked.version)
or locked.is_prerelease() or locked.is_prerelease()
and dependency.constraint.allows(locked.version.next_patch) and dependency.constraint.allows(locked.version.next_patch())
): ):
return 1 return 1
......
...@@ -478,7 +478,7 @@ class Locker(object): ...@@ -478,7 +478,7 @@ class Locker(object):
# We expect the locker to be able to read lock files # We expect the locker to be able to read lock files
# from the same semantic versioning range # from the same semantic versioning range
accepted_versions = parse_constraint( accepted_versions = parse_constraint(
"^{}".format(Version(current_version.major, 0)) "^{}".format(Version.from_parts(current_version.major, 0))
) )
lock_version_allowed = accepted_versions.allows(lock_version) lock_version_allowed = accepted_versions.allows(lock_version)
if lock_version_allowed and current_version < lock_version: if lock_version_allowed and current_version < lock_version:
......
...@@ -24,7 +24,7 @@ from poetry.__version__ import __version__ ...@@ -24,7 +24,7 @@ from poetry.__version__ import __version__
from poetry.core.masonry.metadata import Metadata from poetry.core.masonry.metadata import Metadata
from poetry.core.masonry.utils.helpers import escape_name from poetry.core.masonry.utils.helpers import escape_name
from poetry.core.masonry.utils.helpers import escape_version from poetry.core.masonry.utils.helpers import escape_version
from poetry.utils.helpers import normalize_version from poetry.core.utils.helpers import normalize_version
from poetry.utils.patterns import wheel_file_re from poetry.utils.patterns import wheel_file_re
......
...@@ -437,7 +437,7 @@ class PackageNode(DFSNode): ...@@ -437,7 +437,7 @@ class PackageNode(DFSNode):
if pkg.complete_name == dependency.complete_name and ( if pkg.complete_name == dependency.complete_name and (
dependency.constraint.allows(pkg.version) dependency.constraint.allows(pkg.version)
or dependency.allows_prereleases() or dependency.allows_prereleases()
and pkg.version.is_prerelease() and pkg.version.is_unstable()
and dependency.constraint.allows(pkg.version.stable) and dependency.constraint.allows(pkg.version.stable)
): ):
# If there is already a child with this name # If there is already a child with this name
......
...@@ -254,9 +254,9 @@ class LegacyRepository(PyPiRepository): ...@@ -254,9 +254,9 @@ class LegacyRepository(PyPiRepository):
if isinstance(constraint, VersionRange): if isinstance(constraint, VersionRange):
if ( if (
constraint.max is not None constraint.max is not None
and constraint.max.is_prerelease() and constraint.max.is_unstable()
or constraint.min is not None or constraint.min is not None
and constraint.min.is_prerelease() and constraint.min.is_unstable()
): ):
allow_prereleases = True allow_prereleases = True
...@@ -275,7 +275,7 @@ class LegacyRepository(PyPiRepository): ...@@ -275,7 +275,7 @@ class LegacyRepository(PyPiRepository):
versions = [] versions = []
for version in page.versions: for version in page.versions:
if version.is_prerelease() and not allow_prereleases: if version.is_unstable() and not allow_prereleases:
if constraint.is_any(): if constraint.is_any():
# we need this when all versions of the package are pre-releases # we need this when all versions of the package are pre-releases
ignored_pre_release_versions.append(version) ignored_pre_release_versions.append(version)
......
...@@ -20,10 +20,10 @@ from html5lib.html5parser import parse ...@@ -20,10 +20,10 @@ from html5lib.html5parser import parse
from poetry.core.packages.dependency import Dependency from poetry.core.packages.dependency import Dependency
from poetry.core.packages.package import Package from poetry.core.packages.package import Package
from poetry.core.packages.utils.link import Link from poetry.core.packages.utils.link import Link
from poetry.core.semver.exceptions import ParseVersionError
from poetry.core.semver.helpers import parse_constraint from poetry.core.semver.helpers import parse_constraint
from poetry.core.semver.version_constraint import VersionConstraint from poetry.core.semver.version_constraint import VersionConstraint
from poetry.core.semver.version_range import VersionRange from poetry.core.semver.version_range import VersionRange
from poetry.core.version.exceptions import InvalidVersion
from poetry.core.version.markers import parse_marker from poetry.core.version.markers import parse_marker
from poetry.locations import REPOSITORY_CACHE_DIR from poetry.locations import REPOSITORY_CACHE_DIR
from poetry.utils._compat import to_str from poetry.utils._compat import to_str
...@@ -98,9 +98,9 @@ class PyPiRepository(RemoteRepository): ...@@ -98,9 +98,9 @@ class PyPiRepository(RemoteRepository):
if isinstance(constraint, VersionRange): if isinstance(constraint, VersionRange):
if ( if (
constraint.max is not None constraint.max is not None
and constraint.max.is_prerelease() and constraint.max.is_unstable()
or constraint.min is not None or constraint.min is not None
and constraint.min.is_prerelease() and constraint.min.is_unstable()
): ):
allow_prereleases = True allow_prereleases = True
...@@ -129,7 +129,7 @@ class PyPiRepository(RemoteRepository): ...@@ -129,7 +129,7 @@ class PyPiRepository(RemoteRepository):
try: try:
package = Package(info["info"]["name"], version) package = Package(info["info"]["name"], version)
except ParseVersionError: except InvalidVersion:
self._log( self._log(
'Unable to parse version "{}" for the {} package, skipping'.format( 'Unable to parse version "{}" for the {} package, skipping'.format(
version, dependency.name version, dependency.name
...@@ -186,7 +186,7 @@ class PyPiRepository(RemoteRepository): ...@@ -186,7 +186,7 @@ class PyPiRepository(RemoteRepository):
result = Package(name, version, description) result = Package(name, version, description)
result.description = to_str(description.strip()) result.description = to_str(description.strip())
results.append(result) results.append(result)
except ParseVersionError: except InvalidVersion:
self._log( self._log(
'Unable to parse version "{}" for the {} package, skipping'.format( 'Unable to parse version "{}" for the {} package, skipping'.format(
version, name version, name
......
...@@ -55,9 +55,9 @@ class Repository(BaseRepository): ...@@ -55,9 +55,9 @@ class Repository(BaseRepository):
if isinstance(constraint, VersionRange): if isinstance(constraint, VersionRange):
if ( if (
constraint.max is not None constraint.max is not None
and constraint.max.is_prerelease() and constraint.max.is_unstable()
or constraint.min is not None or constraint.min is not None
and constraint.min.is_prerelease() and constraint.min.is_unstable()
): ):
allow_prereleases = True allow_prereleases = True
...@@ -77,7 +77,7 @@ class Repository(BaseRepository): ...@@ -77,7 +77,7 @@ class Repository(BaseRepository):
if constraint.allows(package.version) or ( if constraint.allows(package.version) or (
package.is_prerelease() package.is_prerelease()
and constraint.allows(package.version.next_patch) and constraint.allows(package.version.next_patch())
): ):
packages.append(package) packages.append(package)
......
...@@ -17,7 +17,6 @@ import requests ...@@ -17,7 +17,6 @@ import requests
from poetry.config.config import Config from poetry.config.config import Config
from poetry.core.packages.package import Package from poetry.core.packages.package import Package
from poetry.core.version import Version
try: try:
...@@ -37,10 +36,6 @@ def module_name(name: str) -> str: ...@@ -37,10 +36,6 @@ def module_name(name: str) -> str:
return canonicalize_name(name).replace(".", "_").replace("-", "_") return canonicalize_name(name).replace(".", "_").replace("-", "_")
def normalize_version(version: str) -> str:
return str(Version(version))
def _del_ro(action: Callable, name: str, exc: Exception) -> None: def _del_ro(action: Callable, name: str, exc: Exception) -> None:
os.chmod(name, stat.S_IWRITE) os.chmod(name, stat.S_IWRITE)
os.remove(name) os.remove(name)
......
...@@ -36,7 +36,7 @@ class VersionSelector(object): ...@@ -36,7 +36,7 @@ class VersionSelector(object):
}, },
) )
candidates = self._pool.find_packages(dependency) candidates = self._pool.find_packages(dependency)
only_prereleases = all([c.version.is_prerelease() for c in candidates]) only_prereleases = all([c.version.is_unstable() for c in candidates])
if not candidates: if not candidates:
return False return False
...@@ -77,7 +77,7 @@ class VersionSelector(object): ...@@ -77,7 +77,7 @@ class VersionSelector(object):
version = pretty_version version = pretty_version
else: else:
version = ".".join(str(p) for p in parts) version = ".".join(str(p) for p in parts)
if parsed.is_prerelease(): if parsed.is_unstable():
version += "-{}".format(".".join(str(p) for p in parsed.prerelease)) version += "-{}".format(parsed.pre.to_string())
return "^{}".format(version) return "^{}".format(version)
...@@ -27,7 +27,7 @@ generate-setup-file = false ...@@ -27,7 +27,7 @@ generate-setup-file = false
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.6" python = "^3.6"
poetry-core = { git = "https://github.com/python-poetry/poetry-core", branch = "master"} poetry-core = { git = "https://github.com/python-poetry/poetry-core.git", branch = "master"}
cleo = "^1.0.0a1" cleo = "^1.0.0a1"
crashtest = "^0.3.0" crashtest = "^0.3.0"
requests = "^2.18" requests = "^2.18"
......
...@@ -23,7 +23,7 @@ def setup(mocker): ...@@ -23,7 +23,7 @@ def setup(mocker):
def mock_subprocess_calls(setup, current_python, mocker): def mock_subprocess_calls(setup, current_python, mocker):
mocker.patch( mocker.patch(
"subprocess.check_output", "subprocess.check_output",
side_effect=check_output_wrapper(Version(*current_python)), side_effect=check_output_wrapper(Version.from_parts(*current_python)),
) )
mocker.patch( mocker.patch(
"subprocess.Popen.communicate", "subprocess.Popen.communicate",
......
...@@ -25,7 +25,7 @@ def test_self_update_should_install_all_necessary_elements( ...@@ -25,7 +25,7 @@ def test_self_update_should_install_all_necessary_elements(
command = tester.command command = tester.command
version = Version.parse(__version__).next_minor.text version = Version.parse(__version__).next_minor().text
mocker.patch( mocker.patch(
"poetry.repositories.pypi_repository.PyPiRepository.find_packages", "poetry.repositories.pypi_repository.PyPiRepository.find_packages",
return_value=[Package("poetry", version)], return_value=[Package("poetry", version)],
......
...@@ -99,7 +99,7 @@ def test_backjump_to_nearer_unsatisfied_package(root, provider, repo): ...@@ -99,7 +99,7 @@ def test_backjump_to_nearer_unsatisfied_package(root, provider, repo):
root.add_dependency(Factory.create_dependency("b", "*")) root.add_dependency(Factory.create_dependency("b", "*"))
add_to_repo(repo, "a", "1.0.0", deps={"c": "1.0.0"}) add_to_repo(repo, "a", "1.0.0", deps={"c": "1.0.0"})
add_to_repo(repo, "a", "2.0.0", deps={"c": "2.0.0-nonexistent"}) add_to_repo(repo, "a", "2.0.0", deps={"c": "2.0.0-1"})
add_to_repo(repo, "b", "1.0.0") add_to_repo(repo, "b", "1.0.0")
add_to_repo(repo, "b", "2.0.0") add_to_repo(repo, "b", "2.0.0")
add_to_repo(repo, "b", "3.0.0") add_to_repo(repo, "b", "3.0.0")
......
...@@ -428,7 +428,9 @@ content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77 ...@@ -428,7 +428,9 @@ content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77
[metadata.files] [metadata.files]
""".format( """.format(
version=".".join(Version.parse(Locker._VERSION).next_minor.text.split(".")[:2]) version=".".join(
Version.parse(Locker._VERSION).next_minor().text.split(".")[:2]
)
) )
caplog.set_level(logging.WARNING, logger="poetry.packages.locker") caplog.set_level(logging.WARNING, logger="poetry.packages.locker")
......
...@@ -429,7 +429,7 @@ def test_deactivate_activated(tmp_dir, manager, poetry, config, mocker): ...@@ -429,7 +429,7 @@ def test_deactivate_activated(tmp_dir, manager, poetry, config, mocker):
venv_name = manager.generate_env_name("simple-project", str(poetry.file.parent)) venv_name = manager.generate_env_name("simple-project", str(poetry.file.parent))
version = Version.parse(".".join(str(c) for c in sys.version_info[:3])) version = Version.parse(".".join(str(c) for c in sys.version_info[:3]))
other_version = Version.parse("3.4") if version.major == 2 else version.next_minor other_version = Version.parse("3.4") if version.major == 2 else version.next_minor()
( (
Path(tmp_dir) / "{}-py{}.{}".format(venv_name, version.major, version.minor) Path(tmp_dir) / "{}-py{}.{}".format(venv_name, version.major, version.minor)
).mkdir() ).mkdir()
......
...@@ -2,7 +2,7 @@ import os ...@@ -2,7 +2,7 @@ import os
import pytest import pytest
from poetry.core.semver.exceptions import ParseVersionError from poetry.core.version.exceptions import InvalidVersion
from poetry.utils.setup_reader import SetupReader from poetry.utils.setup_reader import SetupReader
...@@ -115,7 +115,7 @@ def test_setup_reader_read_setup_cfg(setup): ...@@ -115,7 +115,7 @@ def test_setup_reader_read_setup_cfg(setup):
def test_setup_reader_read_setup_cfg_with_attr(setup): def test_setup_reader_read_setup_cfg_with_attr(setup):
with pytest.raises(ParseVersionError): with pytest.raises(InvalidVersion):
SetupReader.read_from_directory(setup("with-setup-cfg-attr")) SetupReader.read_from_directory(setup("with-setup-cfg-attr"))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment