From afa5c050cc08cfeaadc492f413dec6e56e8c48d6 Mon Sep 17 00:00:00 2001 From: JensDiemer Date: Thu, 9 Mar 2023 15:01:42 +0100 Subject: [PATCH] Support "poerty" in publish_package(), too. --- .../tests/test_utilities_publish.py | 43 ++++++++++++++++++- manageprojects/utilities/publish.py | 8 +++- pyproject.toml | 2 +- requirements.dev.txt | 12 +++--- requirements.txt | 12 +++--- 5 files changed, 62 insertions(+), 15 deletions(-) diff --git a/manageprojects/tests/test_utilities_publish.py b/manageprojects/tests/test_utilities_publish.py index 54f5577..8853c61 100644 --- a/manageprojects/tests/test_utilities_publish.py +++ b/manageprojects/tests/test_utilities_publish.py @@ -1,6 +1,8 @@ import inspect +import sys from pathlib import Path from unittest import TestCase +from unittest.mock import patch from packaging.version import Version @@ -8,11 +10,50 @@ from manageprojects.test_utils.logs import AssertLogs from manageprojects.test_utils.subprocess import FakeStdout, SubprocessCallMock from manageprojects.tests.base import GIT_BIN_PARENT -from manageprojects.utilities.publish import PublisherGit, get_pyproject_toml_version +from manageprojects.utilities import subprocess_utils +from manageprojects.utilities.publish import PublisherGit, build, get_pyproject_toml_version from manageprojects.utilities.temp_path import TemporaryDirectory class PublishTestCase(TestCase): + def test_build(self): + def return_callback(popenargs, args, kwargs): + return FakeStdout(stdout='Mocked run output') + + with TemporaryDirectory(prefix='test_build') as temp_path, SubprocessCallMock(return_callback) as call_mock: + build(package_path=temp_path) + + self.assertEqual( + call_mock.get_popenargs(rstrip_paths=(str(Path(sys.executable).parent),)), + [ + ['.../python', '-m', 'build'], + ], + ) + + # Use poetry: + + def prepare_popenargs_mock(popenargs, cwd=None): + return popenargs, cwd + + def make_relative_path_mock(path, **kwargs): + return path + + with TemporaryDirectory(prefix='test_build') as temp_path, SubprocessCallMock( + return_callback + ) as call_mock, patch.object(subprocess_utils, 'prepare_popenargs', prepare_popenargs_mock), patch.object( + subprocess_utils, 'make_relative_path', make_relative_path_mock + ): + Path(temp_path / 'poetry.lock').touch() + + build(package_path=temp_path) + + self.assertEqual( + call_mock.get_popenargs(), + [ + ['poetry', 'build'], + ], + ) + def test_get_pyproject_toml_version(self): with TemporaryDirectory(prefix='test_get_pyproject_toml_version') as temp_path: pyproject_toml_path = temp_path / 'pyproject.toml' diff --git a/manageprojects/utilities/publish.py b/manageprojects/utilities/publish.py index 57aa7a5..c140a93 100644 --- a/manageprojects/utilities/publish.py +++ b/manageprojects/utilities/publish.py @@ -188,7 +188,13 @@ def rmtree(path): rmtree(package_path / 'build') print('OK') - output = verbose_check_output(sys.executable, '-m', 'build', verbose=True, exit_on_error=True) + if Path(package_path / 'poetry.lock').is_file(): + # Poetry used -> build with it + output = verbose_check_output('poetry', 'build', verbose=True, exit_on_error=True) + else: + # use normal build + output = verbose_check_output(sys.executable, '-m', 'build', verbose=True, exit_on_error=True) + with tempfile.NamedTemporaryFile( mode='w', suffix='.txt', prefix=f'{package_path.name}_', encoding='utf-8', delete=False ) as temp_file: diff --git a/pyproject.toml b/pyproject.toml index de350c0..10abb06 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "manageprojects" -version = "0.9.3" +version = "0.9.4" description = "Manage Python / Django projects" readme = "README.md" authors = [ diff --git a/requirements.dev.txt b/requirements.dev.txt index ab5e4ba..b971270 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -226,9 +226,9 @@ click==8.1.3 \ # pip-tools # rich-click # safety -codespell==2.2.2 \ - --hash=sha256:87dfcd9bdc9b3cb8b067b37f0af22044d7a84e28174adfc8eaa203056b7f9ecc \ - --hash=sha256:c4d00c02b5a2a55661f00d5b4b3b5a710fa803ced9a9d7e45438268b099c319c +codespell==2.2.4 \ + --hash=sha256:0b4620473c257d9cde1ff8998b26b2bb209a35c2b7489f5dc3436024298ce83a \ + --hash=sha256:7d984b8130108e6f82524b7d09f8b7bf2fb1e398c5d4b37d9e2bd310145b3e29 # via manageprojects (pyproject.toml) colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ @@ -793,9 +793,9 @@ pip==23.0.1 \ --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 # via pip-tools -setuptools==67.5.1 \ - --hash=sha256:15136a251127da2d2e77ac7a1bc231eb504654f7e3346d93613a13f2e2787535 \ - --hash=sha256:1c39d42bda4cb89f7fdcad52b6762e3c309ec8f8715b27c684176b7d71283242 +setuptools==67.6.0 \ + --hash=sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077 \ + --hash=sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2 # via # pip-tools # safety diff --git a/requirements.txt b/requirements.txt index 1089afe..edd9d19 100644 --- a/requirements.txt +++ b/requirements.txt @@ -132,9 +132,9 @@ click==8.1.3 \ # manageprojects (pyproject.toml) # rich-click # safety -codespell==2.2.2 \ - --hash=sha256:87dfcd9bdc9b3cb8b067b37f0af22044d7a84e28174adfc8eaa203056b7f9ecc \ - --hash=sha256:c4d00c02b5a2a55661f00d5b4b3b5a710fa803ced9a9d7e45438268b099c319c +codespell==2.2.4 \ + --hash=sha256:0b4620473c257d9cde1ff8998b26b2bb209a35c2b7489f5dc3436024298ce83a \ + --hash=sha256:7d984b8130108e6f82524b7d09f8b7bf2fb1e398c5d4b37d9e2bd310145b3e29 # via manageprojects (pyproject.toml) cookiecutter==2.1.1 \ --hash=sha256:9f3ab027cec4f70916e28f03470bdb41e637a3ad354b4d65c765d93aad160022 \ @@ -468,7 +468,7 @@ urllib3==1.26.14 \ # via requests # The following packages are considered to be unsafe in a requirements file: -setuptools==67.5.1 \ - --hash=sha256:15136a251127da2d2e77ac7a1bc231eb504654f7e3346d93613a13f2e2787535 \ - --hash=sha256:1c39d42bda4cb89f7fdcad52b6762e3c309ec8f8715b27c684176b7d71283242 +setuptools==67.6.0 \ + --hash=sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077 \ + --hash=sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2 # via safety