def test_validation_value(kwargs): if 'release' not in kwargs: kwargs['release'] = 1 with pytest.raises(ValueError): # print so we can see output when test fails print(Version(**kwargs))
def test_attributes(kwargs, values, version): # save us repeating ourselves in test data above kwargs.setdefault('release', 1) v = Version(**kwargs) assert str(v) == version for key, value in values.items(): assert getattr(v, key) == value
def test_bump_by_value_error(): v = Version(release=1) with pytest.raises(ValueError, match='negative'): v.bump_epoch(by=-1) with pytest.raises(ValueError, match='negative'): v.bump_dev(by=-1) with pytest.raises(ValueError, match='negative'): v.bump_pre(by=-1) with pytest.raises(ValueError, match='negative'): v.bump_post(by=-1)
def test_bump_by_error(by): v = Version(release=1) with pytest.raises(TypeError): v.bump_epoch(by=by) with pytest.raises(TypeError): v.bump_dev(by=by) with pytest.raises(TypeError): v.bump_pre('a', by=by) with pytest.raises(TypeError): v.bump_post(by=by)
def check_pyproject_toml(): # https://packaging.python.org/tutorials/packaging-projects/ try: with open('pyproject.toml', encoding='utf8') as f: pyproject_toml = f.read() except FileNotFoundError: with open('pyproject.toml', 'w', encoding='utf8') as f: f.write(PYPROJECT_TOML) raise FileNotFoundError('pyproject.toml was not found; sample created') m = search(r'setuptools>=([\d.]+)', pyproject_toml) if not m or (Version.parse(m[1]) < Version((46, 4, 0))): raise RuntimeError( 'Please require `setuptools>=46.4.0` in pyproject.toml\n' "That's the minimum version that supports `attr` in setup.cfg.") if 'build-backend = "setuptools.build_meta"' not in pyproject_toml: raise RuntimeError( '`build-backend = "setuptools.build_meta"` not in pyproject.toml')
def get_release_version( current_version: Version, release_type: ReleaseType = None ) -> Version: """Return the next version according to git log.""" if release_type is DEV: if current_version.is_devrelease: return current_version.bump_dev() return current_version.bump_release(index=2).bump_dev() if release_type is None: release_type = get_release_type() if SIMULATE is True: print(f'* {release_type}') base_version = current_version.base_version() # removes devN if release_type is PATCH: return base_version if release_type is MINOR or current_version < Version(1): # do not change an early development version to a major release # that type of change should be more explicit (edit versions). return base_version.bump_release(index=1) return base_version.bump_release(index=0)
def test_init(vargs, s): args, kwargs = vargs assert str(Version(*args, **kwargs)) == s
def test_ambiguous(): with pytest.raises(ValueError, match='post_tag.*pre'): Version(release=1, pre_tag='rc', post=2, post_tag=None)
def test_release_tuple(): v = Version(release=[1, 2]) assert isinstance(v.release, tuple)
def test_bump_release_error(index, exc): with pytest.raises(exc): print(Version(release=1).bump_release(index))
def test_invalid(kwargs): """Test bad keyword combinations.""" with pytest.raises(ValueError): Version(release=1, **kwargs)
def test_release_tuple(arg, expected): v = Version(release=arg) assert isinstance(v.release, tuple) assert v.release == expected
def test_validation_value(kwargs): kwargs.setdefault('release', 1) with pytest.raises(ValueError): # print so we can see output when test fails print(Version(**kwargs))
def test_release_validation(release, exc, match): with pytest.raises(exc, match=match): Version(release=release)