Skip to content

Commit 7d1d8ba

Browse files
authored
Merge pull request #56 from jedie/fix-check-version
Bugfix publish a poetry package and get the version string from pyproject.toml
2 parents 923364a + 126acad commit 7d1d8ba

File tree

5 files changed

+75
-28
lines changed

5 files changed

+75
-28
lines changed

manageprojects/tests/test_utilities_publish.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import inspect
12
from pathlib import Path
23
from unittest import TestCase
34

@@ -7,11 +8,45 @@
78
from manageprojects.test_utils.logs import AssertLogs
89
from manageprojects.test_utils.subprocess import FakeStdout, SubprocessCallMock
910
from manageprojects.tests.base import GIT_BIN_PARENT
10-
from manageprojects.utilities.publish import PublisherGit
11+
from manageprojects.utilities.publish import PublisherGit, get_pyproject_toml_version
1112
from manageprojects.utilities.temp_path import TemporaryDirectory
1213

1314

1415
class PublishTestCase(TestCase):
16+
def test_get_pyproject_toml_version(self):
17+
with TemporaryDirectory(prefix='test_get_pyproject_toml_version') as temp_path:
18+
pyproject_toml_path = temp_path / 'pyproject.toml'
19+
pyproject_toml_path.touch()
20+
21+
version = get_pyproject_toml_version(temp_path)
22+
self.assertIs(version, None)
23+
24+
pyproject_toml_path.write_text(
25+
inspect.cleandoc(
26+
'''
27+
[project]
28+
name = "foo"
29+
version = "1.2"
30+
description = "bar"
31+
'''
32+
)
33+
)
34+
version = get_pyproject_toml_version(temp_path)
35+
self.assertEqual(version, Version('1.2'))
36+
37+
pyproject_toml_path.write_text(
38+
inspect.cleandoc(
39+
'''
40+
[tool.poetry]
41+
name = "foo"
42+
version = "2.3"
43+
description = "bar"
44+
'''
45+
)
46+
)
47+
version = get_pyproject_toml_version(temp_path)
48+
self.assertEqual(version, Version('2.3'))
49+
1550
def test_publisher_git(self):
1651
with AssertLogs(self, loggers=('manageprojects',)), TemporaryDirectory(
1752
prefix='test_publisher_git'

manageprojects/utilities/publish.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
from collections.abc import Iterable
44
from importlib.metadata import version
55
from pathlib import Path
6+
from typing import Optional
67

8+
from bx_py_utils.dict_utils import dict_get
79
from bx_py_utils.path import assert_is_file
810

911

@@ -134,21 +136,33 @@ def clean_version(version: str) -> Version:
134136
return Version(version)
135137

136138

137-
def check_version(*, module, package_path: Path) -> Version:
138-
module_version = clean_version(module.__version__)
139+
def get_pyproject_toml_version(package_path: Path) -> Optional[Version]:
139140
pyproject_toml_path = Path(package_path, 'pyproject.toml')
140141
assert_is_file(pyproject_toml_path)
141142

143+
pyproject_toml = tomllib.loads(pyproject_toml_path.read_text(encoding='UTF-8'))
144+
145+
ver_str = dict_get(pyproject_toml, 'project', 'version')
146+
if not ver_str:
147+
ver_str = dict_get(pyproject_toml, 'tool', 'poetry', 'version')
148+
149+
if ver_str:
150+
return clean_version(ver_str)
151+
152+
153+
def check_version(*, module, package_path: Path) -> Version:
154+
module_version = clean_version(module.__version__)
142155
installed_version = clean_version(version(module.__name__))
143156
if module_version != installed_version:
144157
exit_with_error(
145158
f'Version mismatch: current version {module_version} is not the installed one: {installed_version}',
146159
hint='Install package and run publish again',
147160
)
148161

149-
pyproject_toml = tomllib.loads(pyproject_toml_path.read_text(encoding='UTF-8'))
150-
pyproject_version = clean_version(pyproject_toml['project']['version'])
151-
if pyproject_version != installed_version:
162+
pyproject_version = get_pyproject_toml_version(package_path)
163+
if not pyproject_version:
164+
confirm('Can not get package version from pyproject.toml')
165+
elif pyproject_version != installed_version:
152166
exit_with_error(
153167
(
154168
f'Version mismatch:'

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "manageprojects"
3-
version = "0.9.0"
3+
version = "0.9.1"
44
description = "Manage Python / Django projects"
55
readme = "README.md"
66
authors = [

requirements.dev.txt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ build==0.10.0 \
5555
--hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \
5656
--hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269
5757
# via pip-tools
58-
bx-py-utils==75 \
59-
--hash=sha256:2cd1053197e579f12b3d1b942f77c9736838c63cd13035db3fe5cb426283c458 \
60-
--hash=sha256:8b5aefea276516217bcb1b99af7c28020448d2595439c44927d0f5a880ce0c8b
58+
bx-py-utils==76 \
59+
--hash=sha256:c9fcedc76daa9782b0a0c535d0d803061f61117f95957862ef58253f3c35fc0e \
60+
--hash=sha256:f15c64731cd9df0ca9a7bd3993fc0bf4faeb25fc30157348eb9735bf0989a210
6161
# via manageprojects (pyproject.toml)
6262
cachetools==5.3.0 \
6363
--hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \
@@ -410,9 +410,8 @@ keyring==23.13.1 \
410410
--hash=sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd \
411411
--hash=sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678
412412
# via twine
413-
markdown-it-py==2.1.0 \
414-
--hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \
415-
--hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da
413+
markdown-it-py==2.2.0 \
414+
--hash=sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30
416415
# via rich
417416
markupsafe==2.1.2 \
418417
--hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \
@@ -762,9 +761,9 @@ tomlkit==0.11.6 \
762761
--hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \
763762
--hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73
764763
# via manageprojects (pyproject.toml)
765-
tox==4.4.5 \
766-
--hash=sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425 \
767-
--hash=sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90
764+
tox==4.4.6 \
765+
--hash=sha256:9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b \
766+
--hash=sha256:e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf
768767
# via manageprojects (pyproject.toml)
769768
twine==4.0.2 \
770769
--hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \
@@ -804,9 +803,9 @@ pip==23.0.1 \
804803
--hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \
805804
--hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024
806805
# via pip-tools
807-
setuptools==67.3.2 \
808-
--hash=sha256:95f00380ef2ffa41d9bba85d95b27689d923c93dfbafed4aecd7cf988a25e012 \
809-
--hash=sha256:bb6d8e508de562768f2027902929f8523932fcd1fb784e6d573d2cafac995a48
806+
setuptools==67.4.0 \
807+
--hash=sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330 \
808+
--hash=sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251
810809
# via
811810
# pip-tools
812811
# safety

requirements.txt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ black==23.1a1 \
3434
--hash=sha256:ddbf9da228726d46f45c29024263e160d41030a415097254817d65127012d1a2 \
3535
--hash=sha256:e88e4b633d64b9e7adc4a6b922f52bb204af9f90d7b1e3317e6490f2b598b1ea
3636
# via darker
37-
bx-py-utils==75 \
38-
--hash=sha256:2cd1053197e579f12b3d1b942f77c9736838c63cd13035db3fe5cb426283c458 \
39-
--hash=sha256:8b5aefea276516217bcb1b99af7c28020448d2595439c44927d0f5a880ce0c8b
37+
bx-py-utils==76 \
38+
--hash=sha256:c9fcedc76daa9782b0a0c535d0d803061f61117f95957862ef58253f3c35fc0e \
39+
--hash=sha256:f15c64731cd9df0ca9a7bd3993fc0bf4faeb25fc30157348eb9735bf0989a210
4040
# via manageprojects (pyproject.toml)
4141
certifi==2022.12.7 \
4242
--hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \
@@ -191,9 +191,8 @@ jinja2-time==0.2.0 \
191191
--hash=sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40 \
192192
--hash=sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa
193193
# via cookiecutter
194-
markdown-it-py==2.1.0 \
195-
--hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \
196-
--hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da
194+
markdown-it-py==2.2.0 \
195+
--hash=sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30
197196
# via rich
198197
markupsafe==2.1.2 \
199198
--hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \
@@ -478,7 +477,7 @@ urllib3==1.26.14 \
478477
# via requests
479478

480479
# The following packages are considered to be unsafe in a requirements file:
481-
setuptools==67.3.2 \
482-
--hash=sha256:95f00380ef2ffa41d9bba85d95b27689d923c93dfbafed4aecd7cf988a25e012 \
483-
--hash=sha256:bb6d8e508de562768f2027902929f8523932fcd1fb784e6d573d2cafac995a48
480+
setuptools==67.4.0 \
481+
--hash=sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330 \
482+
--hash=sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251
484483
# via safety

0 commit comments

Comments
 (0)