version-query 1.6.2__tar.gz → 1.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {version_query-1.6.2/version_query.egg-info → version_query-1.6.3}/PKG-INFO +9 -9
- {version_query-1.6.2 → version_query-1.6.3}/pyproject.toml +1 -1
- {version_query-1.6.2 → version_query-1.6.3}/requirements.txt +1 -1
- version_query-1.6.3/requirements_test.txt +2 -0
- {version_query-1.6.2 → version_query-1.6.3}/setup.py +0 -1
- {version_query-1.6.2 → version_query-1.6.3}/test/examples.py +0 -2
- version_query-1.6.3/test/test_cli.py +81 -0
- {version_query-1.6.2 → version_query-1.6.3}/test/test_query.py +3 -69
- {version_query-1.6.2 → version_query-1.6.3/version_query.egg-info}/PKG-INFO +9 -9
- {version_query-1.6.2 → version_query-1.6.3}/version_query.egg-info/SOURCES.txt +2 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query.egg-info/requires.txt +1 -1
- version_query-1.6.2/requirements_test.txt +0 -3
- {version_query-1.6.2 → version_query-1.6.3}/LICENSE +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/MANIFEST.in +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/NOTICE +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/README.rst +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/setup.cfg +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/test/__init__.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/test/test_git.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/test/test_packaging.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/test/test_version.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/__init__.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/__main__.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/_version.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/git_query.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/main.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/parser.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/patterns.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/py.typed +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/py_query.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/query.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query/version.py +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query.egg-info/dependency_links.txt +0 -0
- {version_query-1.6.2 → version_query-1.6.3}/version_query.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: version-query
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.3
|
|
4
4
|
Summary: Zero-overhead package versioning for Python.
|
|
5
5
|
Home-page: https://github.com/mbdevpl/version-query
|
|
6
6
|
Download-URL:
|
|
@@ -8,12 +8,11 @@ Author: Mateusz Bysiek, John Vandenberg
|
|
|
8
8
|
Author-email: mateusz.bysiek@gmail.com
|
|
9
9
|
Maintainer: Mateusz Bysiek
|
|
10
10
|
Maintainer-email: mateusz.bysiek@gmail.com
|
|
11
|
-
License: Apache
|
|
11
|
+
License-Expression: Apache-2.0
|
|
12
12
|
Keywords: automation,continuous integration,git,releasing,semantic versioning,tagging,versioning
|
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
16
|
Classifier: Natural Language :: English
|
|
18
17
|
Classifier: Operating System :: MacOS
|
|
19
18
|
Classifier: Operating System :: Microsoft :: Windows
|
|
@@ -33,7 +32,7 @@ Requires-Python: >=3.9
|
|
|
33
32
|
Description-Content-Type: text/x-rst; charset=UTF-8
|
|
34
33
|
License-File: LICENSE
|
|
35
34
|
License-File: NOTICE
|
|
36
|
-
Requires-Dist: boilerplates[cli,logging]~=1.
|
|
35
|
+
Requires-Dist: boilerplates[cli,logging]~=1.2
|
|
37
36
|
Requires-Dist: GitPython~=3.1
|
|
38
37
|
Requires-Dist: packaging>=24.0
|
|
39
38
|
Requires-Dist: semver<3.1,>=2.13
|
|
@@ -44,7 +43,8 @@ Dynamic: description
|
|
|
44
43
|
Dynamic: description-content-type
|
|
45
44
|
Dynamic: home-page
|
|
46
45
|
Dynamic: keywords
|
|
47
|
-
Dynamic: license
|
|
46
|
+
Dynamic: license-file
|
|
47
|
+
Dynamic: license-expression
|
|
48
48
|
Dynamic: maintainer
|
|
49
49
|
Dynamic: maintainer-email
|
|
50
50
|
Dynamic: requires-dist
|
|
@@ -81,7 +81,7 @@ Zero-overhead package versioning for Python.
|
|
|
81
81
|
:alt: grade from Codacy
|
|
82
82
|
|
|
83
83
|
.. image:: https://img.shields.io/github/license/mbdevpl/version-query.svg
|
|
84
|
-
:target: https://github.com/mbdevpl/version-query/blob/v1.6.
|
|
84
|
+
:target: https://github.com/mbdevpl/version-query/blob/v1.6.3/NOTICE
|
|
85
85
|
:alt: license
|
|
86
86
|
|
|
87
87
|
Package versioning toolkit for Python which relies on git tags, git history traversal
|
|
@@ -491,8 +491,8 @@ Requirements
|
|
|
491
491
|
|
|
492
492
|
Python version 3.9 or later.
|
|
493
493
|
|
|
494
|
-
Python libraries as specified in `requirements.txt <https://github.com/mbdevpl/version-query/blob/v1.6.
|
|
494
|
+
Python libraries as specified in `requirements.txt <https://github.com/mbdevpl/version-query/blob/v1.6.3/requirements.txt>`_.
|
|
495
495
|
|
|
496
|
-
Building and running tests additionally requires packages listed in `requirements_test.txt <https://github.com/mbdevpl/version-query/blob/v1.6.
|
|
496
|
+
Building and running tests additionally requires packages listed in `requirements_test.txt <https://github.com/mbdevpl/version-query/blob/v1.6.3/requirements_test.txt>`_.
|
|
497
497
|
|
|
498
498
|
Tested on Linux, macOS and Windows.
|
|
@@ -15,7 +15,6 @@ class Package(boilerplates.setup.Package):
|
|
|
15
15
|
'Development Status :: 5 - Production/Stable',
|
|
16
16
|
'Environment :: Console',
|
|
17
17
|
'Intended Audience :: Developers',
|
|
18
|
-
'License :: OSI Approved :: Apache Software License',
|
|
19
18
|
'Natural Language :: English',
|
|
20
19
|
'Operating System :: MacOS',
|
|
21
20
|
'Operating System :: Microsoft :: Windows',
|
|
@@ -9,8 +9,6 @@ import typing as t
|
|
|
9
9
|
|
|
10
10
|
from version_query.version import VersionComponent
|
|
11
11
|
|
|
12
|
-
_HERE = pathlib.Path(__file__).resolve().parent
|
|
13
|
-
|
|
14
12
|
_GIT_REPOS_ROOT = pathlib.Path(os.environ.get('EXAMPLE_PROJECTS_PATH', '..')).resolve()
|
|
15
13
|
|
|
16
14
|
GIT_REPO_EXAMPLES = list(_ for _ in _GIT_REPOS_ROOT.glob('**/.git') if _.is_dir())
|
|
@@ -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())
|
|
@@ -1,47 +1,26 @@
|
|
|
1
1
|
"""Tests of querying tools."""
|
|
2
2
|
|
|
3
|
-
import contextlib
|
|
4
3
|
import importlib
|
|
5
|
-
import io
|
|
6
4
|
import logging
|
|
7
5
|
import os
|
|
8
6
|
import pathlib
|
|
9
7
|
import sys
|
|
10
8
|
import tempfile
|
|
11
9
|
import unittest
|
|
12
|
-
import unittest.mock
|
|
13
10
|
|
|
14
11
|
from boilerplates.packaging_tests import run_module
|
|
15
12
|
|
|
16
|
-
from version_query.version import
|
|
13
|
+
from version_query.version import Version
|
|
17
14
|
from version_query.git_query import query_git_repo, predict_git_repo
|
|
18
15
|
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
|
|
21
17
|
from .examples import \
|
|
22
18
|
PY_LIB_DIR, GIT_REPO_EXAMPLES, METADATA_JSON_EXAMPLE_PATHS, PKG_INFO_EXAMPLE_PATHS, \
|
|
23
19
|
PACKAGE_FOLDER_EXAMPLES
|
|
20
|
+
from .test_cli import preserve_logger_level
|
|
24
21
|
|
|
25
22
|
_LOG = logging.getLogger(__name__)
|
|
26
23
|
|
|
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
|
-
|
|
45
24
|
|
|
46
25
|
class Tests(unittest.TestCase):
|
|
47
26
|
|
|
@@ -63,8 +42,6 @@ class Tests(unittest.TestCase):
|
|
|
63
42
|
|
|
64
43
|
def _query_test_case(self, paths, query_function):
|
|
65
44
|
for path in paths:
|
|
66
|
-
if any(_ in path.parts for _ in IGNORED_FOLDER_NAMES) or not path.exists():
|
|
67
|
-
continue
|
|
68
45
|
with self.subTest(path=path, query_function=query_function):
|
|
69
46
|
_LOG.debug('testing %s() on %s', query_function.__name__, path)
|
|
70
47
|
try:
|
|
@@ -164,46 +141,3 @@ class Tests(unittest.TestCase):
|
|
|
164
141
|
version = query_caller()
|
|
165
142
|
_LOG.debug('caller: %s', version)
|
|
166
143
|
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())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: version-query
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.3
|
|
4
4
|
Summary: Zero-overhead package versioning for Python.
|
|
5
5
|
Home-page: https://github.com/mbdevpl/version-query
|
|
6
6
|
Download-URL:
|
|
@@ -8,12 +8,11 @@ Author: Mateusz Bysiek, John Vandenberg
|
|
|
8
8
|
Author-email: mateusz.bysiek@gmail.com
|
|
9
9
|
Maintainer: Mateusz Bysiek
|
|
10
10
|
Maintainer-email: mateusz.bysiek@gmail.com
|
|
11
|
-
License: Apache
|
|
11
|
+
License-Expression: Apache-2.0
|
|
12
12
|
Keywords: automation,continuous integration,git,releasing,semantic versioning,tagging,versioning
|
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
16
|
Classifier: Natural Language :: English
|
|
18
17
|
Classifier: Operating System :: MacOS
|
|
19
18
|
Classifier: Operating System :: Microsoft :: Windows
|
|
@@ -33,7 +32,7 @@ Requires-Python: >=3.9
|
|
|
33
32
|
Description-Content-Type: text/x-rst; charset=UTF-8
|
|
34
33
|
License-File: LICENSE
|
|
35
34
|
License-File: NOTICE
|
|
36
|
-
Requires-Dist: boilerplates[cli,logging]~=1.
|
|
35
|
+
Requires-Dist: boilerplates[cli,logging]~=1.2
|
|
37
36
|
Requires-Dist: GitPython~=3.1
|
|
38
37
|
Requires-Dist: packaging>=24.0
|
|
39
38
|
Requires-Dist: semver<3.1,>=2.13
|
|
@@ -44,7 +43,8 @@ Dynamic: description
|
|
|
44
43
|
Dynamic: description-content-type
|
|
45
44
|
Dynamic: home-page
|
|
46
45
|
Dynamic: keywords
|
|
47
|
-
Dynamic: license
|
|
46
|
+
Dynamic: license-file
|
|
47
|
+
Dynamic: license-expression
|
|
48
48
|
Dynamic: maintainer
|
|
49
49
|
Dynamic: maintainer-email
|
|
50
50
|
Dynamic: requires-dist
|
|
@@ -81,7 +81,7 @@ Zero-overhead package versioning for Python.
|
|
|
81
81
|
:alt: grade from Codacy
|
|
82
82
|
|
|
83
83
|
.. image:: https://img.shields.io/github/license/mbdevpl/version-query.svg
|
|
84
|
-
:target: https://github.com/mbdevpl/version-query/blob/v1.6.
|
|
84
|
+
:target: https://github.com/mbdevpl/version-query/blob/v1.6.3/NOTICE
|
|
85
85
|
:alt: license
|
|
86
86
|
|
|
87
87
|
Package versioning toolkit for Python which relies on git tags, git history traversal
|
|
@@ -491,8 +491,8 @@ Requirements
|
|
|
491
491
|
|
|
492
492
|
Python version 3.9 or later.
|
|
493
493
|
|
|
494
|
-
Python libraries as specified in `requirements.txt <https://github.com/mbdevpl/version-query/blob/v1.6.
|
|
494
|
+
Python libraries as specified in `requirements.txt <https://github.com/mbdevpl/version-query/blob/v1.6.3/requirements.txt>`_.
|
|
495
495
|
|
|
496
|
-
Building and running tests additionally requires packages listed in `requirements_test.txt <https://github.com/mbdevpl/version-query/blob/v1.6.
|
|
496
|
+
Building and running tests additionally requires packages listed in `requirements_test.txt <https://github.com/mbdevpl/version-query/blob/v1.6.3/requirements_test.txt>`_.
|
|
497
497
|
|
|
498
498
|
Tested on Linux, macOS and Windows.
|
|
@@ -8,6 +8,7 @@ requirements_test.txt
|
|
|
8
8
|
setup.py
|
|
9
9
|
./test/__init__.py
|
|
10
10
|
./test/examples.py
|
|
11
|
+
./test/test_cli.py
|
|
11
12
|
./test/test_git.py
|
|
12
13
|
./test/test_packaging.py
|
|
13
14
|
./test/test_query.py
|
|
@@ -25,6 +26,7 @@ setup.py
|
|
|
25
26
|
./version_query/version.py
|
|
26
27
|
test/__init__.py
|
|
27
28
|
test/examples.py
|
|
29
|
+
test/test_cli.py
|
|
28
30
|
test/test_git.py
|
|
29
31
|
test/test_packaging.py
|
|
30
32
|
test/test_query.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|