Skip to content

Commit 77ace96

Browse files
authored
Merge pull request #279 from blink1073/handle-dynamic-version
2 parents e86fece + 100d4dd commit 77ace96

File tree

5 files changed

+64
-27
lines changed

5 files changed

+64
-27
lines changed

jupyter_releaser/tests/conftest.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,6 @@ def git_repo(tmp_path):
5353
changelog = tmp_path / "CHANGELOG.md"
5454
changelog.write_text(testutil.CHANGELOG_TEMPLATE, encoding="utf-8")
5555

56-
readme = tmp_path / "README.md"
57-
readme.write_text("Hello from foo project\n", encoding="utf-8")
58-
5956
config = Path(util.JUPYTER_RELEASER_CONFIG)
6057
config.write_text(testutil.TOML_CONFIG, encoding="utf-8")
6158

jupyter_releaser/tests/test_functions.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,26 @@ def test_get_repo(git_repo, mocker):
2525
assert util.get_repo() == repo
2626

2727

28-
def test_get_version_python(py_package):
28+
def test_get_version_pyproject_static(py_package):
2929
assert util.get_version() == "0.0.1"
3030
util.bump_version("0.0.2a0")
3131
assert util.get_version() == "0.0.2a0"
3232

3333

34-
def test_get_version_pyproject(py_package):
35-
os.unlink("setup.py")
34+
def test_get_version_pyproject_dynamic(py_package):
35+
py_project = py_package / "pyproject.toml"
36+
text = py_project.read_text(encoding="utf-8")
37+
text = text.replace("""[project]\nversion = "0.0.1\"""", "")
38+
py_project.write_text(text, encoding="utf-8")
3639
assert util.get_version() == "0.0.1"
3740

3841

42+
def test_get_version_setuppy(py_package):
43+
assert util.get_version() == "0.0.1"
44+
util.bump_version("0.0.2a0")
45+
assert util.get_version() == "0.0.2a0"
46+
47+
3948
def test_get_version_multipython(py_multipackage):
4049
prev_dir = os.getcwd()
4150
for package in py_multipackage:

jupyter_releaser/tests/util.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,6 @@ def setup_cfg_template(package_name="foo", module_name=None):
6262
[metadata]
6363
name = {package_name}
6464
version = attr: {module_name or package_name}.__version__
65-
description = My package description
66-
long_description = file: README.md
67-
long_description_content_type = text/markdown
68-
license = BSD 3-Clause License
69-
author = foo
70-
author_email = [email protected]
71-
url = https://foo.com
7265
7366
[options]
7467
zip_safe = False
@@ -79,15 +72,30 @@ def setup_cfg_template(package_name="foo", module_name=None):
7972

8073
SETUP_PY_TEMPLATE = """__import__("setuptools").setup()\n"""
8174

75+
LICENSE_TEMPLATE = "A fake license\n"
8276

83-
def pyproject_template(sub_packages=[]):
84-
res = """
77+
README_TEMPLATE = "A fake readme\n"
78+
79+
80+
def pyproject_template(project_name="foo", sub_packages=[]):
81+
res = f"""
8582
[build-system]
86-
requires = ["setuptools>=40.8.0", "wheel"]
83+
requires = ["setuptools>=61.0.0", "wheel"]
8784
build-backend = "setuptools.build_meta"
8885
8986
[project]
87+
name = "{project_name}"
9088
version = "0.0.1"
89+
description = "My package description"
90+
readme = "README.md"
91+
license = {{file = "LICENSE"}}
92+
authors = [
93+
{{email = "[email protected]"}},
94+
{{name = "foo"}}
95+
]
96+
97+
[project.urls]
98+
homepage = "https://foo.com"
9199
"""
92100
if sub_packages:
93101
res += f"""
@@ -118,6 +126,9 @@ def tbump_py_template(package_name="foo"):
118126
return f"""
119127
[[file]]
120128
src = "{package_name}.py"
129+
130+
[[file]]
131+
src = "pyproject.toml"
121132
"""
122133

123134

@@ -131,6 +142,7 @@ def tbump_py_template(package_name="foo"):
131142
include *.md
132143
include *.toml
133144
include *.yaml
145+
include LICENSE
134146
"""
135147

136148
CHANGELOG_TEMPLATE = f"""# Changelog
@@ -205,19 +217,27 @@ def write_files(git_repo, sub_packages=[], package_name="foo", module_name=None)
205217
)
206218

207219
pyproject = git_repo / "pyproject.toml"
208-
pyproject.write_text(pyproject_template(sub_packages), encoding="utf-8")
220+
pyproject.write_text(
221+
pyproject_template(package_name, sub_packages), encoding="utf-8"
222+
)
209223

210224
foopy = git_repo / f"{module_name}.py"
211225
foopy.write_text(PY_MODULE_TEMPLATE, encoding="utf-8")
212226

213227
manifest = git_repo / "MANIFEST.in"
214228
manifest.write_text(MANIFEST_TEMPLATE, encoding="utf-8")
215229

230+
license = git_repo / "LICENSE"
231+
license.write_text(LICENSE_TEMPLATE, encoding="utf-8")
232+
216233
here = Path(__file__).parent
217234
text = here.parent.parent.joinpath(".pre-commit-config.yaml").read_text(
218235
encoding="utf-8"
219236
)
220237

238+
readme = git_repo / "README.md"
239+
readme.write_text(README_TEMPLATE, encoding="utf-8")
240+
221241
pre_commit = git_repo / ".pre-commit-config.yaml"
222242
pre_commit.write_text(text, encoding="utf-8")
223243

jupyter_releaser/util.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import shlex
1111
import shutil
1212
import sys
13+
import tempfile
1314
import time
15+
import warnings
1416
from glob import glob
1517
from pathlib import Path
1618
from subprocess import CalledProcessError
@@ -20,7 +22,8 @@
2022
import toml
2123
from importlib_resources import files
2224
from jsonschema import Draft4Validator as Validator
23-
from pkg_resources import parse_version
25+
from packaging.version import parse as parse_version
26+
from pkginfo import Wheel
2427

2528
from jupyter_releaser.tee import run as tee
2629

@@ -134,20 +137,27 @@ def get_repo():
134137

135138
def get_version():
136139
"""Get the current package version"""
137-
if SETUP_PY.exists():
138-
return run("python setup.py --version").split("\n")[-1]
139-
elif PYPROJECT.exists():
140+
if PYPROJECT.exists():
140141
text = PYPROJECT.read_text(encoding="utf-8")
141142
data = toml.loads(text)
142143
project = data.get("project", {})
143144
version = project.get("version")
144-
if not version: # pragma: no cover
145-
raise ValueError("No version identifier could be found!")
145+
if not version:
146+
with tempfile.TemporaryDirectory() as tempdir:
147+
run(f"{sys.executable} -m build --wheel --outdir {tempdir}")
148+
wheel_path = glob(f"{tempdir}/*.whl")[0]
149+
wheel = Wheel(wheel_path)
150+
version = wheel.version
146151
return version
147-
elif PACKAGE_JSON.exists():
152+
153+
if PACKAGE_JSON.exists():
148154
return json.loads(PACKAGE_JSON.read_text(encoding="utf-8")).get("version", "")
149-
else: # pragma: no cover
150-
raise ValueError("No version identifier could be found!")
155+
156+
if SETUP_PY.exists():
157+
warnings.warn("Using deprecated setup.py invocation")
158+
return run("python setup.py --version").split("\n")[-1]
159+
160+
raise ValueError("No version identifier could be found!")
151161

152162

153163
def normalize_path(path):

setup.cfg

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,13 @@ install_requires =
3636
github-activity~=0.2
3737
importlib_resources
3838
jsonschema>=3.0.1
39+
packaging
40+
pkginfo
3941
pre-commit
4042
pypiserver
4143
pytest-check-links>=0.5
4244
requests
4345
requests_cache
44-
setuptools~=60.0
4546
tbump~=6.7
4647
toml~=0.10
4748
twine

0 commit comments

Comments
 (0)