Skip to content

Commit 4d6f16f

Browse files
authored
Merge pull request #28 from mbdevpl/feature/packaging
refresh packaging
2 parents 8a08bfb + 1303a17 commit 4d6f16f

File tree

10 files changed

+91
-83
lines changed

10 files changed

+91
-83
lines changed

.github/workflows/python.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ jobs:
6666
- uses: actions/setup-python@v5
6767
with:
6868
python-version: '3.13'
69-
- run: pip install build
69+
- run: pip install build~=1.2
7070
- run: python -m build
7171
- uses: pypa/gh-action-pypi-publish@release/v1
7272
with:

Dockerfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ WORKDIR /home/user/version-query
4545
COPY --chown=${USER_ID}:${GROUP_ID} requirements*.txt ./
4646

4747
RUN set -Eeuxo pipefail && \
48-
pip3 install --no-cache-dir -r requirements_ci.txt && \
49-
pip3 uninstall -y version-query
48+
pip3 install --no-cache-dir -r requirements_ci.txt
5049

5150
# prepare version-query for testing
5251

Jenkinsfile

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ pipeline {
9494
set -Eeuxo pipefail
9595
python3 -m twine upload \
9696
dist/${PYTHON_PACKAGE}-${VERSION}-py3-none-any.whl \
97-
dist/${PYTHON_PACKAGE}-${VERSION}.tar.gz \
98-
dist/${PYTHON_PACKAGE}-${VERSION}.zip
97+
dist/${PYTHON_PACKAGE}-${VERSION}.tar.gz
9998
"""
10099
}
101100
}
@@ -111,8 +110,7 @@ pipeline {
111110
script {
112111
githubUtils.createRelease([
113112
"dist/${PYTHON_PACKAGE}-${VERSION}-py3-none-any.whl",
114-
"dist/${PYTHON_PACKAGE}-${VERSION}.tar.gz",
115-
"dist/${PYTHON_PACKAGE}-${VERSION}.zip"
113+
"dist/${PYTHON_PACKAGE}-${VERSION}.tar.gz"
116114
])
117115
}
118116
}

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[build-system]
22
requires = [
3-
'boilerplates[setup] ~= 1.0',
3+
'boilerplates[setup] ~= 1.2',
44
'GitPython ~= 3.1',
55
'packaging >= 24.0',
66
'semver >= 2.13, < 3.1'

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
boilerplates[cli,logging] ~= 1.0
1+
boilerplates[cli,logging] ~= 1.2
22
GitPython ~= 3.1
33
packaging >= 24.0
44
semver >= 2.13, < 3.1

requirements_test.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
-r requirements.txt
2-
boilerplates[git-repo-tests,packaging-tests] ~= 1.0
3-
setuptools >= 67.4
2+
boilerplates[git-repo-tests,packaging-tests] ~= 1.2

setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ class Package(boilerplates.setup.Package):
1515
'Development Status :: 5 - Production/Stable',
1616
'Environment :: Console',
1717
'Intended Audience :: Developers',
18-
'License :: OSI Approved :: Apache Software License',
1918
'Natural Language :: English',
2019
'Operating System :: MacOS',
2120
'Operating System :: Microsoft :: Windows',

test/examples.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
from version_query.version import VersionComponent
1111

12-
_HERE = pathlib.Path(__file__).resolve().parent
13-
1412
_GIT_REPOS_ROOT = pathlib.Path(os.environ.get('EXAMPLE_PROJECTS_PATH', '..')).resolve()
1513

1614
GIT_REPO_EXAMPLES = list(_ for _ in _GIT_REPOS_ROOT.glob('**/.git') if _.is_dir())

test/test_cli.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
"""Tests of the CLI."""
2+
3+
import contextlib
4+
import io
5+
import logging
6+
import runpy
7+
import sys
8+
import unittest
9+
10+
from version_query.version import VersionComponent
11+
from version_query.query import \
12+
query_caller, query_version_str, predict_caller, predict_version_str
13+
14+
_LOG = logging.getLogger(__name__)
15+
16+
17+
@contextlib.contextmanager
18+
def temporarily_set_logger_level(logger_name: str, level: int):
19+
"""Change logger level on enter and restore on exit of this context."""
20+
logger = logging.getLogger(logger_name)
21+
level_ = logger.level
22+
logger.setLevel(level)
23+
try:
24+
yield
25+
finally:
26+
logger.setLevel(level_)
27+
28+
29+
def preserve_logger_level(logger_name: str):
30+
return temporarily_set_logger_level(logger_name, logging.getLogger(logger_name).level)
31+
32+
33+
def run_module(name: str, *args, run_name: str = '__main__') -> None:
34+
backup_sys_argv = sys.argv
35+
sys.argv = [name + '.py'] + list(args)
36+
runpy.run_module(name, run_name=run_name, alter_sys=True)
37+
sys.argv = backup_sys_argv
38+
39+
40+
class Tests(unittest.TestCase):
41+
42+
def test_not_as_main(self): # pylint: disable = no-self-use
43+
run_module('version_query', run_name='__not_main__')
44+
45+
def test_help(self):
46+
sio = io.StringIO()
47+
with contextlib.redirect_stderr(sio), preserve_logger_level('version_query'), \
48+
self.assertRaises(SystemExit):
49+
run_module('version_query')
50+
_LOG.info('%s', sio.getvalue())
51+
52+
def test_bad_usage(self):
53+
sio = io.StringIO()
54+
with contextlib.redirect_stderr(sio), preserve_logger_level('version_query'), \
55+
self.assertRaises(ValueError):
56+
run_module('version_query', '-p', '-i', '.')
57+
_LOG.info('%s', sio.getvalue())
58+
59+
def test_here(self):
60+
sio = io.StringIO()
61+
with temporarily_set_logger_level('version_query', logging.ERROR), \
62+
contextlib.redirect_stdout(sio):
63+
run_module('version_query', '.')
64+
self.assertEqual(sio.getvalue().rstrip(), query_caller().to_str())
65+
self.assertEqual(sio.getvalue().rstrip(), query_version_str())
66+
67+
def test_increment_here(self):
68+
sio = io.StringIO()
69+
with temporarily_set_logger_level('version_query', logging.ERROR), \
70+
contextlib.redirect_stdout(sio):
71+
run_module('version_query', '-i', '.')
72+
self.assertEqual(sio.getvalue().rstrip(),
73+
query_caller().increment(VersionComponent.Patch).to_str())
74+
75+
def test_predict_here(self):
76+
sio = io.StringIO()
77+
with temporarily_set_logger_level('version_query', logging.ERROR), \
78+
contextlib.redirect_stdout(sio):
79+
run_module('version_query', '-p', '.')
80+
self.assertEqual(sio.getvalue().rstrip(), predict_caller().to_str())
81+
self.assertEqual(sio.getvalue().rstrip(), predict_version_str())

test/test_query.py

Lines changed: 3 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,26 @@
11
"""Tests of querying tools."""
22

3-
import contextlib
43
import importlib
5-
import io
64
import logging
75
import os
86
import pathlib
97
import sys
108
import tempfile
119
import unittest
12-
import unittest.mock
1310

1411
from boilerplates.packaging_tests import run_module
1512

16-
from version_query.version import VersionComponent, Version
13+
from version_query.version import Version
1714
from version_query.git_query import query_git_repo, predict_git_repo
1815
from version_query.py_query import query_metadata_json, query_pkg_info, query_package_folder
19-
from version_query.query import \
20-
query_folder, query_caller, query_version_str, predict_caller, predict_version_str
16+
from version_query.query import query_folder, query_caller
2117
from .examples import \
2218
PY_LIB_DIR, GIT_REPO_EXAMPLES, METADATA_JSON_EXAMPLE_PATHS, PKG_INFO_EXAMPLE_PATHS, \
2319
PACKAGE_FOLDER_EXAMPLES
20+
from .test_cli import preserve_logger_level
2421

2522
_LOG = logging.getLogger(__name__)
2623

27-
IGNORED_FOLDER_NAMES = ['opencv']
28-
29-
30-
@contextlib.contextmanager
31-
def temporarily_set_logger_level(logger_name: str, level: int):
32-
"""Change logger level on enter and restore on exit of this context."""
33-
logger = logging.getLogger(logger_name)
34-
level_ = logger.level
35-
logger.setLevel(level)
36-
try:
37-
yield
38-
finally:
39-
logger.setLevel(level_)
40-
41-
42-
def preserve_logger_level(logger_name: str):
43-
return temporarily_set_logger_level(logger_name, logging.getLogger(logger_name).level)
44-
4524

4625
class Tests(unittest.TestCase):
4726

@@ -63,8 +42,6 @@ def test_example_count_checking(self):
6342

6443
def _query_test_case(self, paths, query_function):
6544
for path in paths:
66-
if any(_ in path.parts for _ in IGNORED_FOLDER_NAMES) or not path.exists():
67-
continue
6845
with self.subTest(path=path, query_function=query_function):
6946
_LOG.debug('testing %s() on %s', query_function.__name__, path)
7047
try:
@@ -164,46 +141,3 @@ def test_query_caller(self):
164141
version = query_caller()
165142
_LOG.debug('caller: %s', version)
166143
self.assertIsInstance(version, Version)
167-
168-
def test_not_as_main(self): # pylint: disable = no-self-use
169-
run_module('version_query', run_name=None)
170-
171-
def test_help(self):
172-
sio = io.StringIO()
173-
with contextlib.redirect_stderr(sio):
174-
with preserve_logger_level('version_query'):
175-
with self.assertRaises(SystemExit):
176-
run_module('version_query')
177-
_LOG.info('%s', sio.getvalue())
178-
179-
def test_bad_usage(self):
180-
sio = io.StringIO()
181-
with contextlib.redirect_stderr(sio):
182-
with preserve_logger_level('version_query'):
183-
with self.assertRaises(ValueError):
184-
run_module('version_query', '-p', '-i', '.')
185-
_LOG.info('%s', sio.getvalue())
186-
187-
def test_here(self):
188-
with temporarily_set_logger_level('version_query', logging.INFO):
189-
sio = io.StringIO()
190-
with contextlib.redirect_stdout(sio):
191-
run_module('version_query', '.')
192-
self.assertEqual(sio.getvalue().rstrip(), query_caller().to_str())
193-
self.assertEqual(sio.getvalue().rstrip(), query_version_str())
194-
195-
def test_increment_here(self):
196-
sio = io.StringIO()
197-
with contextlib.redirect_stdout(sio):
198-
with preserve_logger_level('version_query'):
199-
run_module('version_query', '-i', '.')
200-
self.assertEqual(sio.getvalue().rstrip(),
201-
query_caller().increment(VersionComponent.Patch).to_str())
202-
203-
def test_predict_here(self):
204-
with temporarily_set_logger_level('version_query', logging.INFO):
205-
sio = io.StringIO()
206-
with contextlib.redirect_stdout(sio):
207-
run_module('version_query', '-p', '.')
208-
self.assertEqual(sio.getvalue().rstrip(), predict_caller().to_str())
209-
self.assertEqual(sio.getvalue().rstrip(), predict_version_str())

0 commit comments

Comments
 (0)