Skip to content

Commit c535dfc

Browse files
committed
Use static versioning over setuptools_scm
1 parent d2e88d1 commit c535dfc

6 files changed

Lines changed: 39 additions & 69 deletions

File tree

.gitignore

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99
/.eggs/
1010
*egg-info/
1111

12-
# setuptools_scm
13-
/src/*/_version.py
14-
1512
# Vi
1613
*.swp
1714

dev-environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ dependencies:
2727
- flake8
2828
- pytest
2929
- pytest-cov
30-
- setuptools-scm >= 6.2
30+
- toml
3131
# Project from source
3232
- pip
3333
- pip:

pyproject.toml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "scyjava"
7+
version = "1.5.2.dev0"
78
authors = [
89
{name = "Curtis Rueden", email = "ctrueden@wisc.edu"},
910
{name = "Philipp Hanslovsky"},
@@ -38,8 +39,6 @@ dependencies = [
3839
"jpype1 >= 1.3.0",
3940
"jgo",
4041
]
41-
dynamic = ["version"]
42-
4342

4443
[project.urls]
4544
Homepage = "https://github.com/scijava/scyjava"
@@ -58,7 +57,7 @@ dev = [
5857
"pytest-cov",
5958
"numpy",
6059
"pandas",
61-
"setuptools-scm >= 6.2",
60+
"toml",
6261
]
6362

6463
[tool.setuptools]
@@ -69,5 +68,3 @@ include-package-data = false
6968
[tool.setuptools.packages.find]
7069
where = ["src"]
7170
namespaces = false
72-
73-
[tool.setuptools_scm]

src/scyjava/__init__.py

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@
2525
JLong,
2626
JShort,
2727
)
28+
from scyjava._version import _find_version
2829

2930
import scyjava.config
3031

32+
33+
__version__ = _find_version()
34+
35+
3136
_logger = logging.getLogger(__name__)
3237

3338
# Set of module properties
@@ -65,33 +70,6 @@ def __getattr__(name):
6570
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
6671

6772

68-
@constant
69-
def ___version__():
70-
# First pass: use the version output by setuptools_scm
71-
try:
72-
import scyjava.version
73-
74-
return scyjava.version.version
75-
except ImportError:
76-
pass
77-
# Second pass: use importlib.metadata
78-
try:
79-
from importlib.metadata import PackageNotFoundError, version
80-
81-
return version("scyjava")
82-
except ImportError or PackageNotFoundError:
83-
pass
84-
# Third pass: use pkg_resources
85-
try:
86-
from pkg_resources import get_distribution
87-
88-
return get_distribution("scyjava").version
89-
except ImportError:
90-
pass
91-
# Fourth pass: Give up
92-
return "Cannot determine version! Ensure pkg_resources is installed!"
93-
94-
9573
# -- JVM setup --
9674

9775
_startup_callbacks = []

src/scyjava/_version.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from importlib.util import find_spec
2+
3+
4+
def _find_version():
5+
# First pass: use importlib.metadata
6+
if find_spec("importlib.metadata"):
7+
from importlib.metadata import version
8+
9+
return version("scyjava")
10+
11+
if find_spec("pkg_resources"):
12+
from pkg_resources import get_distribution
13+
14+
return get_distribution("scyjava").version
15+
# Fourth pass: Give up
16+
return "Cannot determine version! Ensure pkg_resources is installed!"

tests/test_version.py

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,25 @@
1-
import os
21
import sys
2+
import toml
33

4+
from pathlib import Path
45
import pytest
5-
6-
setuptools_file = os.path.join(os.getcwd(), "src", "scyjava", "_version.py")
6+
import scyjava
7+
from scyjava._version import _find_version
78

89

910
def _scyjava_version():
1011
"""
1112
Get ScyJava's version.
1213
"""
13-
import scyjava
14-
15-
# It's important that we clear the cache here,
16-
# so that we can test different behaviors.
17-
scyjava.___version__.cache_clear()
18-
# Get the version
19-
return scyjava.__version__
20-
14+
pyproject = toml.load(Path(__file__).parents[1] / "pyproject.toml")
15+
return pyproject["project"]["version"]
2116

22-
def test_version_file():
23-
"""Ensures that, ideally, the version from setuptools_scm is used"""
24-
# Get the version from setuptools_scm
25-
from setuptools_scm import get_version
2617

27-
setuptools_version = get_version(write_to="src/scyjava/_version.py")
28-
# Ensure that the version was written to file
29-
assert os.path.isfile(setuptools_file)
30-
# Ensure that scyjava.__version__ matches this.
31-
assert _scyjava_version() == setuptools_version
32-
# Cleanup - remove file
33-
os.remove(setuptools_file)
34-
assert not os.path.isfile(setuptools_file)
18+
def test_version_dunder():
19+
"""
20+
Ensures that the dunder variable matches _scyjava_version
21+
"""
22+
assert scyjava.__version__ == _scyjava_version()
3523

3624

3725
@pytest.mark.skipif(sys.version_info < (3, 8), reason="Requires Python >= 3.8")
@@ -43,9 +31,8 @@ def test_version_importlib():
4331
# Remove scyjava.version
4432
sys.modules["scyjava.version"] = None
4533
# Ensure scyjava.__version__ matches importlib.metadata.version()
46-
from importlib.metadata import version
4734

48-
assert _scyjava_version() == version("scyjava")
35+
assert _scyjava_version() == _find_version()
4936

5037

5138
@pytest.mark.skipif(
@@ -57,30 +44,25 @@ def test_version_pkg_resources():
5744
importlib.metadata unavailable,
5845
pkg_resources is used next.
5946
"""
60-
# Remove scyjava.version
61-
sys.modules["scyjava.version"] = None
6247
# Remove importlib.metadata
6348
sys.modules["importlib.metadata"] = None
6449
# Ensure scyjava.__version__ matches
6550
# pkg_resources.get_distribution().version
66-
from pkg_resources import get_distribution
6751

68-
assert _scyjava_version() == get_distribution("scyjava").version
52+
assert _scyjava_version() == _find_version()
6953

7054

7155
def test_version_unvailable():
7256
"""
7357
Ensures that no version is returned if none of these
7458
strategies works.
7559
"""
76-
# Remove scyjava.version
77-
sys.modules["scyjava.version"] = None
7860
# Remove importlib.metadata
7961
sys.modules["importlib.metadata"] = None
8062
# Remove pkg_resources
8163
sys.modules["pkg_resources"] = None
8264
# Ensure scyjava.__version__ is an error message.
8365
assert (
84-
_scyjava_version()
85-
== "Cannot determine version! Ensure pkg_resources is installed!"
66+
"Cannot determine version! Ensure pkg_resources is installed!"
67+
== _find_version()
8668
)

0 commit comments

Comments
 (0)