Skip to content

Commit

Permalink
Deprecated develop option and rename to editable
Browse files Browse the repository at this point in the history
  • Loading branch information
0scarB committed Oct 25, 2020
1 parent 727907d commit 19a5b69
Show file tree
Hide file tree
Showing 12 changed files with 113 additions and 23 deletions.
27 changes: 25 additions & 2 deletions poetry/core/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,29 @@ def create_dependency(
"allow-prereleases", constraint.get("allows-prereleases", False)
)

constraint_has_deprecated_develop = "develop" in constraint
if "editable" in constraint:
if constraint_has_deprecated_develop:
raise RuntimeError(
'The "{}" dependency specifies '
'both the "editable" property and the deprecated "develop" property. '
'Please remove "develop" and resolve value conflicts!'.format(
name
)
)
editable = constraint.get("editable", False)
elif constraint_has_deprecated_develop:
message = (
'The "{}" dependency specifies '
'the "develop" property, which is deprecated. '
'Use "editable" instead.'.format(name)
)
warn(message, DeprecationWarning)
logger.warning(message)
editable = constraint.get("develop", False)
else:
editable = False

if "git" in constraint:
# VCS dependency
dependency = VCSDependency(
Expand All @@ -210,7 +233,7 @@ def create_dependency(
rev=constraint.get("rev", None),
category=category,
optional=optional,
develop=constraint.get("develop", False),
editable=editable,
extras=constraint.get("extras", []),
)
elif "file" in constraint:
Expand Down Expand Up @@ -247,7 +270,7 @@ def create_dependency(
category=category,
optional=optional,
base=root_dir,
develop=constraint.get("develop", False),
editable=editable,
extras=constraint.get("extras", []),
)
elif "url" in constraint:
Expand Down
14 changes: 12 additions & 2 deletions poetry/core/json/schemas/poetry-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -359,9 +359,14 @@
"type": "string"
}
},
"editable": {
"type": "boolean",
"description": "Whether to install the dependency in editable mode."
},
"develop": {
"type": "boolean",
"description": "Whether to install the dependency in development mode."
"description": "Whether to install the dependency in editable mode.",
"deprecated": true
}
}
},
Expand Down Expand Up @@ -435,9 +440,14 @@
"type": "string"
}
},
"editable": {
"type": "boolean",
"description": "Whether to install the dependency in editable mode."
},
"develop": {
"type": "boolean",
"description": "Whether to install the dependency in development mode."
"description": "Whether to install the dependency in editable mode.",
"deprecated": true
}
}
},
Expand Down
10 changes: 5 additions & 5 deletions poetry/core/packages/directory_dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def __init__(
category="main", # type: str
optional=False, # type: bool
base=None, # type: Path
develop=False, # type: bool
editable=False, # type: bool
extras=None, # type: Union[List[str], Set[str]]
):
self._path = path
Expand All @@ -29,7 +29,7 @@ def __init__(
except FileNotFoundError:
raise ValueError("Directory {} does not exist".format(self._path))

self._develop = develop
self._editable = editable
self._supports_poetry = False

if not self._full_path.exists():
Expand Down Expand Up @@ -75,8 +75,8 @@ def base(self):
return self._base

@property
def develop(self):
return self._develop
def editable(self):
return self._editable

def supports_poetry(self):
return self._supports_poetry
Expand All @@ -91,7 +91,7 @@ def with_constraint(self, constraint):
base=self.base,
optional=self.is_optional(),
category=self.category,
develop=self._develop,
editable=self._editable,
extras=self._extras,
)

Expand Down
8 changes: 4 additions & 4 deletions poetry/core/packages/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def __init__(

self.root_dir = None

self.develop = True
self.editable = True

@property
def name(self):
Expand Down Expand Up @@ -319,7 +319,7 @@ def to_dependency(self):
category=self.category,
optional=self.optional,
base=self.root_dir,
develop=self.develop,
editable=self.editable,
extras=self.features,
)
elif self.source_type == "file":
Expand Down Expand Up @@ -348,7 +348,7 @@ def to_dependency(self):
resolved_rev=self.source_resolved_reference,
category=self.category,
optional=self.optional,
develop=self.develop,
editable=self.editable,
extras=self.features,
)
else:
Expand Down Expand Up @@ -405,7 +405,7 @@ def clone(self): # type: () -> "Package"
clone.marker = self.marker
clone.extras = self.extras
clone.root_dir = self.root_dir
clone.develop = self.develop
clone.editable = self.editable

for dep in self.requires:
clone.requires.append(dep)
Expand Down
15 changes: 11 additions & 4 deletions poetry/core/packages/vcs_dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def __init__(
resolved_rev=None,
category="main",
optional=False,
develop=False,
editable=False,
extras=None, # type: Union[List[str], Set[str]]
):
self._vcs = vcs
Expand All @@ -36,7 +36,7 @@ def __init__(
self._branch = branch
self._tag = tag
self._rev = rev
self._develop = develop
self._editable = editable

super(VCSDependency, self).__init__(
name,
Expand Down Expand Up @@ -71,9 +71,16 @@ def tag(self):
def rev(self):
return self._rev

@property
def editable(self): # type: () -> bool
return self._editable

@property
def develop(self): # type: () -> bool
return self._develop
raise DeprecationWarning(
"The `develop` key is deprecated, please use `editable` instead!"
)
return self.editable

@property
def reference(self): # type: () -> str
Expand Down Expand Up @@ -127,7 +134,7 @@ def with_constraint(self, constraint):
resolved_rev=self._source_resolved_reference,
optional=self.is_optional(),
category=self.category,
develop=self._develop,
editable=self._editable,
extras=self._extras,
)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[tool.poetry]
name = "my-package"
version = "1.2.3"
description = ""
authors = ["Awesome Hacker <[email protected]>"]

[tool.poetry.dependencies]
pendulum = { git = "https://github.com/sdispater/pendulum.git", develop = false }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[tool.poetry]
name = "my-package"
version = "1.2.3"
description = ""
authors = ["Awesome Hacker <[email protected]>"]

[tool.poetry.dependencies]
pendulum = { git = "https://github.com/sdispater/pendulum.git", editable = false, develop = false }
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ license = "MIT"
[tool.poetry.extras]

[tool.poetry.dev-dependencies]
mylib = { path = "../mylib", develop = true}
mylib = { path = "../mylib", editable = false }
2 changes: 1 addition & 1 deletion tests/fixtures/sample_project/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ classifiers = [
python = "~2.7 || ^3.6"
cleo = "^0.6"
pendulum = { git = "https://github.com/sdispater/pendulum.git", branch = "2.0" }
tomlkit = { git = "https://github.com/sdispater/tomlkit.git", rev = "3bff550", develop = false }
tomlkit = { git = "https://github.com/sdispater/tomlkit.git", rev = "3bff550", editable = false }
requests = { version = "^2.18", optional = true, extras=[ "security" ] }
pathlib2 = { version = "^2.2", python = "~2.7" }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ authors = ["Awesome Hacker <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.6"
bogus = { path = "../only/in/dev", develop = true }
bogus = { path = "../only/in/dev", editable = true }
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ authors = ["Awesome Hacker <[email protected]>"]
python = "^3.6"

[tool.poetry.dev-dependencies]
bogus = { path = "../only/in/dev", develop = true }
bogus = { path = "../only/in/dev", editable = true }
38 changes: 36 additions & 2 deletions tests/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from __future__ import absolute_import
from __future__ import unicode_literals

import warnings

import pytest

from poetry.core.factory import Factory
Expand Down Expand Up @@ -49,7 +51,7 @@ def test_create_poetry():
assert pendulum.branch == "2.0"
assert pendulum.source == "https://github.com/sdispater/pendulum.git"
assert pendulum.allows_prereleases()
assert not pendulum.develop
assert not pendulum.editable

tomlkit = dependencies["tomlkit"]
assert tomlkit.pretty_constraint == "rev 3bff550"
Expand All @@ -58,7 +60,7 @@ def test_create_poetry():
assert tomlkit.rev == "3bff550"
assert tomlkit.source == "https://github.com/sdispater/tomlkit.git"
assert tomlkit.allows_prereleases()
assert not tomlkit.develop
assert not tomlkit.editable

requests = dependencies["requests"]
assert requests.pretty_constraint == "^2.18"
Expand Down Expand Up @@ -217,3 +219,35 @@ def test_create_poetry_fails_with_invalid_dev_dependencies_iff_with_dev_is_true(
Factory().create_poetry(
fixtures_dir / "project_with_invalid_dev_deps", with_dev=False
)


def test_create_poetry_fails_when_dependency_contains_editable_and_deprecated_develop_key():
with pytest.raises(RuntimeError) as e:
Factory().create_poetry(
fixtures_dir / "project_with_editable_and_deprecated_develop_dependency"
)
assert (
'The "pendulum" dependency specifies '
'both the "editable" property and the deprecated "develop" property. '
'Please remove "develop" and resolve value conflicts!'
) == str(e.value)


def test_create_poetry_warns_when_dependency_contains_deprecated_develop_key(caplog):
# All warnings are triggered inside this context manager.
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
expected = (
'The "pendulum" dependency specifies '
'the "develop" property, which is deprecated. '
'Use "editable" instead.'
)
Factory().create_poetry(
fixtures_dir / "project_with_deprecated_develop_dependency"
)
assert len(w) == 1
assert issubclass(w[-1].category, DeprecationWarning)
assert expected == str(w[-1].message)
for record in caplog.records:
assert record.levelname == "WARNING"
assert expected in caplog.text

0 comments on commit 19a5b69

Please sign in to comment.