From 3ebeb57686232ba22af16e8aad7fe321d5a347c0 Mon Sep 17 00:00:00 2001 From: Claudio Jolowicz Date: Wed, 21 Aug 2019 19:11:57 +0200 Subject: [PATCH 1/5] Support pyproject.toml when detecting Python apps --- bin/detect | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/detect b/bin/detect index eeb965b0f..682585fc5 100755 --- a/bin/detect +++ b/bin/detect @@ -15,7 +15,7 @@ BUILD_DIR=$1 # Exit early if app is clearly not Python. -if [ ! -f "$BUILD_DIR/requirements.txt" ] && [ ! -f "$BUILD_DIR/setup.py" ] && [ ! -f "$BUILD_DIR/Pipfile" ]; then +if [ ! -f "$BUILD_DIR/requirements.txt" ] && [ ! -f "$BUILD_DIR/setup.py" ] && [ ! -f "$BUILD_DIR/Pipfile" ] && [ ! -f "$BUILD_DIR/pyproject.toml" ]; then exit 1 fi From d20ddf87f36f9e4f4a4c4e44a18bb8125b32bf56 Mon Sep 17 00:00:00 2001 From: Claudio Jolowicz Date: Thu, 22 Aug 2019 13:16:08 +0200 Subject: [PATCH 2/5] Avoid editable installs for pyproject.toml-style projects --- bin/compile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bin/compile b/bin/compile index db2d838bb..6e30856b0 100755 --- a/bin/compile +++ b/bin/compile @@ -269,8 +269,13 @@ mtime "pip.uninstall.time" "${start}" # This allows for people to ship a setup.py application to Heroku # (which is rare, but I vouch that it should work!) -if [ ! -f requirements.txt ] && [ ! -f Pipfile ]; then - echo "-e ." > requirements.txt +if [ ! -f requirements.txt ] && [ ! -f Pipfile ] ; then + if [ -f pyproject.toml ] ; then + # Editable installs are not supported for pyproject.toml-style projects. + echo "." > requirements.txt + else + echo "-e ." > requirements.txt + fi fi # Fix egg-links. From 0422f568e407837f7da6b59bece7c17b262ac41d Mon Sep 17 00:00:00 2001 From: Claudio Jolowicz Date: Wed, 21 Aug 2019 21:41:20 +0200 Subject: [PATCH 3/5] Add tests for pyproject.toml-style projects using poetry Add two test cases for projects using poetry as the build backend: - testPoetry: project without dependencies - testPoetryLock: project with dependencies, using a poetry.lock file --- test/fixtures/poetry-lock/foobar.py | 0 test/fixtures/poetry-lock/poetry.lock | 19 +++++++++++++++++++ test/fixtures/poetry-lock/pyproject.toml | 15 +++++++++++++++ test/fixtures/poetry/foobar.py | 0 test/fixtures/poetry/pyproject.toml | 14 ++++++++++++++ test/run-features | 10 ++++++++++ 6 files changed, 58 insertions(+) create mode 100644 test/fixtures/poetry-lock/foobar.py create mode 100644 test/fixtures/poetry-lock/poetry.lock create mode 100644 test/fixtures/poetry-lock/pyproject.toml create mode 100644 test/fixtures/poetry/foobar.py create mode 100644 test/fixtures/poetry/pyproject.toml diff --git a/test/fixtures/poetry-lock/foobar.py b/test/fixtures/poetry-lock/foobar.py new file mode 100644 index 000000000..e69de29bb diff --git a/test/fixtures/poetry-lock/poetry.lock b/test/fixtures/poetry-lock/poetry.lock new file mode 100644 index 000000000..3eb160325 --- /dev/null +++ b/test/fixtures/poetry-lock/poetry.lock @@ -0,0 +1,19 @@ +[[package]] +category = "main" +description = "Classes Without Boilerplate" +name = "attrs" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "19.1.0" + +[package.extras] +dev = ["coverage", "hypothesis", "pympler", "pytest", "six", "zope.interface", "sphinx", "pre-commit"] +docs = ["sphinx", "zope.interface"] +tests = ["coverage", "hypothesis", "pympler", "pytest", "six", "zope.interface"] + +[metadata] +content-hash = "9c92739040d45f898575877e69198d92bb9477423fe80c60a14376bf1f3d010e" +python-versions = "^3.7" + +[metadata.hashes] +attrs = ["69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", "f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"] diff --git a/test/fixtures/poetry-lock/pyproject.toml b/test/fixtures/poetry-lock/pyproject.toml new file mode 100644 index 000000000..0a3fd420a --- /dev/null +++ b/test/fixtures/poetry-lock/pyproject.toml @@ -0,0 +1,15 @@ +[tool.poetry] +name = "foobar" +version = "0.1.0" +description = "" +authors = ["Your Name "] + +[tool.poetry.dependencies] +python = "^3.6" +attrs = "^19.1.0" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/test/fixtures/poetry/foobar.py b/test/fixtures/poetry/foobar.py new file mode 100644 index 000000000..e69de29bb diff --git a/test/fixtures/poetry/pyproject.toml b/test/fixtures/poetry/pyproject.toml new file mode 100644 index 000000000..4074cf7f7 --- /dev/null +++ b/test/fixtures/poetry/pyproject.toml @@ -0,0 +1,14 @@ +[tool.poetry] +name = "foobar" +version = "0.1.0" +description = "" +authors = ["Your Name "] + +[tool.poetry.dependencies] +python = "^3.6" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/test/run-features b/test/run-features index 66fac4ea7..54b195a8e 100755 --- a/test/run-features +++ b/test/run-features @@ -70,6 +70,16 @@ testPipenvFullVersion() { assertCapturedSuccess } +testPoetry() { + compile "poetry" + assertCapturedSuccess +} + +testPoetryLock() { + compile "poetry-lock" + assertCapturedSuccess +} + testNoRequirements() { compile "no-requirements" assertCapturedError From 7a65ab1b7d00cc2b390defd7b250ca93f433330f Mon Sep 17 00:00:00 2001 From: Claudio Jolowicz Date: Thu, 22 Aug 2019 18:14:10 +0200 Subject: [PATCH 4/5] Add tests for pyproject.toml-style projects using flit Add two test cases for projects using flit as the build backend: - testFlit: project without dependencies - testFlitRequires: project with dependencies --- test/fixtures/flit-requires/foobar.py | 3 +++ test/fixtures/flit-requires/pyproject.toml | 10 ++++++++++ test/fixtures/flit/foobar.py | 3 +++ test/fixtures/flit/pyproject.toml | 9 +++++++++ test/run-features | 10 ++++++++++ 5 files changed, 35 insertions(+) create mode 100644 test/fixtures/flit-requires/foobar.py create mode 100644 test/fixtures/flit-requires/pyproject.toml create mode 100644 test/fixtures/flit/foobar.py create mode 100644 test/fixtures/flit/pyproject.toml diff --git a/test/fixtures/flit-requires/foobar.py b/test/fixtures/flit-requires/foobar.py new file mode 100644 index 000000000..4b4c67818 --- /dev/null +++ b/test/fixtures/flit-requires/foobar.py @@ -0,0 +1,3 @@ +"""An amazing sample package!""" + +__version__ = '0.1' diff --git a/test/fixtures/flit-requires/pyproject.toml b/test/fixtures/flit-requires/pyproject.toml new file mode 100644 index 000000000..61cc974f1 --- /dev/null +++ b/test/fixtures/flit-requires/pyproject.toml @@ -0,0 +1,10 @@ +[build-system] +requires = ["flit"] +build-backend = "flit.buildapi" + +[tool.flit.metadata] +module = "foobar" +author = "Sir Robin" +author-email = "robin@camelot.uk" +home-page = "https://github.com/sirrobin/foobar" +requires = ["attrs >=19.1.0"] diff --git a/test/fixtures/flit/foobar.py b/test/fixtures/flit/foobar.py new file mode 100644 index 000000000..4b4c67818 --- /dev/null +++ b/test/fixtures/flit/foobar.py @@ -0,0 +1,3 @@ +"""An amazing sample package!""" + +__version__ = '0.1' diff --git a/test/fixtures/flit/pyproject.toml b/test/fixtures/flit/pyproject.toml new file mode 100644 index 000000000..3dca8c957 --- /dev/null +++ b/test/fixtures/flit/pyproject.toml @@ -0,0 +1,9 @@ +[build-system] +requires = ["flit"] +build-backend = "flit.buildapi" + +[tool.flit.metadata] +module = "foobar" +author = "Sir Robin" +author-email = "robin@camelot.uk" +home-page = "https://github.com/sirrobin/foobar" diff --git a/test/run-features b/test/run-features index 54b195a8e..5c4b1b16d 100755 --- a/test/run-features +++ b/test/run-features @@ -80,6 +80,16 @@ testPoetryLock() { assertCapturedSuccess } +testFlit() { + compile "flit" + assertCapturedSuccess +} + +testFlitRequires() { + compile "flit-requires" + assertCapturedSuccess +} + testNoRequirements() { compile "no-requirements" assertCapturedError From 42c45ee50c20ef4f75fc296d1e2bb4e82e2bdcce Mon Sep 17 00:00:00 2001 From: Claudio Jolowicz Date: Wed, 28 Aug 2019 09:48:06 +0200 Subject: [PATCH 5/5] Add test for pyproject.toml-style project using setuptools --- test/fixtures/pyproject-toml/pyproject.toml | 3 +++ test/fixtures/pyproject-toml/setup.py | 4 ++++ test/run-features | 5 +++++ 3 files changed, 12 insertions(+) create mode 100644 test/fixtures/pyproject-toml/pyproject.toml create mode 100644 test/fixtures/pyproject-toml/setup.py diff --git a/test/fixtures/pyproject-toml/pyproject.toml b/test/fixtures/pyproject-toml/pyproject.toml new file mode 100644 index 000000000..864b334a8 --- /dev/null +++ b/test/fixtures/pyproject-toml/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta:__legacy__" diff --git a/test/fixtures/pyproject-toml/setup.py b/test/fixtures/pyproject-toml/setup.py new file mode 100644 index 000000000..4d986d25d --- /dev/null +++ b/test/fixtures/pyproject-toml/setup.py @@ -0,0 +1,4 @@ +from setuptools import setup + + +setup(name="foobar", version="1.0.0") diff --git a/test/run-features b/test/run-features index 5c4b1b16d..3c7b168ff 100755 --- a/test/run-features +++ b/test/run-features @@ -70,6 +70,11 @@ testPipenvFullVersion() { assertCapturedSuccess } +testPyProjectToml() { + compile "pyproject-toml" + assertCapturedSuccess +} + testPoetry() { compile "poetry" assertCapturedSuccess